Add the compiler's name table (src/compiler/names.s): case-insensitive
interning of identifiers into 1-byte IDs held in bank 1, a 64-bucket chained
hash, preservation of the first declaration's spelling, and a deterministic
resource error when the table is full.
src/compiler/names.s, src/common/names.inctests/names/scripts/build-names-test.ps1, scripts/verify-names-test.ps1docs/memory-map.md (bank-1 usage), docs/decisions.md (capacity)planning/claims/E02-S03.mdbuild/TICKER/Ticker, count/Count/COUNT, and the
$C1-$DA respellings in collide.n8 all reuse their IDs.runner (used first) is stored as Runner after class Runner; tick
keeps its first declaration over a later method Tick(); Main survives
later main/MAIN. name_get returns spelling and a declared flag.collide.n8 puts 8 names in one bucket,
including x0/y2 with an identical 8-bit hash, plus near-miss names.
A mutation that skips the text compare merges y2 into x0 and fails.full.n8 interns 255 names, then 5 new names (and 2 repeats of them)
get NAMES_ERR_FULL while existing names still resolve; an 8-byte guard
directly after the table in bank 1 stays intact.The capacity (255 distinct names) is a user-visible limit, so it is recorded
as a proposed decision. The resource error is a names return code; E02-S04
maps it to an Exxx diagnostic.
scripts/verify-names-test.ps1 (pass plus collision
mutation).src/compiler/names.s, src/common/names.inc,
tests/names/, scripts/build-names-test.ps1,
scripts/verify-names-test.ps1, docs/memory-map.md,
docs/decisions.md (D120, proposed), this claim.Exxx
diagnostic (E02-S04).Powered by TurnKey Linux.