test(ffi-linkage): xfail example for extern fn rename (Phase 1.2a)
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.
This commit is contained in:
@@ -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.**
|
||||
|
||||
13
examples/1224-ffi-extern-fn-rename.sx
Normal file
13
examples/1224-ffi-extern-fn-rename.sx
Normal file
@@ -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
|
||||
}
|
||||
1
examples/expected/1224-ffi-extern-fn-rename.exit
Normal file
1
examples/expected/1224-ffi-extern-fn-rename.exit
Normal file
@@ -0,0 +1 @@
|
||||
0
|
||||
1
examples/expected/1224-ffi-extern-fn-rename.stderr
Normal file
1
examples/expected/1224-ffi-extern-fn-rename.stderr
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
examples/expected/1224-ffi-extern-fn-rename.stdout
Normal file
1
examples/expected/1224-ffi-extern-fn-rename.stdout
Normal file
@@ -0,0 +1 @@
|
||||
c_abs(-42) = 42
|
||||
Reference in New Issue
Block a user