feat(mir): Phase 25.1f完了 - Conservative PHI + ControlForm観測レイヤー
🎉 Conservative PHI Box理論による完全SSA構築 **Phase 7-B: Conservative PHI実装** - 片方branchのみ定義変数に対応(emit_void使用) - 全変数にPHI生成(Conservative Box理論) - Stage-1 resolver全テスト緑化(3/3 PASS) **Phase 25.1f: ControlForm観測レイヤー** - LoopShape/IfShape/ControlForm構造定義 - Loop/If統一インターフェース実装 - debug_dump/debug_validate機能追加 - NYASH_CONTROL_FORM_TRACE環境変数対応 **主な変更**: - src/mir/builder/phi.rs: Conservative PHI実装 - src/mir/control_form.rs: ControlForm構造(NEW) - src/mir/loop_builder.rs: LoopForm v2デフォルト化 **テスト結果**: ✅ mir_stage1_using_resolver_min_fragment_verifies ✅ mir_stage1_using_resolver_full_collect_entries_verifies ✅ mir_parserbox_parse_program2_harness_parses_minimal_source 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: ChatGPT <chatgpt@openai.com>
This commit is contained in:
@ -19,6 +19,7 @@ fn rewrite_enabled() -> bool {
|
||||
|
||||
/// Try Known‑route instance→function rewrite.
|
||||
/// 既存の安全ガード(user_defined/存在確認/ENV)を尊重して関数化する。
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn try_known_rewrite(
|
||||
builder: &mut MirBuilder,
|
||||
object_value: ValueId,
|
||||
@ -119,6 +120,7 @@ pub(crate) fn try_known_rewrite_to_dst(
|
||||
|
||||
/// Fallback: when exactly one user-defined method matches by name/arity across the module,
|
||||
/// resolve to that even if class inference failed. Deterministic via uniqueness and user-box prefix.
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn try_unique_suffix_rewrite(
|
||||
builder: &mut MirBuilder,
|
||||
object_value: ValueId,
|
||||
@ -183,7 +185,7 @@ pub(crate) fn try_unique_suffix_rewrite_to_dst(
|
||||
if cands.len() != 1 { return None; }
|
||||
let fname = cands.remove(0);
|
||||
if let Some((bx, _)) = fname.split_once('.') { if !builder.user_defined_boxes.contains(bx) { return None; } } else { return None; }
|
||||
let name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &fname) {
|
||||
let _name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &fname) {
|
||||
Ok(v) => v,
|
||||
Err(e) => return Some(Err(e)),
|
||||
};
|
||||
@ -212,6 +214,7 @@ pub(crate) fn try_unique_suffix_rewrite_to_dst(
|
||||
}
|
||||
|
||||
/// Unified entry: try Known rewrite first, then unique-suffix fallback.
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn try_known_or_unique(
|
||||
builder: &mut MirBuilder,
|
||||
object_value: ValueId,
|
||||
|
||||
@ -2,6 +2,7 @@ use super::super::MirBuilder;
|
||||
|
||||
/// Early special-case: toString/stringify → str(互換)を処理。
|
||||
/// 戻り値: Some(result_id) なら処理済み。None なら通常経路へ委譲。
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn try_early_str_like(
|
||||
builder: &mut MirBuilder,
|
||||
object_value: super::super::ValueId,
|
||||
@ -104,6 +105,7 @@ pub(crate) fn try_early_str_like(
|
||||
|
||||
/// Special-case for equals/1: prefer Known rewrite; otherwise allow unique-suffix fallback
|
||||
/// when it is deterministic (single candidate). This centralizes equals handling.
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn try_special_equals(
|
||||
builder: &mut MirBuilder,
|
||||
object_value: super::super::ValueId,
|
||||
@ -151,7 +153,7 @@ pub(crate) fn try_early_str_like_to_dst(
|
||||
"certainty": "Known",
|
||||
});
|
||||
super::super::observe::resolve::emit_choose(builder, meta);
|
||||
let name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &chosen) {
|
||||
let _name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &chosen) {
|
||||
Ok(v) => v,
|
||||
Err(e) => return Some(Err(e)),
|
||||
};
|
||||
@ -182,7 +184,7 @@ pub(crate) fn try_early_str_like_to_dst(
|
||||
"certainty": "Heuristic",
|
||||
});
|
||||
super::super::observe::resolve::emit_choose(builder, meta);
|
||||
let name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &fname) {
|
||||
let _name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &fname) {
|
||||
Ok(v) => v,
|
||||
Err(e) => return Some(Err(e)),
|
||||
};
|
||||
@ -209,7 +211,7 @@ pub(crate) fn try_early_str_like_to_dst(
|
||||
"certainty": "Heuristic",
|
||||
});
|
||||
super::super::observe::resolve::emit_choose(builder, meta);
|
||||
let name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &fname) {
|
||||
let _name_const = match crate::mir::builder::name_const::make_name_const_result(builder, &fname) {
|
||||
Ok(v) => v,
|
||||
Err(e) => return Some(Err(e)),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user