Sources/Dezip/ is an external collection, not part of the build. It contains
4,919 .pas files (77 MB, about 354k lines). Most are SWAG/FreePascal or
Delphi units, so a failure count is not a compiler score; it is a map of what
the TP3 subset does not cover yet.
Every file was compiled separately with the current shell/compiletest, in a
fresh process and with a 5-second timeout. Separate processes matter: the
first batch run aborted after a compiler bug, and one crashing source must not
hide the rest of the corpus.
| result | count |
|---|---|
| compiles | 49 |
| errors | 4,870 |
| crashes/timeouts | 0 |
By error code:
| code | meaning | count |
|---|---|---|
| 41 | unknown construct/identifier | 4,335 |
| 90 | include file not found | 418 |
| 102 | not implemented | 48 |
| 1 | syntax / semicolon | 39 |
| 30 | simple type expected | 20 |
| 56 | type mismatch | 9 |
| 99 | compiler overflow | 1 |
The useful subset is pascsrc/, which is the classic TP3 example material:
44 of 84 compile. The SWAG tree is 4,473 files, almost all FreePascal or
Delphi units; only 5 compile.
'I' is scanned as a CHAR scalar, not a
string, so DefConst took the integer path and shifted a 16-bit value through
divi until it became zero: SIGFPE in DefConst. The array element type
is now consulted; a scalar element of a STRING array is stored as a
one-character string. t118_strconstarray compiles and prints '', I,
II.Roman2.pas in the SWAG tree. It now gets a normal
diagnostic (Word is not yet a type) instead of killing the compiler.uses/unit imports. Most SWAG files cannot even reach a declaration
after their uses line.Word, LongInt, ShortInt, Single, Double.absolute, Printer, Dos, Mem/Msdos, and
Addr beyond the currently supported pointer paths.ERROR 90, 418 files).The 49 clean files are useful smoke material, but the corpus is intentionally
not wired into run_all.sh: it lives outside the repository and most of it is
outside the TP3 language subset.
The obvious non-TP3 material was removed:
Dezip/swag-pascal-master tree and its
swag-pascal-master.zip;.pas files outside that tree that declare unit, use uses, or carry
FreePascal/Delphi markers;Mixed archives — including pascsrc.zip, which also contains the 44 compiling
TP3 examples — were deliberately kept.
Before cleanup: 6,810 files, 4,919 .pas, 907 zips.
After cleanup: 1,731 files, 71 .pas, 858 zips.
The remaining 71 Pascal files compile as 65 OK / 6 errors with the
current compiler. The recent upgrades cover long identifiers, named labels,
Addr, field widths, nested arrays, negative bounds, forward pointer types,
NIL, forward procedure parameters, nested record fields, whole-record/array
assignment, integer / as REAL division, Ord, Succ/Pred on enums, and
enum subranges, a leading set constructor in a set expression, Round/Trunc,
integer-to-REAL assignment, SHL/SHR, address-based pointers, char arrays,
Msdos/Intr, and variant records. The remaining 6 are TP3-feature gaps, not
unit/Delphi noise:
FINDCHRS, LIST3, OT3, READDATA, READINTS, READSTOR.
They reduce to three groups: a dynamic set constructor such as
[Storage[Index]] (FINDCHRS), DOS Getdir/text-file formatting
(LIST3, OT3), and text-file numeric Read/Readln
(READDATA, READINTS, READSTOR).