refactor(phase124): Remove legacy path from MIR Builder cf_if
- Delete NYASH_HAKO_CHECK_JOINIR conditional branch logic
- Remove try_cf_if_joinir() placeholder function entirely
- Simplify cf_if() to direct lower_if_form() call (JoinIR-only)
- Update documentation to Phase 124 JoinIR-only architecture
- Apply Fail-Fast principle: no fallback logic
Build: ✅ Success (0 errors, 10 warnings)
Phase 124 Task 3/5 complete
This commit is contained in:
@ -11,82 +11,23 @@ impl super::MirBuilder {
|
|||||||
|
|
||||||
/// Control-flow: if
|
/// Control-flow: if
|
||||||
///
|
///
|
||||||
/// # Phase 123: hako_check JoinIR Integration
|
/// # Phase 124: JoinIR-Only (hako_check専用化完了)
|
||||||
///
|
///
|
||||||
/// When NYASH_HAKO_CHECK_JOINIR=1 is set, if statements will be routed through
|
/// If statements are now always routed through the canonical lowering path
|
||||||
/// JoinIR lowering path instead of the legacy PHI generation path.
|
/// (lower_if_form), which internally uses JoinIR-based PHI generation.
|
||||||
///
|
///
|
||||||
/// Default: legacy path (for backward compatibility)
|
/// Phase 123 の環境変数による分岐は削除済み。
|
||||||
/// Phase 124: JoinIR will become the default
|
|
||||||
pub(super) fn cf_if(
|
pub(super) fn cf_if(
|
||||||
&mut self,
|
&mut self,
|
||||||
condition: ASTNode,
|
condition: ASTNode,
|
||||||
then_branch: ASTNode,
|
then_branch: ASTNode,
|
||||||
else_branch: Option<ASTNode>,
|
else_branch: Option<ASTNode>,
|
||||||
) -> Result<ValueId, String> {
|
) -> Result<ValueId, String> {
|
||||||
// Phase 123: Check hako_check JoinIR flag
|
// Phase 124: JoinIR-only path (環境変数分岐削除)
|
||||||
let use_joinir = crate::config::env::hako_check_joinir_enabled();
|
// lower_if_form は JoinIR ベースの PHI 生成を使用
|
||||||
|
|
||||||
if use_joinir {
|
|
||||||
let debug = std::env::var("NYASH_HAKO_CHECK_JOINIR_DEBUG").is_ok();
|
|
||||||
if debug {
|
|
||||||
eprintln!("[cf_if/joinir] Routing if statement through JoinIR lowering");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Phase 123: For now, try JoinIR path and fallback to legacy if needed
|
|
||||||
// Phase 124 will make this strict (no fallback)
|
|
||||||
match self.try_cf_if_joinir(&condition, &then_branch, &else_branch, debug) {
|
|
||||||
Ok(Some(value)) => {
|
|
||||||
if debug {
|
|
||||||
eprintln!("[cf_if/joinir] Successfully lowered through JoinIR");
|
|
||||||
}
|
|
||||||
return Ok(value);
|
|
||||||
}
|
|
||||||
Ok(None) => {
|
|
||||||
if debug {
|
|
||||||
eprintln!("[cf_if/joinir] JoinIR not applicable, falling back to legacy");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
if debug {
|
|
||||||
eprintln!("[cf_if/joinir] JoinIR error: {}, falling back to legacy", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// current impl is a simple forward to canonical lowering
|
|
||||||
self.lower_if_form(condition, then_branch, else_branch)
|
self.lower_if_form(condition, then_branch, else_branch)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 123: Try JoinIR lowering for if statements
|
|
||||||
///
|
|
||||||
/// Returns:
|
|
||||||
/// - Ok(Some(value)): Successfully lowered through JoinIR
|
|
||||||
/// - Ok(None): JoinIR not applicable (pattern not recognized)
|
|
||||||
/// - Err(e): JoinIR error
|
|
||||||
fn try_cf_if_joinir(
|
|
||||||
&mut self,
|
|
||||||
_condition: &ASTNode,
|
|
||||||
_then_branch: &ASTNode,
|
|
||||||
_else_branch: &Option<ASTNode>,
|
|
||||||
_debug: bool,
|
|
||||||
) -> Result<Option<ValueId>, String> {
|
|
||||||
// Phase 123: Placeholder for JoinIR if lowering
|
|
||||||
// The actual JoinIR lowering requires a complete function to work on,
|
|
||||||
// so we need to build the MIR first and then apply lowering.
|
|
||||||
// For Phase 123, we'll return None to fallback to legacy path.
|
|
||||||
// Phase 124 will implement the full JoinIR integration.
|
|
||||||
|
|
||||||
// TODO Phase 124: Implement actual JoinIR if lowering here
|
|
||||||
// This will require:
|
|
||||||
// 1. Build if statement with legacy path
|
|
||||||
// 2. Apply JoinIR IfSelectLowerer to the resulting MIR
|
|
||||||
// 3. Return the lowered result
|
|
||||||
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Control-flow: loop
|
/// Control-flow: loop
|
||||||
///
|
///
|
||||||
/// # Phase 49: JoinIR Frontend Mainline Integration
|
/// # Phase 49: JoinIR Frontend Mainline Integration
|
||||||
|
|||||||
Reference in New Issue
Block a user