86bff9a06d8e97725cc308a9fbf74f2779f29bbc
Every fec error message was written to stderr, and COMMAND.COM can only redirect handle 1 -- ">" is the whole vocabulary, "2>" is not parsed at all. So a failing compile recorded exit code 1 and a zero-byte log, and the actual message went to a screen nobody reads. Confirmed directly: `FEC.EXE --check` on a fixture that must fail produced rc=1 and 0 bytes of stdout. That is why an unexpected compiler failure was undiagnosable. It also means the M6 reject cases have only ever asserted "exit code was nonzero" -- the error text they nominally check has never been observable to the runner. Add fe_diag_stream(), which resolves once to stdout when FE_DIAG_STDOUT is set and stderr otherwise, and route diag.c and driver.c through it. The default is unchanged, so interactive use keeps writing to stderr; the runner sets the variable in RUN.BAT. The stderr references in check.c and emit_c.c are the Ferro language's own std.io.stderr writer and are deliberately untouched. Verified in DOSBox-X: 155 passed. A rejecting compile now records its message, source excerpt and caret in RESULTS\<key>.LOG. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BScg8CF1sAAM2zVHAu5zvW
Description
doslang mirror
914 KiB
Languages
C
94.2%
Python
3%
Assembly
2%
JavaScript
0.6%