State after this pass: suite 301/301, fixpoint OK 3,573,487 bytes, corpus 521/612 compile-OK, 0 crashes, 64 LANG, 27 LIB.
The corpus is compile-only. This pass separated the remaining LANG
failures into policy, dialect/lexical choices, implementation limits,
and genuine language/library gaps. It also fixed one small genuine
ISO/gm2 builtin.
LFLOAT(x) (testfloat4): accepted as the ISO/gm2
integer/LONGREAL conversion. V3 represents all reals as 64-bit, so
it shares the FLOAT implementation (VAL(REAL, x)).
Regression: t_lfloat.testfloat4 now compiles; corpus 518 → 519.
decl-order)These are not language gaps. V3 deliberately enforces PIM/ISO declaration-before-use for data. The files use a module variable, constant, type or nested-module export before its declaration (often to match gm2’s multi-pass behavior).
adrunbounded3, arrayptr, arrayptr6, block, blockindirect,
nestedfor, param3, proc;complextypes, colour;constprocedure, conststrarray, constvec3;constructor1, constructor3;record7, record14.def, record15.def, record16.def;subrange4, subrange7, subrange11;setconst3, setoverflow, sets2, smallset2, stressset,
largeset1, largeset2, tinyset6, tinyset7;onebyte, onebyte2, onebyte3;except2, except4, except5, except7, except8, except9;shift3, shift4;unbounded5, unbounded6, unbounded7, unbounded8.adraddress also contains a genuine ADDRESS/pointer comparison gap,
but its r reference before declaration means it remains a
declaration-order case under policy.
No policy relaxation is recommended.
B suffix: arrayindirect (666B).H numeric suffix: wordconst (012H).ASM: fooasm3 (not in the V3 scope).divaddr, modaddr, multaddr, pointer
(ADDRESS DIV/MOD/* and pointer arithmetic; gm2 extensions).timeio2 (CHAR - CHAR; not standard).another (assigning distinct
but structurally identical array types).SHORTREAL vs WORD VAR: testparam3 (gm2 word-model
extension; V3 has 64-bit reals).VAR [addr]: T: now supported at module level;
the gm2 corpus uses the 1000H suffix, so those cases still need a
literal-form update or scanner support.CHAR: CHAR.mod collides with the predefined
type; gm2-specific test naming.settest1, settest3: fixed by bounded wide sets plus the dynamic
sorted-range representation for SET OF CARDINAL (corpus 519 → 521).largeset5: set ordering (<, >=); PIM/ISO only defines
=/#/IN for sets, so this is a gm2 extension rather than a
missing standard operation.badpointer: requires gm2 DynamicStrings/opaque String
behavior; the module is not part of V3’s shipped library set.
Classified as a library/extension case, not a parser/codegen gap.t_addreq);
adraddress remains a declaration-order corpus case.No other genuine standard-language gap was found in the current
LANG set.
Proceed with separate compilation/library folders as the next major feature. Corpus policy and dialect categories should stay documented rather than being “fixed” by relaxing V3.