|
|
@@ -0,0 +1,110 @@
|
|
|
+# Corpus triage — 2026-10-24
|
|
|
+
|
|
|
+**State after this pass:** suite **301/301**, fixpoint OK
|
|
|
+**3,573,487 bytes**, corpus **519/612 compile-OK, 0 crashes**,
|
|
|
+**66 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.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Fixed in this pass
|
|
|
+
|
|
|
+- **`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**.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Declaration-order policy (`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.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Lexical / dialect choices (not planned as language changes)
|
|
|
+
|
|
|
+- **No octal `B` suffix**: `arrayindirect` (`666B`).
|
|
|
+- **No `H` numeric suffix**: `wordconst` (`012H`).
|
|
|
+- **Inline `ASM`**: `fooasm3` (not in the V3 scope).
|
|
|
+- **Address arithmetic**: `divaddr`, `modaddr`, `multaddr`, `pointer`
|
|
|
+ (`ADDRESS DIV/MOD/*` and pointer arithmetic; gm2 extensions).
|
|
|
+- **CHAR arithmetic**: `timeio2` (`CHAR - CHAR`; not standard).
|
|
|
+- **Structural array/type leniency**: `another` (assigning distinct
|
|
|
+ but structurally identical array types).
|
|
|
+- **`SHORTREAL` vs `WORD` VAR**: `testparam3` (gm2 word-model
|
|
|
+ extension; V3 has 64-bit reals).
|
|
|
+- **Absolute variables** `VAR [addr]: T`: `varaddress`,
|
|
|
+ `varaddress2`, `varaddress3`.
|
|
|
+- **Module named `CHAR`**: `CHAR.mod` collides with the predefined
|
|
|
+ type; gm2-specific test naming.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Implementation limits
|
|
|
+
|
|
|
+- `settest1`, `settest3`: set span beyond the current 65536-bit limit.
|
|
|
+- `largeset5`: set ordering (`<`, `>=`); PIM/ISO only defines
|
|
|
+ `=`/`#`/`IN` for sets, so this is a gm2 extension rather than a
|
|
|
+ missing standard operation.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Library / foreign-module cases
|
|
|
+
|
|
|
+- `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.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Genuine gaps worth considering later
|
|
|
+
|
|
|
+- **ADDRESS ↔ pointer comparison**: `adraddress` exposes it, but the
|
|
|
+ file is also declaration-order. A small `SymTab.EqCheck` extension
|
|
|
+ is safe (equality only), but it will not move the corpus count until
|
|
|
+ the file’s declaration order is fixed.
|
|
|
+- **Absolute variables** and **inline ASM** remain unimplemented
|
|
|
+ extensions; neither is part of the current PIM/ISO target.
|
|
|
+- **Wide sets** remain an explicit implementation limit; raising it is
|
|
|
+ a separate design task.
|
|
|
+
|
|
|
+No other genuine standard-language gap was found in the current
|
|
|
+`LANG` set.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Recommendation
|
|
|
+
|
|
|
+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.
|