The compiler no longer emits reference-counting ops anywhere, and the format reserves them. With Phase 3a's collector this completes the runtime half of iteration 7b: spec success criteria 3 (no RC ops in any image, opcodes reserved) and 6 (corpus ASan-clean) are met — `just oop-accept` is fully green. - owner.ml: the rc machinery is deleted outright — rc_site/rc_op types, the rcs table, fn_rcs/rc_groups/rc_escaped, record_rc, release_gc, gc_escape, resolve_rc, and the clobber rule (its only consumer was elision). The `push`-of-a-gc-value RC_INC special case is gone (the bug class cannot recur without RC). Drop tables (owned + LGc kinds) are untouched — the gc mask is what feeds the collector's root maps. - emit.ml: emit_rc, the v_rc view, the escape-acquire anchor, and every caller deleted; assignment displacing a traced value emits nothing (the VM's store barrier owns it); scope-ended LGc handles clear their gc-mask bit so root maps stay precise. - .wob v4: WOB_VERSION 3 -> 4 in wob.h + emit.ml + disasm.ml + the runner's loader battery; opcodes 27-28 removed from the enum/jump table/interpreter and REJECTED by the loader like any unknown opcode. - dump.ml: the == RC == owner-dump section is gone; 6 goldens re-blessed (owner dumps lose the section, elision.wo's bc dump loses its RC ops). - runner.ml: rc-table/ELIDED assertions deleted; the elision test now asserts the WHOLE image contains no RC op; the table-contract sweep asserts rc ops never appear. - test_unwind.c: the rc-opcodes test becomes two — the loader rejects reserved opcode 27, and an abandoned traced instance is freed by rt_destroy (ASan-proven). Verified: woc-test 540/0 + test_diag 14/0; runtime test + test-iso all suites ASan/UBSan (test_unwind 12/0); cli_smoke; oop-e2e 79/0 (v4 images end to end); employee 8/0; log-watcher 7/0; ring runs + reclaimed (freed=3) with zero RC ops in its image; `just oop-accept` ALL CRITERIA MET. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
22 lines
441 B
Text
22 lines
441 B
Text
== MOVES ==
|
|
16:15 MOVE inner ASSIGN
|
|
51:20 MOVE a ARG(it)
|
|
57:7 MOVE a ASSIGN
|
|
62:18 MOVE a ARG(it)
|
|
== DROPS ==
|
|
12:3 SCOPE BODY [extra, spare]
|
|
16:7 OVERWRITE spare
|
|
18:5 SCOPE WHILE [tick]
|
|
21:5 SCOPE FOR [seen]
|
|
29:3 SCOPE THEN [tmp]
|
|
31:25 LIVE-MASK [tmp, b, a]
|
|
34:5 RETURN [b, a]
|
|
36:23 LIVE-MASK [b, a]
|
|
37:3 RETURN [b, a]
|
|
41:3 LIVE-MASK [r]
|
|
42:3 RETURN [r]
|
|
46:3 RETURN [it]
|
|
50:3 JOIN-DROP ELSE [a]
|
|
58:3 RETURN [a]
|
|
64:3 RETURN [a]
|
|
== RESIDUAL ==
|