Tag v3-corpus-run. V3 suite 152/152, fixpoint OK.
The TopSpeed corpus validated the sidecar grammar, not V3 the
compiler (the sidecar is a separate TSM2 binary built from
TopSpeed-V3-M2.atg; it reuses V3's SymTab/QbeGen/FileIO sources
but never runs compiler/M2). So this work runs V3 itself over two
real Modula-2 corpora.
Harness: tools/v3-corpus/corpus.sh — compiles each file with
compiler/M2 alone (pairing an IMPLEMENTATION with its sibling
DEFINITION), in a scratch tree, and splits failures into CRASH (M2
died) / LIB (imports a module outside V3's known stdlib) / LANG (real
gap).
1. gm2 testsuite — testsuite/gm2/pim/pass + iso/run/pass
(612 files):
| files | |
|---|---|
| compile-OK | 242 |
| CRASH | 0 |
| LIB (missing gm2 library) | 185 |
| LANG (real V3 gap) | 185 |
2. gm2 standard libraries — $HOME/bin/Modula2/Gm2/lib/gcc/…/m2/
(m2pim/m2iso/m2log/m2cor/m2min, 336 files, .def+.mod):
| files | |
|---|---|
| compile-OK | 78 |
| CRASH | 0 |
| LIB | 176 |
| LANG | 82 |
(LIB is high in both because each file is compiled alone — cross-module imports are not resolved; the real signal is LANG.)
v3-fix-longline-crashPrintListing's line buffer was ARRAY [0 .. 255] and GetLine wrote
without bounding to HIGH(line), so a source line > 255 chars (an
860-char enum line in the gm2 set tests) overflowed the stack. Fixed
in compiler/src/compiler.frm (truncate in GetLine, buffer →
4096, bounded caret loop); regression t_longline.mod; CRASH → 0.
EXPORT QUALIFIED in DEFINITION modules — this stepgm2/PIM definition modules carry an export list
(EXPORT QUALIFIED ReadString, WriteString, …;). V3's DefUnit did
not accept it → 'END' expected on the first such file. Added the
clause (parsed; the names are already exported by the module scope).
This raised both corpora: testsuite compile-OK 219 → 242, gm2
libs 42 → 78.
230s (array constructors, …).PROCEDURE __BUILTIN__ name(...) (Builtins/libc/libm/…),
C-name pragmas, ISO module attributes — which are not V3's dialect.SYSTEM facilities (FROM SYSTEM
IMPORT BYTE), anchored subranges T[lo..hi], unnamed
procedure-type parameters.cd tools/v3-corpus
./corpus.sh # gm2 testsuite -> 242 OK / 185 LANG
G=$HOME/bin/Modula2/Gm2/lib/gcc/x86_64-pc-linux-gnu/16.0.1/m2
./corpus.sh $G/m2pim $G/m2iso $G/m2log $G/m2cor $G/m2min # 78 OK
SYSTEM facilities: expose BYTE/WORD/SHORTADDR etc.T[lo..hi] (small grammar addition)..defs) to remove the LIB noise and isolate LANG.tools/v3-corpus/{corpus.sh,README.md}, compiler/src/compiler.frm
(long-line fix), compiler/src/M2.atg (EXPORT QUALIFIED),
compiler/tests/t_longline.mod, compiler/run_tests.sh, this doc.