test(C0.2): pin curated-bindings shape — #source-only unit + hand #foreign works (JIT+AOT), but the ref is decorative (xfail for C3.1)
This commit is contained in:
17
examples/1619-cimport-source-only.sx
Normal file
17
examples/1619-cimport-source-only.sx
Normal file
@@ -0,0 +1,17 @@
|
||||
// Pins the curated-bindings shape (PLAN-C C0.2): a `#source`-only unit
|
||||
// (no `#include`, so no auto-synthesized decls) paired with a
|
||||
// hand-written `#foreign` decl naming the unit. Works in JIT and AOT
|
||||
// today — but see 1620: the unit ref is not yet validated or scoped,
|
||||
// so the symbol actually resolves globally, not through the unit.
|
||||
#import "modules/std.sx";
|
||||
|
||||
only :: #import c {
|
||||
#source "1619-cimport-source-only/only.c";
|
||||
};
|
||||
|
||||
only_answer :: () -> i32 #foreign only "only_answer";
|
||||
|
||||
main :: () -> i32 {
|
||||
print("answer = {}\n", only_answer() + 1);
|
||||
0
|
||||
}
|
||||
1
examples/1619-cimport-source-only/only.c
Normal file
1
examples/1619-cimport-source-only/only.c
Normal file
@@ -0,0 +1 @@
|
||||
int only_answer(void) { return 41; }
|
||||
18
examples/1620-cimport-foreign-ref-unvalidated.sx
Normal file
18
examples/1620-cimport-foreign-ref-unvalidated.sx
Normal file
@@ -0,0 +1,18 @@
|
||||
// Pins the C3 gap (PLAN-C C0.2b): the `#foreign` library/unit ref is
|
||||
// DECORATIVE today — `nosuchunit` names nothing anywhere, yet this
|
||||
// compiles and the symbol resolves globally (the unit's objects are in
|
||||
// the program; the ref is never consulted). After C3 this is a
|
||||
// compile-time diagnostic: a #foreign ref must name a #library or a
|
||||
// named `#import c` unit.
|
||||
#import "modules/std.sx";
|
||||
|
||||
refs :: #import c {
|
||||
#source "1620-cimport-foreign-ref-unvalidated/ref.c";
|
||||
};
|
||||
|
||||
ref_answer :: () -> i32 #foreign nosuchunit "ref_answer";
|
||||
|
||||
main :: () -> i32 {
|
||||
print("ref = {}\n", ref_answer());
|
||||
0
|
||||
}
|
||||
1
examples/1620-cimport-foreign-ref-unvalidated/ref.c
Normal file
1
examples/1620-cimport-foreign-ref-unvalidated/ref.c
Normal file
@@ -0,0 +1 @@
|
||||
int ref_answer(void) { return 7; }
|
||||
1
examples/expected/1619-cimport-source-only.exit
Normal file
1
examples/expected/1619-cimport-source-only.exit
Normal file
@@ -0,0 +1 @@
|
||||
0
|
||||
1
examples/expected/1619-cimport-source-only.stderr
Normal file
1
examples/expected/1619-cimport-source-only.stderr
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
examples/expected/1619-cimport-source-only.stdout
Normal file
1
examples/expected/1619-cimport-source-only.stdout
Normal file
@@ -0,0 +1 @@
|
||||
answer = 42
|
||||
@@ -0,0 +1 @@
|
||||
0
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ref = 7
|
||||
Reference in New Issue
Block a user