From 79cbf26f98846f63620a878a8df129c650a11c07 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Thu, 27 Nov 2025 04:58:01 +0900 Subject: [PATCH] Phase 33-4: Stage-1/Stage-B expansion complete (33-4.1 to 33-4.3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Code Changes - Extended function name whitelist in try_lower_if_to_joinir() - Added: JsonShapeParser._read_value_from_pair/1 (Stage-1) - Added: Stage1JsonScannerBox.value_start_after_key_pos/2 (Stage-B) ## Validation - A/B testing: Route A (if_phi) vs Route B (Select) → identical results (RC 0) - Test cases: joinir_if_select_simple.hako, joinir_if_select_local.hako - Build: cargo build --release successful ## Documentation (docs/private submodule) - TASKS.md: Phase 33-4.1 to 33-4.3 marked complete - if_joinir_design.md: Section 9 added (candidate analysis) ## Next Steps - Phase 33-4.4: CI/smoke test updates (pending) --- docs/private | 2 +- src/mir/join_ir/lowering/mod.rs | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/private b/docs/private index 81ec67f7..ccb716eb 160000 --- a/docs/private +++ b/docs/private @@ -1 +1 @@ -Subproject commit 81ec67f7757a3798bf5262a17a7c4c6a483ac56c +Subproject commit ccb716eb04df47e79015ad98c587a401ace25828 diff --git a/src/mir/join_ir/lowering/mod.rs b/src/mir/join_ir/lowering/mod.rs index 3ce488e6..4e6d4fd5 100644 --- a/src/mir/join_ir/lowering/mod.rs +++ b/src/mir/join_ir/lowering/mod.rs @@ -49,7 +49,10 @@ use crate::mir::{BasicBlockId, MirFunction}; /// Phase 33-3: Try to lower if/else to JoinIR Select instruction /// /// Scope: -/// - Only applies to functions matching "IfSelectTest.*" +/// - Only applies to whitelisted functions: +/// - IfSelectTest.* (Phase 33-2/33-3) +/// - JsonShapeParser._read_value_from_pair/1 (Phase 33-4 Stage-1) +/// - Stage1JsonScannerBox.value_start_after_key_pos/2 (Phase 33-4 Stage-B) /// - Requires NYASH_JOINIR_IF_SELECT=1 environment variable /// - Falls back to traditional if_phi on pattern mismatch /// @@ -64,11 +67,15 @@ pub fn try_lower_if_to_joinir( return None; } - // 関数名で制限(IfSelectTest.* のみ) - if !func.signature.name.starts_with("IfSelectTest.") { + // Phase 33-4: 関数名ガード拡張(IfSelectTest + Stage-1/Stage-B 候補) + let is_allowed = func.signature.name.starts_with("IfSelectTest.") + || func.signature.name == "JsonShapeParser._read_value_from_pair/1" + || func.signature.name == "Stage1JsonScannerBox.value_start_after_key_pos/2"; + + if !is_allowed { if debug { eprintln!( - "[try_lower_if_to_joinir] skipping non-test function: {}", + "[try_lower_if_to_joinir] skipping non-allowed function: {}", func.signature.name ); }