# The CALC ladder — the ratchet for the work in CALC-COMPILE.md. # # One row per program, in the same shape run_compile_tests.sh asserts against # tests/fixtures/expected.tsv: # # OK # ERR # # tests/calc_ladder.sh stages a COPY of the named program — and of the # companions that must sit beside it — into tmp/calc_ladder/ and runs the # freshly built compiler on it. A copy, not the Resources file itself: the # include (Stage 2 of CALC-COMPILE.md) resolves relative to the including file, # so CALC.INC has to be beside CALC.PAS in the staged tree. # # The rung may only move FORWARD. Each stage that removes a blocker replaces # the row in the SAME commit as the fix and says why in the message. Never # edit a row to make a failing suite pass; that is the one thing this file # exists to prevent. # # pos is NOT a file offset. TextBuf.LoadFile collapses CRLF and a lone LF to a # single CR, so pos indexes the NORMALISED buffer: CALC.PAS is 11,241 bytes on # disk and 11,059 normalised, so the reported 7791 is file byte 7901. Every # position written here is a normalised one. Once {$I CALC.INC} lands the # buffer is CALC.PAS with the directive replaced by CALC.INC, so all downstream # positions shift — which is exactly why this must be a measured number, not a # remembered one. # # Current rung (2026-10-21): `Value := 0' in CALC.INC's Init - a REAL field # assignment. String-field assignment through DI landed (t79_strfield), # moving 15201 -> 15272. Value is a 6-byte Real; the RHS is the integer 0, so # this needs the real representation and an integer-to-real conversion before # any real arithmetic can follow. CALC.PAS ERR 102 15272