Sources/Dezip/ is an external collection, not part of the build. The
working tree now retains only pascsrc/: 71 .pas files, all of which
compile. The original dump contained 4,919 .pas files (77 MB, about
354k lines); its census below is kept as history, not as the current result.
Every file is compiled separately with shell/compiletest, in a fresh process
and with a 5-second timeout. Separate processes matter: one crashing source
must not hide the rest. The repeatable check is tests/corpus_check.py,
wired into tests/run_all.sh when Sources/Dezip/pascsrc exists.
| 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 surviving 71 files are wired into run_all.sh through
tests/corpus_check.py; an absent Sources/ tree is a skip, because that
material is user-owned and untracked. The current result is 71 / 71 OK.
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 compiling
TP3 examples — were deliberately kept during that first pass.
Before cleanup: 6,810 files, 4,919 .pas, 907 zips.
After the conservative pass: 1,731 files, 71 .pas, 858 zips.
The final working-tree cleanup removed Sources/simtel and every
Sources/Dezip entry except pascsrc/. The tree is now 78 files /
71 .pas / 0 zips, and all 71 Pascal files compile.
The remaining 71 Pascal files compile as 71 OK / 0 errors with the
current compiler. The 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 TP3-feature gaps are now closed; the
corpus is clean:
The final batch closed dynamic set constructors ([Storage[Index]]),
text-file width formatting (Write(File, integer:width) and string widths),
Getdir/Seg/Ofs/Mem, and text-file numeric Read/Readln.