Gate‑C(Core) OOB strict fail‑fast; String VM handler normalization; JSON lint Stage‑B root fixes via scanner field boxing and BinOp operand slotify; docs + smokes update

This commit is contained in:
nyash-codex
2025-11-01 18:45:26 +09:00
parent c331296552
commit 47bd2d2ee2
15 changed files with 280 additions and 107 deletions

View File

@ -23,8 +23,17 @@ impl super::MirBuilder {
return self.build_logical_shortcircuit(left, operator, right);
}
let lhs = self.build_expression(left)?;
let rhs = self.build_expression(right)?;
let lhs_raw = self.build_expression(left)?;
let rhs_raw = self.build_expression(right)?;
// Correctness-first: ensure both operands have block-local definitions
// so they participate in PHI/materialization and avoid use-before-def across
// complex control-flow (e.g., loop headers and nested branches).
let lhs = self
.ensure_slotified_for_use(lhs_raw, "@binop_lhs")
.unwrap_or(lhs_raw);
let rhs = self
.ensure_slotified_for_use(rhs_raw, "@binop_rhs")
.unwrap_or(rhs_raw);
let dst = self.value_gen.next();
let mir_op = self.convert_binary_operator(operator)?;