diff --git a/internal/core/runtime/extern.go b/internal/core/runtime/extern.go index 423df562ad2..8a307c7fa17 100644 --- a/internal/core/runtime/extern.go +++ b/internal/core/runtime/extern.go @@ -245,14 +245,15 @@ func (d *externDecorator) markExternFieldAttr(kind string, decls []ast.Decl) (er case *ast.Attribute: key, body := x.Split() - if key != "extern" { + // Support old-style and new-style extern attributes. + if key != "extern" && key != kind { break } lastField := len(fieldStack) - 1 if lastField < 0 { errs = errors.Append(errs, errors.Newf(x.Pos(), - "extern attribute not associated with field")) + "@%s attribute not associated with field", kind)) return true } @@ -260,7 +261,7 @@ func (d *externDecorator) markExternFieldAttr(kind string, decls []ast.Decl) (er if _, ok := d.fields[f]; ok { errs = errors.Append(errs, errors.Newf(x.Pos(), - "duplicate extern attributes")) + "duplicate @%s attributes", kind)) return true } diff --git a/internal/core/runtime/testdata/basic.txtar b/internal/core/runtime/testdata/basic.txtar index 0bd1a85e371..883b53945af 100644 --- a/internal/core/runtime/testdata/basic.txtar +++ b/internal/core/runtime/testdata/basic.txtar @@ -5,9 +5,9 @@ package foo -Foo: _ @extern(file1.xx, abi=c, sig="func(int)int") +Foo: _ @test(file1.xx, abi=c, sig="func(int)int") -Rename: _ @extern(file1.xx, name=Emaner, abi=c, sig="func(int)int") +Rename: _ @test(file1.xx, name=Emaner, abi=c, sig="func(int)int") -- file2.cue -- @extern("test") @@ -17,7 +17,7 @@ package foo Bar: { @other() - @extern(file2.xx, abi=c, sig="func(int)int") + @test(file2.xx, abi=c, sig="func(int)int") _ } diff --git a/internal/core/runtime/testdata/compile.txtar b/internal/core/runtime/testdata/compile.txtar index 69d97c56a0a..bcdc0098fdb 100644 --- a/internal/core/runtime/testdata/compile.txtar +++ b/internal/core/runtime/testdata/compile.txtar @@ -3,7 +3,7 @@ package ok -foo: _ @extern("file.xx", fail) +foo: _ @test("file.xx", fail) -- out/extern -- can't load from external module: TEST: fail compilation: ./compile.cue:5:8 diff --git a/internal/core/runtime/testdata/errors.txtar b/internal/core/runtime/testdata/errors.txtar index e14ebcc0baf..2c40d8d8429 100644 --- a/internal/core/runtime/testdata/errors.txtar +++ b/internal/core/runtime/testdata/errors.txtar @@ -13,14 +13,14 @@ package foo package foo -Fn1: _ @extern("file1.xx" abi sig) +Fn1: _ @test("file1.xx" abi sig) -- empty_extern.cue -- @extern() package foo -Fn2: _ @extern("file1.xx" abi sig) +Fn2: _ @test("file1.xx" abi sig) -- unknown_interpreter.cue -- @@ -28,7 +28,7 @@ Fn2: _ @extern("file1.xx" abi sig) package foo -Fn3: _ @extern("file1.xx" abi sig) +Fn3: _ @wazem("file1.xx" abi sig) -- double_extern_a.cue -- @extern("test") @@ -36,7 +36,7 @@ Fn3: _ @extern("file1.xx" abi sig) package foo -Fn4a: _ @extern("file1.xx") +Fn4a: _ @test("file1.xx") -- double_extern_b.cue -- @extern("test") @@ -45,14 +45,14 @@ Fn4a: _ @extern("file1.xx") package foo -Fn4b: _ @extern("file1.xx") +Fn4b: _ @test("file1.xx") -- package_attr.cue -- @extern("test") package foo -@extern("file1.xx") +@test("file1.xx") Fn5: _ -- duplicate.cue -- @@ -61,12 +61,12 @@ Fn5: _ package foo -Fn6: _ @extern("file1.xx",sig=func(int)int) @extern("file1.xx", sig=func(int)bool) +Fn6: _ @test("file1.xx",sig=func(int)int) @test("file1.xx", sig=func(int)bool) Fn7: { - @extern("file1.xx",sig=func(int)int) + @test("file1.xx",sig=func(int)int) _ -} @extern("file1.xx", sig=func(int)bool) +} @test("file1.xx", sig=func(int)bool) -- non_ident.cue -- @extern("test") @@ -74,9 +74,9 @@ Fn7: { package foo -"a-b": _ @extern("file1.xx",sig=func(int)int) +"a-b": _ @test("file1.xx",sig=func(int)int) -[string]: _ @extern("file1.xx",sig=func(int)int) +[string]: _ @test("file1.xx",sig=func(int)int) -- late_extern.cue -- package foo @@ -84,16 +84,16 @@ package foo @extern("test") -Foo: _ @extern(file1.xx, abi=c, sig="func(int)int") +Foo: _ @test(file1.xx, abi=c, sig="func(int)int") -- out/extern -- only one file-level extern attribute allowed per file: ./double_extern_a.cue:2:1 only one file-level extern attribute allowed per file: ./double_extern_b.cue:2:1 -duplicate extern attributes: - ./duplicate.cue:6:45 -duplicate extern attributes: +duplicate @test attributes: + ./duplicate.cue:6:43 +duplicate @test attributes: ./duplicate.cue:11:3 interpreter name must be non-empty: ./empty_extern.cue:1:1 @@ -105,7 +105,7 @@ can only define functions for fields with identifier names, found "a-b": ./non_ident.cue:6:10 can only define functions for fields with identifier names, found [string]: ./non_ident.cue:8:13 -extern attribute not associated with field: +@test attribute not associated with field: ./package_attr.cue:5:1 no interpreter defined for "wazem": ./unknown_interpreter.cue:1:1 diff --git a/internal/core/runtime/testdata/failinit.txtar b/internal/core/runtime/testdata/failinit.txtar index 54ecee8e3be..d2c47889d2a 100644 --- a/internal/core/runtime/testdata/failinit.txtar +++ b/internal/core/runtime/testdata/failinit.txtar @@ -6,7 +6,7 @@ package failinit -foo: _ @extern("file.xx") +foo: _ @test("file.xx") -- out/extern -- TEST: fail initialization diff --git a/internal/core/runtime/testdata/legacy.txtar b/internal/core/runtime/testdata/legacy.txtar new file mode 100644 index 00000000000..0bd1a85e371 --- /dev/null +++ b/internal/core/runtime/testdata/legacy.txtar @@ -0,0 +1,30 @@ +-- cue.mod/modules.cue -- +-- file1.cue -- +@extern("test") + +package foo + + +Foo: _ @extern(file1.xx, abi=c, sig="func(int)int") + +Rename: _ @extern(file1.xx, name=Emaner, abi=c, sig="func(int)int") + +-- file2.cue -- +@extern("test") + +package foo + + +Bar: { + @other() + @extern(file2.xx, abi=c, sig="func(int)int") + _ +} + +-- extern/out -- +-- out/extern -- +{ + Foo: implFoo1 + Bar: implBar2 + Rename: implEmaner1 +} diff --git a/internal/core/runtime/testdata/nested.txtar b/internal/core/runtime/testdata/nested.txtar index 76ee8afff80..cd266b9d042 100644 --- a/internal/core/runtime/testdata/nested.txtar +++ b/internal/core/runtime/testdata/nested.txtar @@ -5,9 +5,9 @@ package foo -a: Foo: _ @extern(file1.xx, abi=c, sig="func(int)int") +a: Foo: _ @test(file1.xx, abi=c, sig="func(int)int") -a: Rename: _ @extern(file1.xx, name=Emaner, abi=c, sig="func(int)int") +a: Rename: _ @test(file1.xx, name=Emaner, abi=c, sig="func(int)int") -- file2.cue -- @extern("test") @@ -17,7 +17,7 @@ package foo a: foo: Bar: { @other() - @extern(file2.xx, abi=c, sig="func(int)int") + @test(file2.xx, abi=c, sig="func(int)int") _ } diff --git a/internal/core/runtime/testdata/no_top_extern.txtar b/internal/core/runtime/testdata/no_top_extern.txtar index 0bbc758ddf0..f8bb3f334d9 100644 --- a/internal/core/runtime/testdata/no_top_extern.txtar +++ b/internal/core/runtime/testdata/no_top_extern.txtar @@ -8,7 +8,7 @@ package foo -Foo: _ @extern(file.xx, abi=c, sig="func(int)int") +Foo: _ @test(file.xx, abi=c, sig="func(int)int") -- extern/out -- -- out/extern/config --