diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 27f50913..a8b43d65 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -25,6 +25,14 @@ - RHS structure classification + name heuristic で CounterLike/AccumulationLike 判定 - phase212 で AST lowerer 正常起動確認(`is_simple_if_sum_pattern() = true`) - phase218/217 は Phase 214+ (condition variable support) でブロック中 +- **Phase 220 完了** ✅: P3 if-sum ConditionEnv 統合 + ExprResult routing 統一化 + - **Phase 220-C**: condition variable remap fix(condition_bindings 事前登録) + - **Phase 219-fix**: ConditionPatternBox で複雑条件フィルタリング(`i % 2 == 1` → legacy mode) + - **Phase 220-D**: loop 条件変数サポート(`loop(i < len)` → ConditionEnv 経由で解決) + - **Phase 221**: ExprResult routing 実装(expr_result → carrier PHI dst) + - **Phase 221-R**: ExprResultResolver Box 箱化(Phase 33 パターン準拠、-37 行削減) + - **成果**: phase212_if_sum_min.hako → RC=2 達成、P3/P2 の expr-result 経路完全統一 + - **次フェーズ**: P3/P2 expr-result 経路が揃ったので、JsonParser/selfhost への実戦適用フェーズへ移行 ### 2. JsonParser / Trim / selfhost への適用状況 diff --git a/docs/development/current/main/joinir-architecture-overview.md b/docs/development/current/main/joinir-architecture-overview.md index fc65afd9..46053f73 100644 --- a/docs/development/current/main/joinir-architecture-overview.md +++ b/docs/development/current/main/joinir-architecture-overview.md @@ -70,6 +70,18 @@ JoinIR ラインで守るべきルールを先に書いておくよ: - LoopBuilder は物理削除済み。JoinIR を OFF にする経路やフォールバックは存在しない。 - `NYASH_JOINIR_CORE` は deprecated(0 を指定しても警告して無視)。JoinIR の OFF トグルは提供しない。 +11. **Phase 220: P3 if-sum の ConditionEnv 統合完了** + - **LoopBuilder へのフォールバック経路は Phase 187 で完全削除済み**。 + - **P3 if-sum には ConditionPatternBox + ConditionEnv が必須**: + - 単純条件(`var CmpOp literal`)のみ if-sum mode へルーティング(Phase 219-fix)。 + - 複雑条件(`i % 2 == 1` 等)は legacy P3 経路へフォールバック。 + - **Phase 220-D で loop 条件の変数サポート完了**: + - `loop(i < len)` のような変数条件を ConditionEnv で解決。 + - `extract_loop_condition()` を ValueOrLiteral 対応に拡張。 + - **Phase 220 で if-sum の expr-result exit contract が P2 と揃った**: + - ExprResultResolver Box で expr_result routing を統一化(Phase 221-R)。 + - phase212_if_sum_min.hako → RC=2 達成。 + --- ## 1.9 ValueId Space Management (Phase 201) @@ -271,6 +283,16 @@ Local Region (1000+): - 条件式の各変数を LoopParam / OuterLocal / LoopBodyLocal に分類。 - 関数パラメータ誤分類バグは `condition_var_analyzer.rs` の修正で解消済み(OuterLocal として扱う)。 +- **ConditionPatternBox(Phase 219-fix 実装済み)** + - ファイル: `src/mir/join_ir/lowering/condition_pattern.rs` + - 責務: + - if 条件の複雑度を判定(SimpleComparison vs Complex)。 + - `is_simple_comparison(cond)` で `var CmpOp literal` パターンのみ true。 + - 複雑条件(`i % 2 == 1`、MethodCall 等)は false を返し、legacy P3 経路へルーティング。 + - 使用箇所: + - PatternPipelineContext.is_if_sum_pattern() で条件複雑度をチェック。 + - P3 if-sum mode は単純条件のみ受理、複雑条件は PoC lowerer へフォールバック。 + - **LoopBodyCarrierPromoter(Phase 171-C-2 実装済み)** - ファイル: `src/mir/loop_pattern_detection/loop_body_carrier_promoter.rs` - 責務: @@ -409,6 +431,17 @@ Local Region (1000+): - 変数再接続はヘッダ PHI の dst を使って `builder.variable_map` を更新(Reconnector)。 - expr 用の PHI には一切触れない(carrier 専用ライン)。 +- **ExprResultResolver(Phase 221-R 実装済み)** + - ファイル: `src/mir/builder/control_flow/joinir/merge/expr_result_resolver.rs` + - 責務: + - expr_result ValueId を exit_bindings/carrier_phis と照合し、適切な出口値を解決。 + - expr_result が carrier の場合: carrier PHI dst を返す(変数再接続と統一)。 + - expr_result が非 carrier の場合: remapped ValueId を返す(expr-only の値)。 + - 特徴: + - Phase 33 モジュール化パターン準拠(ExitMetaCollector/ExitLineReconnector と同様)。 + - 4つのシナリオを unit test でカバー(carrier/non-carrier/None/error)。 + - merge/mod.rs から 64 行を抽出、-37 行のネット削減。 + - **JoinInlineBoundaryBuilder(Phase 200-2 / Phase 201 完了)** - ファイル: `src/mir/join_ir/lowering/inline_boundary_builder.rs` - 責務: