Eric Streit 619bff9a99 gaps 1-5: libc, enum/char sets, MIN/MAX+ sized types, set builtins, forward types 1 week ago
..
README.md 7ccbb509eb corpus: SYSTEM storage types, anchored subranges, unnamed proc-type params, import resolution 1 week ago
corpus.sh 619bff9a99 gaps 1-5: libc, enum/char sets, MIN/MAX+ sized types, set builtins, forward types 1 week ago

README.md

v3-corpus

Runs the V3 compiler (compiler/M2) over a corpus of standard Modula-2 sources and reports compile coverage — unlike tools/topspeed-grammar, which runs the sidecar grammar.

./corpus.sh [corpus-dir ...]
# default: gm2 testsuite pim/pass + iso/run/pass

Each source is copied into a scratch tree (so its .LST listing never touches the corpus) and compiled on its own. A file with 0 errors is a pass. Failures are split into:

  • CRASH — M2 died (rc ≥ 128): a real compiler bug;
  • LIB — the file imports a module outside V3's known stdlib set (gm2's StrIO/NumberIO/STextIO/…), so the undeclared identifiers are expected, not a language gap;
  • LANG — otherwise: a genuine parse/semantic gap in V3.

A "pass" is syntactic+semantic cleanup, not a linkable image (many testsuite files are DEFINITION/IMPLEMENTATION modules with no program; V3 reports those as Incorrect source but with 0 errors).

An IMPLEMENTATION file is compiled together with its sibling DEFINITION (same basename, .def/.DEF) when present, and with the DEFINITION of every module it imports, searched in the source directory and in the colon-separated $V3_LIBS directories — so cross-module imports resolve. E.g.:

G=$HOME/bin/Modula2/Gm2/lib/gcc/x86_64-pc-linux-gnu/16.0.1/m2
V3_LIBS="$G/m2pim:$G/m2iso:$G/m2log:$G/m2cor:$G/m2min" ./corpus.sh

Corpora used:

  • gm2 testsuite pim/pass + iso/run/pass;
  • the gm2 standard libraries, e.g. $HOME/bin/Modula2/Gm2/lib/gcc/x86_64-pc-linux-gnu/16.0.1/m2/{m2pim,m2iso,m2log,m2cor,m2min}.

Current baseline: docs/summary_v3-corpus.md.