#import "modules/std.sx"; #import "modules/build.sx"; // P5.1 smoke test — the post-link build driver runs on the comptime VM, // not the legacy interpreter. // // The callback allocates and GROWS a `List` (three appends). Comptime List // growth works only on the VM; the legacy interp fails it (issue 0141: // `struct_get: base has no fields`). So this build SUCCEEDS only because // `core.invokeByFuncId` routes the post-link callback through the VM. // // AOT note: the corpus snapshots an AOT example's *executed binary* streams, // and the build step's own stdout is discarded — so the callback's success is // observed via the build EXIT CODE. On the VM the callback returns true, the // build links cleanly (exit 0), and the binary runs → "runtime main". If the // driver regressed to the legacy interp the callback would bail, the build // would exit non-zero, and this snapshot would fail. post_link :: () -> bool abi(.compiler) { names := List(string).{}; names.append("alpha"); names.append("beta"); names.append("gamma"); return names.len == 3; } configure :: () abi(.compiler) { opts := build_options(); opts.set_post_link_callback(post_link); } #run configure(); main :: () { print("runtime main\n"); }