main: "--- build done ---" delimiter on stderr for top-level #run
Tests that exercise top-level #run produce two interleaved
output streams: the interp's #run prints (flushed via
std.debug.print → stderr at core.zig:187/190) and the JIT-
executed main's prints (libc write fd=1 → stdout). When the
test runner captures both via 2>&1 the boundary between them
is invisible — the snapshot reads as one block.
Now `sx run` emits "--- build done ---\n" on stderr right
before invoking the JIT, when `hasTopLevelRun(root)` is true.
Tests without top-level #run keep their current snapshots
unchanged; only the 7 affected tests pick up the delimiter
between the build-time and run-time sections.
Example: 05-run flips from
hello 25
hello 25
to
hello 25
--- build done ---
hello 25
— the first "hello 25" is from `#run main()` running at
compile time, the second is from JIT main() running at
runtime. The delimiter makes that explicit.
204/204 example tests + `zig build test` green.
This commit is contained in:
@@ -283,6 +283,15 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
// JIT from precompiled object (relocation only, no IR compilation)
|
// JIT from precompiled object (relocation only, no IR compilation)
|
||||||
sx.llvm_api.initNativeTarget();
|
sx.llvm_api.initNativeTarget();
|
||||||
timer.mark();
|
timer.mark();
|
||||||
|
// Phase separator: emit a clear delimiter between any #run output
|
||||||
|
// (which prints via the interp to stderr) and the JIT-executed
|
||||||
|
// main's runtime output (which writes to stdout). Without this,
|
||||||
|
// test logs and human-eye reads interleave compile-time and
|
||||||
|
// run-time output ambiguously. Only when top-level #run exists —
|
||||||
|
// pure-runtime tests keep their current snapshots.
|
||||||
|
if (hasTopLevelRun(root)) {
|
||||||
|
std.debug.print("--- build done ---\n", .{});
|
||||||
|
}
|
||||||
const exit_code = sx.target.runJITFromObject(obj_buf) catch {
|
const exit_code = sx.target.runJITFromObject(obj_buf) catch {
|
||||||
// JIT failed — fall back to AOT
|
// JIT failed — fall back to AOT
|
||||||
timer.record("jit-fail");
|
timer.record("jit-fail");
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
hello 25
|
hello 25
|
||||||
|
--- build done ---
|
||||||
hello 25
|
hello 25
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
--- build done ---
|
||||||
runtime main
|
runtime main
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
--- build done ---
|
||||||
rt
|
rt
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
--- build done ---
|
||||||
rt
|
rt
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
--- build done ---
|
||||||
ios-sim runtime main
|
ios-sim runtime main
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
--- build done ---
|
||||||
build config: ok
|
build config: ok
|
||||||
pointer size: 8
|
pointer size: 8
|
||||||
os: macos
|
os: macos
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
|
--- build done ---
|
||||||
|
|||||||
Reference in New Issue
Block a user