# 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. ```sh ./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 identifier`s 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.: ```sh 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`.