Add examples/1225-ffi-extern-global.sx — '__stdinp : *void extern;' references libSystem's stdin pointer via the bare 'extern' modifier on a typed var decl (the extern-named counterpart of the #foreign global in examples/1205). Hand-authored snapshot expects the success output. RED: 1225 is the sole corpus failure (636 ran, 1 failed) — parse error, 'extern' after a type annotation is not yet accepted in the var-decl path. Phase 1.2d parses it and lowers the extern global. xfail commit per the cadence rule.
16 lines
612 B
Plaintext
16 lines
612 B
Plaintext
// extern data global (FFI-linkage stream, Phase 1.2): reference a symbol
|
|
// defined elsewhere (here libSystem's __stdinp) via the bare `extern`
|
|
// linkage modifier on a typed var decl — the extern-named counterpart of
|
|
// `<name> : <type> #foreign;` (see examples/1205). The optional
|
|
// `extern [LIB] ["csym"]` tail mirrors the fn form; bare here (the sx name
|
|
// IS the C symbol, resolved against the default-linked libSystem).
|
|
#import "modules/std.sx";
|
|
|
|
__stdinp : *void extern;
|
|
|
|
main :: () -> i32 {
|
|
addr_bits : u64 = xx @__stdinp;
|
|
print("stdin extern global non-null: {}\n", addr_bits != 0);
|
|
0
|
|
}
|