From 5f946a3d4440c6f8c9b28867c95f522375e9f0fb Mon Sep 17 00:00:00 2001 From: agra Date: Sun, 14 Jun 2026 13:26:57 +0300 Subject: [PATCH] test(ffi-linkage): xfail example for extern fn rename (Phase 1.2a) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add examples/1224-ffi-extern-fn-rename.sx — 'c_abs :: (n) -> i32 extern "abs";' binds C's abs via the optional symbol-name override. Hand-authored expected captures the success output (c_abs(-42) = 42). RED: 1224 is the sole corpus failure (635 ran, 1 failed) — parse error, the '"abs"' string after 'extern' is not yet accepted. Phase 1.2b parses the optional [LIB] ["csym"] tail and consumes the rename. xfail commit per the cadence rule. --- current/CHECKPOINT-EXTERN-EXPORT.md | 11 ++++++++++- examples/1224-ffi-extern-fn-rename.sx | 13 +++++++++++++ examples/expected/1224-ffi-extern-fn-rename.exit | 1 + examples/expected/1224-ffi-extern-fn-rename.stderr | 1 + examples/expected/1224-ffi-extern-fn-rename.stdout | 1 + 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 examples/1224-ffi-extern-fn-rename.sx create mode 100644 examples/expected/1224-ffi-extern-fn-rename.exit create mode 100644 examples/expected/1224-ffi-extern-fn-rename.stderr create mode 100644 examples/expected/1224-ffi-extern-fn-rename.stdout diff --git a/current/CHECKPOINT-EXTERN-EXPORT.md b/current/CHECKPOINT-EXTERN-EXPORT.md index 09b8044..23c4646 100644 --- a/current/CHECKPOINT-EXTERN-EXPORT.md +++ b/current/CHECKPOINT-EXTERN-EXPORT.md @@ -71,6 +71,15 @@ historical carve-out — keep `issues/*.md` provenance, gate the live tree only. mirroring `foreign_expr`): `funcWantsImplicitCtx` + `declareFunction` cc + `lazyLowerFunction`/`lowerFunction`/`lowerFunctionBodyInto` guards. 1223 green; `declare i32 @abs(i32)` (C ABI, no ctx). Suite green (634/443). `green` commit. +- (1.2a) Added `examples/1224-ffi-extern-fn-rename.sx` (`c_abs :: … extern "abs";`) + + hand-authored success snapshot (`c_abs(-42) = 42`). RED (635 ran, 1 failed — parse + error: `"abs"` after `extern` not yet accepted). `xfail`; 1.2b greens it. (Also + recovered a formatter-clobbered `parser.zig` — see Known issues.) ## Known issues -None yet. +- **Workflow hazard (1.2):** an editor format-on-save (or `zig fmt`) clobbered the + working-tree `src/parser.zig` between commits — it reformatted one-liners AND + silently dropped my `hasFnBodyAfterArrow` extern edit, reverting 1223 to a parse + error. Recovered with `git checkout src/parser.zig` (HEAD had the correct, + committed version). **After any Edit-tool change to a file the IDE may have open, + rebuild + run the affected example before trusting the edit.** diff --git a/examples/1224-ffi-extern-fn-rename.sx b/examples/1224-ffi-extern-fn-rename.sx new file mode 100644 index 0000000..6b7ace6 --- /dev/null +++ b/examples/1224-ffi-extern-fn-rename.sx @@ -0,0 +1,13 @@ +// extern with a "csym" rename (FFI-linkage stream, Phase 1.2): the sx name +// `c_abs` binds C's `abs` via the optional symbol-name override after the +// `extern` keyword — mirrors `#foreign "abs"`. The optional `LIB` ident slot +// (extern_lib) sits before the string; here it's omitted (libc is +// default-linked). +#import "modules/std.sx"; + +c_abs :: (n: i32) -> i32 extern "abs"; + +main :: () -> i32 { + print("c_abs(-42) = {}\n", c_abs(xx -42)); + 0 +} diff --git a/examples/expected/1224-ffi-extern-fn-rename.exit b/examples/expected/1224-ffi-extern-fn-rename.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/expected/1224-ffi-extern-fn-rename.exit @@ -0,0 +1 @@ +0 diff --git a/examples/expected/1224-ffi-extern-fn-rename.stderr b/examples/expected/1224-ffi-extern-fn-rename.stderr new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/expected/1224-ffi-extern-fn-rename.stderr @@ -0,0 +1 @@ + diff --git a/examples/expected/1224-ffi-extern-fn-rename.stdout b/examples/expected/1224-ffi-extern-fn-rename.stdout new file mode 100644 index 0000000..cdce4a1 --- /dev/null +++ b/examples/expected/1224-ffi-extern-fn-rename.stdout @@ -0,0 +1 @@ +c_abs(-42) = 42