Freeze the object/class descriptor ABI and make it visible in generated MAP output. A class descriptor is an 8-byte packed record containing the instance size, an optional destructor address, an interface count, a pointer to an interface-directory array, and reserved flags that must be zero. Objects start with a two-byte pointer to their descriptor; fields follow at offset 2.
Add src/runtime/objects.s helpers to read an object's descriptor, size,
destructor, and interface directory. Extend output.s with out_class records
and deterministic CLASS name size destroy count ifdir MAP lines. There is no
parent-class slot and no inheritance path.
src/common/class.inc, src/runtime/objects.s (new)src/common/formats.inc, src/compiler/output.stests/runtime/class-test.sscripts/build-class-test.ps1, scripts/verify-class-test.ps1docs/decisions.md, docs/architecture.md, docs/memory-map.mdplanning/claims/E05-S02.mdbuild/EMPTY descriptor reports size 7 and destructor 0; BOX reports size 35 and
a nonzero destructor. obj_size/obj_destroy read both values from the
descriptor.obj_class rejects a null object/pointer and
returns the descriptor for both real objects.CLASS EMPTY 0007 0000 00 0000 and
CLASS BOX 0023 <destroy> 01 <dir> after the section records, with actual
label addresses supplied by the linker. The verifier compares the complete
MAP and the host reruns the fixture on a freshly built disk.class.inc records this ABI.output.s with out_class, initialized class-record storage, and
appended deterministic CLASS MAP lines after sections. Converted the new
writer's long error branches to short branches plus JMP trampolines.CLASSTEST.PRG/MAP through the real writer.MB_PROD_PROGRAM; corrected the
verifier to use the drive's lowercase classtest.map name.scripts/build-class-test.ps1scripts/verify-class-test.ps1 -Port 6552 (repeated on fresh disks)scripts/verify-output-test.ps1 -Port 6530 -RunPort 6531git diff --check$A5, code 0, and all
eight descriptor/object/MAP flags set. The screen shows
NOVA128 CLASS TEST OK. The complete MAP is identical to the expected
six-line record, including CLASS EMPTY 0007 0000 00 0000 and
CLASS BOX 0023 <destroy_b> 01 <iface_dir>. The existing output test still
passes with its 133-byte PRG and unchanged section MAP.src/common/class.inc, src/runtime/objects.s,
src/common/formats.inc, src/compiler/output.s,
tests/runtime/class-test.s, scripts/build-class-test.ps1,
scripts/verify-class-test.ps1, docs/decisions.md,
docs/architecture.md, docs/memory-map.md, this claim.out_class or
emit class descriptors; the MAP exposes descriptor records but not
field-by-field offset lines, which remain the parser layout record until
codegen pass 3. The descriptor flags, interface descriptor pointer, and
method-table pointer are reserved for later interface work. The fixture uses
static synthetic objects, so construction/deletion remains E05-S03. Tests
run against a fresh true-drive D81.Powered by TurnKey Linux.