// Extern data globals via ` : #foreign;`. Lets sx code // reference libSystem / framework symbols (NSConcreteStackBlock, // __stdinp, etc.) for FFI bridges. Mirrors the long-standing // ` :: (...) -> ... #foreign;` form on the function side. // // Cross-file dimension (PLAN-FFI step 0.10): the helper companion // `94-foreign-global-helper.sx` ALSO declares `__stdinp : *void #foreign;`. // Both files referencing the same extern symbol must link cleanly — // LLVM dedupes the named global, the C linker resolves both refs to // the one libSystem symbol. // // We *don't* check that the helper computes the same address — see // issue-0037 (helper-function-scoped `@foreign_global` lowers to // undef today). When that fixes, fold the helper's address back into // the equality check here. #import "modules/std.sx"; #import "1205-ffi-foreign-global-helper.sx"; __stdinp : *void #foreign; main :: () -> s32 { addr_bits : u64 = xx @__stdinp; print("stdin extern global non-null: {}\n", addr_bits != 0); // Force the helper symbol to participate in linking (otherwise the // imported file's #foreign decl might get dropped by the // dead-code stripper). The actual return value is busted today // — see issue-0037. _ := stdinp_addr_present(); print("helper file linked: true\n"); 0 }