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:
agra
2026-06-12 16:38:02 +03:00
parent 2808d5df82
commit 22455c706b
10 changed files with 43 additions and 0 deletions

View 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
}

View File

@@ -0,0 +1 @@
int only_answer(void) { return 41; }

View 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
}

View File

@@ -0,0 +1 @@
int ref_answer(void) { return 7; }

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@
answer = 42

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@
ref = 7