16 fn/global examples across categories (0415/0602/0603/1024/1025/1605/1607-1609/ 1611/1616/1619/1622/1628/1635/1636): bare '#foreign'→'extern'. All cls=0 (no class forms). Marker'd ones (1605/1609/1611 + the rest) corpus-validated; the 3 unmarked uikit importers (1607/1608/1616) verified byte-identical via 'sx ir' probes. Empty snapshot diff; suite green (647 corpus / 444 unit, 0 failed). LEFT comment-only/provenance #foreign (0716/0729 + issues/0030-extern-global + extern-test files 1223-1231/1332/1348/1349/1426) and the keep-list (identity ffi-foreign-* + foreign-asserting diagnostics 1172/1174/1219/1228/1620) for Phase 8.
27 lines
695 B
Plaintext
27 lines
695 B
Plaintext
#import "modules/std.sx";
|
|
#import "modules/build.sx";
|
|
|
|
// Post-link callback registration. The compiler invokes `post_link`
|
|
// after `target.link()` returns (sx build). Under `sx run` (JIT) the
|
|
// callback is registered but never invoked because there's no link
|
|
// phase — so the only thing this example prints under the test
|
|
// runner is `runtime main`. The post-link path is exercised via
|
|
// `sx build` separately.
|
|
|
|
puts :: (s: [:0]u8) -> i32 extern libc;
|
|
|
|
post_link :: () -> bool {
|
|
puts("[post-link] callback fired");
|
|
true
|
|
}
|
|
|
|
configure :: () {
|
|
opts := build_options();
|
|
opts.set_post_link_callback(post_link);
|
|
}
|
|
#run configure();
|
|
|
|
main :: () {
|
|
print("runtime main\n");
|
|
}
|