Repository navigation
Assign every TCO loop slot from its tail-call argument - #11444
Conversation
After the slot/local split, a same-named tail-call arg is not a no-op: skip it and the seed parser hangs on a two-arg call. Assign every TCO slot from its argument; enroll parse_two_arg_call_terminates and the RFM row. Co-authored-by: Cursor <cursoragent@cursor.com>
…tells Operator ruling 2026-09-15: black-boxing a -> d and optimizing a measured axis is locally sound and globally inefficient (moves cost, suppresses the deletion signal, sets scope by target); the qualitative stance is the obligatory one toward a process one owns. Receipts: R1 (#11401), B1 vs the prepared choice plan (#11422), the TCO loop (#11444). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Emitter-grain tco_tail_call_assigns_every_loop_slot checks every slot is written from a fully evaluated temp (Rust/Python/Go share shared_tco_reassign) and reds under the identity-elision mutant. The seed parse control now covers multiline parse_param_list_acc and parse_arg_list_acc and asserts the expected AST. Co-authored-by: Cursor <cursoragent@cursor.com>
…iteration. The fixture walk() emit now has slot-assignment count == param count with each __tco_loop_acc / __tco_loop_n dest once before continue. parse_arg_list_acc and parse_param_list_acc get the same slot writes, which is the 8a1aad substance on a PR off main. Co-authored-by: Cursor <cursoragent@cursor.com>
The Rust #[test] is off the merge path; compile_dag_rust_emit_check and the identity-elision mutant now run as claim witnesses. Co-authored-by: Cursor <cursoragent@cursor.com>
The distinguishing-facts receipt named a class that does not exist; the parse-test concat rows had drifted from the committed projection. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 66621:
|
The .dag generator already emitted that slice; the installed compiler_tests.rs dropped it and would fail E0425 on regen. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 66654:
|
The RED is a floor witness that calls shared_tco_reassign with the identity dest omitted; cargo-test remains local diligence only. Co-authored-by: Cursor <cursoragent@cursor.com>
Production 05_emit has only the real reassign path; the RED copies the filter over the same args/slots the production fold sees. Co-authored-by: Cursor <cursoragent@cursor.com>
…trings were dropped. v1_rt::concat is binary; removing identity-elision pieces left five extra opens, so every CI lane failed compiling v1-stage0-v1-infer. Co-authored-by: Cursor <cursoragent@cursor.com>
…ed concat. required-ci generated-artifact refused v1_compiler_compiler_tests_rust.rs: the binary concat nest written to close the mutant drop was not the emitter's bytes. Co-authored-by: Cursor <cursoragent@cursor.com>
The floor's roots are dag + src/v2, so a dag/test/claim import of v1.compiler.emit is unresolved. Local diligence lives under src/v1/tests/claim; the enrolled wall is the build-lane timeout. Co-authored-by: Cursor <cursoragent@cursor.com>
v2 self-compile of src/v1 does not close v2.std.logic; the leftover floor import refused generated-artifact as a hard diagnostic. Co-authored-by: Cursor <cursoragent@cursor.com>
…ion mutant.
concat! does not unescape {{, so the walk/add sources never compiled. The mutant omitted dests by construction and could not red production.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 66722:
— sent from zesty-koi-299 |
Retrigger CI after #11455 scoped floor pure-producer share so this head is no longer judged on the stale main refusal.
…ration. Slots are rewritten before continue, so a move is sound and drops the String-accumulator copy. Python/Go iteration-let arms stay empty: only Rust has __tco_loop_* dests. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 66772:
— sent from zesty-koi-299 |
…d arms. The helper is only called from the Rust TCO body emitter; keeping a target match left unreachable Python and Go production. Co-authored-by: Cursor <cursoragent@cursor.com>
Regenerated v1_compiler_parse.rs so the seed carries both TCO slot writes and main's parser changes. Co-authored-by: Cursor <cursoragent@cursor.com>
Regenerated the concurrent-divergent seed parser and sibling mirrors from the merged authorities. TCO identity-passthrough stays on #11444. Co-authored-by: Cursor <cursoragent@cursor.com>
CI was timeout-cancel with no floor verdict: identity-passthrough skipped slot assigns after the local/slot split. The always-write emitter from #11444 is now on this branch so required lanes can finish. Co-authored-by: Cursor <cursoragent@cursor.com>
…d kept #11219's stale mirror, which references a helper #11444 removed) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RtujL6ZdnmmcCBMihVRZ8z
Summary
__tco_loop_<p>, authored names are rebound each iteration (tco_loop_iteration_lets).v1.compiler.emit(source roots aredag+src/v2only). Next-rung trigger is a CI lane that executes v1.compiler witnesses — a declared gap, not a floor row.v1.tests.claim.tco_tail_call_assigns_every_loop_slot_witnessundersrc/v1/tests/claim; Rust#[test]tco_tail_call_assigns_every_loop_slot/parse_multiline_two_param_fn_and_two_arg_call_yields_expected_module(rust_unit_tests_off_the_merge_path).tco_identity_passthrough_elision_after_slot_local_splitstates that standing. Discriminator: identity-elision mutant in the v1 claim file.v1_compiler_compiler_tests_rust.rsinstalled from--required-regen.Test plan
parse_multiline_two_param_fn_and_two_arg_call_yields_expected_module(local cargo test)tco_tail_call_assigns_every_loop_slot(local cargo test)Land this first. Then #11401. Then merge main into #11422 (parser cutover only), srv1 A/B on that final head, CI green, then ask to merge. Lookahead stays deleted (§3c).