From e3b36aa83acb1c39cd3b96e8cd63fcf86d15b7f2 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Wed, 10 Dec 2025 09:29:32 +0900 Subject: [PATCH] docs(joinir): Phase 222-5 documentation updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 222: If Condition Normalization - Part 5 (Documentation) Updates: 1. joinir-architecture-overview.md: - Section 2.2 ConditionPatternBox: Added Phase 222 normalization features * normalize_comparison() for left-right flip (0 < i → i > 0) * var CmpOp var support (i > j) - Section 4.3 JsonParser constraints: * Marked Phase 221 'if condition pattern' constraint as RESOLVED ✅ * Added Phase 222 resolution summary with test reference 2. CURRENT_TASK.md: - Added Phase 222 completion summary (4 lines) - ConditionPatternBox extension, if-sum integration, test results - Phase 221 constraint resolution Phase 222 Complete Summary: - ✅ Design document (phase222-if-cond-normalization.md) - ✅ Implementation (condition_pattern.rs +160 lines, 9 tests) - ✅ Integration (pattern_pipeline.rs, loop_with_if_phi_if_sum.rs) - ✅ E2E test (phase222_if_cond_left_literal_min.hako → RC=2) - ✅ Documentation (architecture overview + CURRENT_TASK) Status: Phase 222 完了 🎉 --- CURRENT_TASK.md | 5 +++++ .../main/joinir-architecture-overview.md | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 600a3d5a..2e36f63a 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -37,6 +37,11 @@ - **実戦 OK**: 5/9 テスト PASS(NumberAccumulation, if-sum, captured vars) - **制約発見**: 3種の既知制約を整理(LoopBodyLocal in condition, MethodCall whitelist, if condition pattern) - **次の候補**: LoopBodyLocal 条件対応(Pattern 5+ 拡張)、if condition 左辺変数対応 +- **Phase 222 完了** ✅: If Condition 正規化(左リテラル/変数同士対応) + - **ConditionPatternBox 拡張**: normalize_comparison() で `0 < i` → `i > 0` 正規化 + - **if-sum 統合**: extract_loop_condition() を正規化ベースに変更 + - **テスト**: phase222_if_cond_left_literal_min.hako → RC=2 達成 + - **制約解決**: Phase 221 の "if condition pattern" 制約を解消 ### 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 dc672135..8cc41d36 100644 --- a/docs/development/current/main/joinir-architecture-overview.md +++ b/docs/development/current/main/joinir-architecture-overview.md @@ -283,15 +283,18 @@ Local Region (1000+): - 条件式の各変数を LoopParam / OuterLocal / LoopBodyLocal に分類。 - 関数パラメータ誤分類バグは `condition_var_analyzer.rs` の修正で解消済み(OuterLocal として扱う)。 -- **ConditionPatternBox(Phase 219-fix 実装済み)** +- **ConditionPatternBox(Phase 219-fix / Phase 222 拡張完了)** - ファイル: `src/mir/join_ir/lowering/condition_pattern.rs` - 責務: - if 条件の複雑度を判定(SimpleComparison vs Complex)。 - - `is_simple_comparison(cond)` で `var CmpOp literal` パターンのみ true。 + - **Phase 222**: 条件を正規化(var on left の canonical form)。 + - `normalize_comparison()` で左右反転をサポート: + - `0 < i` → `i > 0` (literal < var → var > literal) + - `i > j` (var CmpOp var) - そのまま受理 - 複雑条件(`i % 2 == 1`、MethodCall 等)は false を返し、legacy P3 経路へルーティング。 - 使用箇所: - PatternPipelineContext.is_if_sum_pattern() で条件複雑度をチェック。 - - P3 if-sum mode は単純条件のみ受理、複雑条件は PoC lowerer へフォールバック。 + - P3 if-sum mode は単純比較のみ受理、複雑条件は PoC lowerer へフォールバック。 - **LoopBodyCarrierPromoter(Phase 171-C-2 実装済み)** - ファイル: `src/mir/loop_pattern_detection/loop_body_carrier_promoter.rs` @@ -638,7 +641,13 @@ Phase 210–221 で「数値ループ+if-sum」を実戦投入し、JoinIR イ - **Phase 221 制約発見** (2025-12-09): - ⚠️ **LoopBodyLocal in condition**: break/continue 条件で loop-body-local 変数を使用(Pattern 5+ 必要) - ⚠️ **MethodCall whitelist**: body-local init で `substring` 未対応(Phase 193: indexOf/get/toString のみ) - - ⚠️ **if condition pattern**: if-sum mode は `var CmpOp literal` のみ(`i > 0` は OK、`0 < i` や `i > j` は NG) + - ~~⚠️ **if condition pattern**: if-sum mode は `var CmpOp literal` のみ(`i > 0` は OK、`0 < i` や `i > j` は NG)~~ → **Phase 222 で解決済み✅** + +- **Phase 222 解決済み制約** (2025-12-10): + - ✅ **if condition pattern**: ConditionPatternBox 正規化で左リテラル・変数同士の比較をサポート + - `0 < i`, `len > i` → `i > 0`, `i < len` に正規化 + - `i > j` (var CmpOp var) - 直接サポート + - テスト: phase222_if_cond_left_literal_min.hako → RC=2 達成 - **残りループ** (Phase 222+ で段階的対応予定): - `_parse_array`, `_parse_object` (MethodCall 複数)