Files
hakorune/CURRENT_TASK.md
nyash-codex 4f94309548 feat(joinir): Phase 192-impl ComplexAddendNormalizer implementation
- New module: complex_addend_normalizer.rs (320 lines, 5 unit tests)
- Transforms `result = result * 10 + f(x)` into temp variable pattern
- Pattern2 preprocessing integration (~40 lines added)
- Zero changes to emission layers (reuses Phase 191 + Phase 190)

Tests:
- Unit tests: 5/5 passing (normalization logic)
- Regression: phase190/191 tests all pass
- Demo: phase192_normalization_demo.hako → 123

Limitation: Full E2E requires Phase 193 (MethodCall in init)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 04:20:28 +09:00

366 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Current Task
このファイルは「いま何に集中しているか」と「次にやる候補」だけを書く軽量ビューに戻すよ。
過去フェーズの詳細ログは `docs/development/current/main/10-Now.md` と各 `phase-XX*.md` に残してあるので、履歴はそちらを見てね。
---
## 🎯 今フォーカスしているテーマ
### 1. JoinIR ループ基盤 → JsonParser / Trim への適用
- 現状
- LoopBuilder は完全削除済み。ループは JoinIR Pattern14while / break / ifPHI / continueで統一。
- LoopExit / ExitLine / Boundary / Header PHI のラインは代表ケースPattern14で安定。
- LoopConditionScopeBoxPhase 170Dはバグ修正済みで、
- ループ条件に出てくる変数を `LoopParam / OuterLocal / LoopBodyLocal` に分類
- 関数パラメータや外側ローカル(例: `s`, `pos`, `len`)は正しく OuterLocal と判定できるようになった。
- 直近の目的
- JsonParserBox / Trim 系ループを、Pattern14 + LoopConditionScopeBox の上にどこまで安全に載せられるかを再観測する。
- LoopBodyLocal を条件に含むパターンTrim の `ch` などを、Pattern5 でどう扱うか設計する。
- 次にやる候補
- [x] Phase 171A: LoopConditionScope 修正版で JsonParser / Trim ループの再インベントリ ✅
→ どのループが Pattern14 内に入り、どれが LoopBodyLocal 条件で弾かれているかを整理。
- [x] Phase 171B: Pattern5A のターゲット決定 ✅
→ Trim の leading whitespace ループを代表として選定。
- [x] Phase 171C-1: LoopBodyCarrierPromoter スケルトン実装 ✅
→ API 定義PromotionRequest → PromotionResult、基本検出ロジック。
- [x] Phase 171C-2: Trim パターン昇格ロジック実装 ✅
`find_definition_in_body()`, `is_substring_method_call()`, `extract_equality_literals()` 実装。
`TrimPatternInfo` で検出結果を返す。10 unit tests。
- [x] Phase 171C-3: Pattern 2/4 ルーティングとの統合 ✅
→ routing.rs で LoopBodyCarrierPromoter を呼び出し、昇格可能なら Pattern2 へルート。
- [x] Phase 171C-4: CarrierInfo への統合 ✅ (2025-12-07)
`CarrierInfo::merge_from()` で昇格後のキャリアをマージ。
`TrimPatternInfo::to_carrier_info()` で変換ヘルパ実装。
→ Pattern2/4 lowerer で `Promoted` ブランチをマージに更新。7 unit tests。
- [x] Phase 171C-5: TrimLoopHelper 設計 ✅ (2025-12-07)
`TrimLoopHelper` struct で Trim 専用ロジックを一箇所に集約。
`CarrierInfo::trim_helper()` アクセサ追加。4 unit tests。
- [x] Phase 171impl-Trim: Trim 用 JoinIR 生成 ✅ (2025-12-08)
`CarrierInfo::trim_helper()` を使って bool carrier の初期化・更新・exit PHI を生成。
- [x] Phase 172-Trim-impl: Trim 用 MIR 生成 ✅ (2025-12-08)
→ Pattern2 で Trim パターンの JoinIR→MIR lowering 実装完了。
→ emit_whitespace_check(), extract_substring_args() ヘルパ追加。
- [x] Phase 173: JsonParser P5 展開 ✅ (2025-12-08)
→ Task 173-1: JsonParser 代表ループの再チェック_skip_whitespace 選定)。
→ Task 173-2: 「Trim と同型」なループを 1 本選定_skip_whitespace 確定)。
→ Task 173-3: Trim 用 P5 パイプラインを JsonParser 用にも開放する設計(設計ドキュメント作成)。
→ Task 173-4: 1 本だけ実際に JoinIR で通す_skip_whitespace Pattern detection 成功)。
→ Task 173-5: ドキュメント更新phase173-jsonparser-p5-impl.md + CURRENT_TASK
**成果**: Trim パイプラインが JsonParser でも機能することを実証、P5 の汎用性が完全証明された。
- [x] Phase 200: JoinIR パイプライン Cleanup (Part 1) ✅ (2025-12-08)
→ Task 200-1: Pattern × Box マトリクス表をドキュメント化loop_pattern_space.md に追加)。
→ Task 200-2: JoinInlineBoundaryBuilder 導入Pattern2 で試験導入、Builder パターンで構築統一化)。
→ Task 200-3: JoinIRVerifier 追加LoopHeader PHI / ExitLine 契約のデバッグ検証)。
→ Task 200-4: CURRENT_TASK/overview 微修正Phase 200 内容を反映)。
- [x] Phase 201: JoinInlineBoundaryBuilder Pattern3/4 展開 ✅ (2025-12-08)
→ Task 201-1: Pattern2 の Builder 使用パターンを正として固める(設計ドキュメント作成)。
→ Task 201-2: Pattern3 を Builder に載せ替え(フィールド直書き排除)。
→ Task 201-3: Pattern4 を Builder に載せ替えcontinue/Trim 特例対応)。
→ Task 201-4: 共通ルールチェック & unit test 拡張2つの新テスト追加
→ Task 201-5: ドキュメント更新overview + CURRENT_TASK
**成果**: 全パターンP1/P2/P3/P4で Builder 統一完了、フィールド直書き完全排除、挙動不変(テスト全 PASS
- [x] Phase 174: JsonParser 複雑ループ P5 拡張設計1本め ✅ (2025-12-08)
→ Task 174-1: 残り JsonParser ループの再チェック_parse_string/_parse_array/_parse_object 分析)。
→ Task 174-2: 「次に攻める1本」を決定_parse_string 選定、Trim に最も近い構造)。
→ Task 174-3: 箱の再利用 vs 追加を決定TrimLoopHelper 再利用可能、最小化版で検証)。
→ Task 174-4: 小さな PoC を 1 本動かす_parse_string 最小化版で P5 パイプライン成功)。
→ Task 174-5: ドキュメント更新phase174-jsonparser-p5b-design.md + CURRENT_TASK
**成果**: Trim P5 パイプラインが `_parse_string` 最小化版でも機能することを実証。
文字比較対象が `"\""`(終端クォート)でも Trim と同じ昇格パターンで動作確認。
- [x] Phase 175: P5 複数キャリア対応_parse_string 向け) ✅ (2025-12-08)
→ Task 175-1: _parse_string のキャリア候補を洗い出すpos, result, is_ch_match の 3 キャリア特定)。
→ Task 175-2: CarrierInfo / ExitMeta に複数キャリアを載せる設計を固める(既存箱がすべて複数対応済みと確認)。
→ Task 175-3: 小さい PoC で 2 キャリアだけ通してみるMIR 検証で Pattern2 の制約を特定)。
→ Task 175-4: CURRENT_TASK / joinir-architecture-overview 更新。
**成果**: P5 アーキテクチャが複数キャリアに対応済みであることを確認。
CarrierInfo は 3 キャリア検出済みpos, result, is_ch_match
Pattern2 実装が Trim 最適化により `pos` のみ emit する制約を発見Phase 176 改善対象)。
- [x] Phase 176: Pattern2 multi-carrier lowering ✅ (2025-12-08)
→ Task 176-1: 制限ポイント特定10箇所の TODO マーク)
→ Task 176-2: CarrierUpdateLowerer ヘルパ実装6 unit tests
→ Task 176-3: ヘッダ PHI / ループ更新 / ExitLine を全キャリア対応に拡張
→ Task 176-4: E2E テスト成功2キャリア: pos + result
→ Task 176-5: ドキュメント更新
**成果**: Pattern2 が複数キャリアに完全対応。CarrierInfo に載っている全キャリアの UpdateExpr を MIR に emit。
**バグ修正**: Trim pattern の loop_var_name 上書き問題、InstructionRewriter の latch_incoming 設定問題。
- 今後 1〜2 フェーズの TODOJoinIR 周りのサマリ)
- [x] **Phase 177: Multi-carrier PHI 接続修正** ✅ (2025-12-08)
- Task 177-STRUCT-1: CarrierVar に join_id 追加
- Task 177-STRUCT-2: carrier_order で順序保持LoopHeaderPhiInfo
- **成果**: Int テスト成功sum=3、index mismatch 問題解決
- [x] **Phase 178: LoopUpdateAnalyzer string 検出** ✅ (2025-12-08)
- Task 178-1: UpdateRhs 拡張StringLiteral, Other 追加)
- Task 178-2: analyze_rhs 分岐拡張string/method call 検出)
- Task 178-3: Pattern2/4 can_lower で string 拒否Fail-Fast
- Task 178-4: Legacy fallback コメント修正LoopBuilder 削除済み反映)
- **成果**: String loop は明示的エラー、numeric loop は正常動作維持
- **注意**: グローバルテスト 79 件失敗は Phase 178 以前からの既知問題(別途対応)
- [x] **Phase 180: Trim/P5 サブモジュール化** ✅ (2025-12-08)
- Task 180-1: 設計ドキュメント作成phase180-trim-module-design.md
- Task 180-2: TrimLoopLowerer スケルトン実装try_lower_trim_like_loop 骨格)
- Task 180-3: Pattern2 リファクタリング(~160 行の Trim ロジックを TrimLoopLowerer に委譲)
- Task 180-4: Pattern4 分析Trim 検出のみで lowering なし、スキップ)
- Task 180-5: ドキュメント更新joinir-architecture-overview.md + CURRENT_TASK.md
- **成果**: Pattern2 から Trim 専用ロジックを完全分離、-135 行の削減
- **TrimLoopLowerer**: LoopConditionScopeBox + LoopBodyCarrierPromoter 統合
- **再利用性向上**: Pattern2/4/未来パターンすべてで同じ Trim lowering を利用可能
- **テスト**: cargo build --release SUCCESS (0 errors, warnings のみ)
- [x] **Phase 181: JsonParser ループ空間の再インベントリ** ✅ (2025-12-08)
- Task 181-1: JsonParserBox 内の全 11 ループを LoopPatternSpace の軸A〜Fで分類
- Task 181-2: 各ループの Pattern14 + P5 へのマッピング_parse_number/_atoi/_match_literal 等は P2/P1 で対応可能)
- Task 181-3: `_skip_whitespace` / `_trim*` / `_parse_string` 最小版 など、既に JoinIR/P5 経路で動作しているケースを確認
- Task 181-4: 残りループの優先度と難易度を整理_parse_array/_parse_object/_unescape_string は後続 Phase で対応)
- **成果**: JsonParser の全ループが「形としては P1P4(+P5) で表現可能」であることを確認。
ループ形の追加は不要で、複雑さは BoolExprLowerer / ContinueBranchNormalizer / TrimLoopLowerer 側で吸収する方針を確定。
- [x] **Phase 179-B: Generic Pattern Framework** ✅ (2025-12-08)
- Task 179-B-1: 設計ドキュメント作成phase179-generic-pattern-framework.md
- Task 179-B-2: PatternPipelineContext 実装pattern_pipeline.rs
- Task 179-B-3: Pattern 1 統一168→149行, 11%削減)
- Task 179-B-4: Pattern 3 統一168→149行, 11%削減)
- Task 179-B-5: Pattern 2 統一517→509行, 1.5%削減)
- Task 179-B-6: Pattern 4 統一422→414行, 1.9%削減)
- Task 179-B-7: テスト・ドキュメント更新(全代表ケース PASS
- **成果**: 全パターンP1/P2/P3/P4で PatternPipelineContext 統一、
前処理ロジック一本化、挙動不変(テスト全 PASS
- **設計原則**: Pure analysis container解析のみ、emission なし)、
Analyzer-only dependencies、Pattern-specific variantsOption<T>)。
- **注意**: Pattern 2/4 の複雑ロジックTrim, carrier 解析)は inline 維持。
将来 Phase 180+ で Trim module 化予定。
- [x] **Phase 181: JsonParser 残りループ設計調査** ✅ (2025-12-08)
- Task 181-1: 全11ループの再チェックPattern × Box マトリクス作成)
- Task 181-2: ブロック分析LoopConditionScopeBox 制約との照合)
- Task 181-3: ロードマップ作成phase181-jsonparser-loop-roadmap.md
- **成果**: 全ループが「LoopParam/OuterLocal のみ」という制約を満たし、理論的に全対応可能
- **発見**: ブロックされるループは存在しないTrim は昇格パターンで対応済み)
- **優先度**: P2 Break3個: _parse_number/_atoi/_atof_loop> P1 Simple1個: _match_literal> P4 Continue3個: _parse_array/_parse_object/_unescape_string
- [x] **Phase 182: JsonParser P1/P2 パターン検証** ✅ (2025-12-08)
- Task 182-1: 設計ドキュメント作成phase182-simple-loops-design.md
- Task 182-2: Routing whitelist 更新_parse_number/2, _atoi/1, _match_literal/3 追加)
- Task 182-3: Pattern routing 確認NYASH_JOINIR_STRUCTURE_ONLY=1 tracing
- Task 182-5: 代表テスト作成・実行
- ✅ Pattern1: phase182_p1_match_literal.hako PASS
- ✅ Pattern2: phase182_p2_break_integer.hako PASS
- Task 182-6: ドキュメント更新joinir-architecture-overview.md, CURRENT_TASK.md
- **成果**: P1/P2 パターンの基本動作確認完了整数演算・early return で動作実証)
- **ブロッカー発見**:
1. LoopBodyLocal 変数処理(`ch`, `digit_pos`, `pos`
- 現状: Trim 専用の carrier 昇格を試みてエラー
- 必要: P1/P2 で純粋なローカル変数(昇格不要)として扱う仕組み
2. 文字列連結フィルタPhase 178
- 現状: `num_str = num_str + ch` を保守的に reject
- 必要: JsonParser 向けに段階的有効化
- **次ステップ**: Phase 183 で LoopBodyLocal 処理と string ops 対応
- [x] **Phase 183: LoopBodyLocal 役割分離** ✅ (2025-12-08)
- Task 183-1: 設計メモ作成phase183-loopbodylocal-role-separation.md
- LoopBodyLocal を 2 カテゴリに分類設計Condition vs Body-only
- Trim promotion は条件に出てくる変数のみ対象
- body-only local は昇格スキップ
- Task 183-2: LoopBodyLocal 役割分離実装
- TrimLoopLowerer に `is_var_used_in_condition()` ヘルパー追加
- 条件で使われていない LoopBodyLocal を Trim 昇格対象から除外
- 5 unit testsvariable detection, binary op, method call, nested
- Task 183-3: 代表ループテスト作成
- `phase183_body_only_loopbodylocal.hako`: body-only LoopBodyLocal デモ
- トレース確認: `[TrimLoopLowerer] No LoopBodyLocal detected, skipping Trim lowering`
- Task 183-4: ドキュメント更新joinir-architecture-overview.md, CURRENT_TASK.md
- **成果**: LoopBodyLocal 役割分離完了、body-only 変数は Trim promotion されない
- **残課題**: body-local 変数の MIR lowering 対応Phase 184+ で対応予定)
- **発見**: Pattern1 実行問題別途対応必要、Phase 183 スコープ外)
- [x] **Phase 184: Body-local MIR Lowering Infrastructure** ✅ (2025-12-08)
- Task 184-1: 設計ドキュメント作成 ✅
- phase184-body-local-mir-lowering.mdTwo-Environment System 設計)
- 箱理論: LoopBodyLocalEnvStorage Box+ UpdateEnvComposition Box
- Task 184-2: LoopBodyLocalEnv 実装 ✅
- loop_body_local_env.rs216行新規作成
- BTreeMap 決定性保証、7 unit tests 全 PASS
- Task 184-3: UpdateEnv 実装 ✅
- update_env.rs237行新規作成
- Priority order: ConditionEnv → LoopBodyLocalEnv、8 unit tests 全 PASS
- Task 184-4: CarrierUpdateEmitter 統合 ✅
- emit_carrier_update_with_env() 新規追加UpdateEnv 版)
- emit_carrier_update() 後方互換維持、4 新規 unit tests 全 PASS全 10 tests PASS
- Task 184-5: 代表テストケース作成 ✅
- phase184_body_local_update.hakoPattern1 検証)
- phase184_body_local_with_break.hakoPattern2 統合未実施、Phase 185 予定)
- Task 184-6: ドキュメント更新 ✅
- joinir-architecture-overview.mdPhase 184 セクション追加)
- CURRENT_TASK.md本項目追加
- **成果**: Body-local 変数の MIR lowering インフラ完成
- 3つの小箱LoopBodyLocalEnv/UpdateEnv/CarrierUpdateEmitterが単一責任で独立
- 全 25 unit tests PASS決定性・優先順位・後方互換性検証済み
- **制約**: Pattern2/4 への統合は Phase 185 で実施予定body-local 収集機能必要)
- [x] **Phase 187: String UpdateLowering 設計doc-only** ✅ (2025-12-09)
- UpdateKind ベースのホワイトリスト設計(コード変更なし)
- StringAppendChar/StringAppendLiteral を安全パターンとして定義
- Complex (method call / nested BinOp) は Fail-Fast 維持
- Phase 178 の Fail-Fast は完全保持
- Phase 188+ での実装方針を確立
- [x] **Phase 188: StringAppend 実装** ✅ (2025-12-09)
- Task 188-1: LoopUpdateAnalyzer 拡張(既存の UpdateRhs で対応済み)
- Task 188-2: Pattern2/4 can_lower ホワイトリスト更新UpdateRhs::Other のみ拒否)
- Task 188-3: CarrierUpdateEmitter JoinIR emission 拡張StringLiteral → Const emission
- Task 188-4: E2E テストphase188_string_append_char.hako / phase188_string_append_literal.hako
- Task 188-5: ドキュメント更新phase187-string-update-design.md + joinir-architecture-overview.md
- **成果**: Pattern2/4 が安全な string 更新パターンを受理。Complex パターンのみ Fail-Fast。
- 許可: `s = s + ch`, `s = s + "literal"`
- 拒否: `s = s + s.substring(...)` (method call), `s = s + (a + b)` (nested BinOp)
- [x] **Phase 189: JsonParser ミニ適用検証** ✅ (2025-12-09)
- Task 189-1: phase183 テスト_parse_number/_atoi/_match_literalの再検証
- Task 189-2: キャリア検出問題の根本原因分析
- Task 189-3: 検証レポート作成phase189-jsonparser-mini-verification.md
- Task 189-4: CURRENT_TASK / roadmap ドキュメント更新
- **成果**: Phase 188 StringAppend 実装は完了しているが、**キャリア検出の根本的制約**を発見
- **ブロッカー**: Pattern1/2 はループ条件の変数のみ追跡(アキュムレータ変数を自動検出しない)
- **検証結果**:
- phase183_p2_parse_number: ❌ LoopBodyLocal blocker設計通り、Pattern5 必要)
- phase183_p2_atoi: ❌ `result` 変数が追跡されず(キャリア検出問題)
- phase182_p1_match_literal: ✅ 動作(アキュムレータ不要)
- **Phase 188 コード自体は正常**: StringAppend ホワイトリスト・emission ロジック正しい
- **E2E テストは Phase 190+ まで保留**: キャリア検出強化が先決
- **次ステップ**: Phase 190 でキャリア検出強化3つのオプション設計済み
- [x] **Phase 190: NumberAccumulation Update 設計doc-only** ✅ (2025-12-09)
- Task 190-1: _parse_number/_atoi パターン調査 ✅
- Task 190-2: UpdateKind::NumberAccumulation 設計 ✅
- Task 190-3: LoopUpdateAnalyzer アルゴリズム設計 ✅
- Task 190-4: Pattern2/4 can_lower 仕様策定 ✅
- Task 190-5: CarrierUpdateLowerer 責務設計 ✅
- Task 190-6: ドキュメント更新phase190-number-update-design.md + overview
- **成果**: `v = v * 10 + digit` パターンの完全設計
- UpdateKind::NumberAccumulation { base: i64 } 定義
- Whitelist 制御: Integer のみ許可、Complex は Fail-Fast
- 2-instruction emission: `tmp = v * base; result = tmp + addend`
- AST 構造解析名前依存禁止、LHS 出現回数チェック
- Implementation phases 定義Phase 190-impl-A/B/C/D
- **次ステップ**: Phase 190-impl で実装(コード変更は別フェーズ)
- [x] **Phase 190-impl: NumberAccumulation 実装** ✅ (2025-12-09)
- Phase 190-impl-A: Core Detection (LoopUpdateAnalyzer 拡張) ✅
- Phase 190-impl-B: CarrierUpdateLowerer Extension (JoinIR emission) ✅
- Phase 190-impl-C: Pattern2/4 Integration (can_lower 更新) ✅
- Phase 190-impl-D: E2E Validation + PHI 配線デバッグ ✅
- **バグ発見**: body-local と carrier の ValueId 衝突問題
- **修正**: `body_local_start_offset = env.len() + carrier_info.carriers.len()`
- **E2E 結果**: `phase190_atoi_impl.hako` → 12 ✅、`phase190_parse_number_impl.hako` → 123 ✅
- ExitLine contract Verifier 追加(`#[cfg(debug_assertions)]`
- **残課題**: body-local 変数 assignment は JoinIR 未対応Phase 191 で対応)
- [x] **Phase 191: Body-Local Init & Update Lowering Integration** ✅ (2025-12-09)
- **目的**: LoopBodyLocalEnv / UpdateEnv / LoopBodyLocalInitLowerer を Pattern2 に本番統合完了
- 191-1: 対象ケース選定 → `phase191_body_local_atoi.hako` 作成 ✅
- 191-2: LoopBodyLocalInitLowerer の Pattern2 統合init emission 位置は body 先頭)✅
- 191-3: UpdateEnv 統合確認ConditionEnv + LoopBodyLocalEnv 両方から解決)✅
- 191-4: E2E テスト → 期待値 123 出力確認 ✅
- 191-5: ドキュメント更新 ✅
- **成果**:
- 対応済み init 式: 整数リテラル、変数参照、二項演算(`local digit = i + 1`
- UpdateEnv 優先順位: ConditionEnv→ LoopBodyLocalEnvフォールバック
- ValueId 二重割当問題を修正(空の LoopBodyLocalEnv を InitLowerer に委譲)
- **テスト**: phase191_body_local_atoi.hako → 123 ✅、退行なし
- [x] **Phase 192-impl: ComplexAddendNormalizer 実装** ✅ (2025-12-09)
- **目的**: `v = v * 10 + digits.indexOf(ch)` のような Complex addend パターンを、
`temp = digits.indexOf(ch); v = v * 10 + temp` に正規化して NumberAccumulation に載せる
- 192-impl-1: ComplexAddendNormalizer 実装 ✅
- `normalize_assign()` API 設計NormalizationResult enum
- 検出ロジック: `lhs = lhs * base + MethodCall(...)`
- 正規化ロジック: temp 変数生成 + 2-statement AST 出力
- 5 unit tests 全 PASSmethod call, simple variable, wrong LHS, no multiplication, subtraction
- 192-impl-2: Pattern2 前処理統合 ✅
- carrier update analysis 前に normalization ステップ挿入line 243-279
- `analysis_body` を LoopUpdateAnalyzer に委譲
- trace 出力: `[pattern2/phase192] Normalized complex addend: temp='temp_result_addend'`
- 192-impl-3: E2E 検証 ✅
- phase192_normalization_demo.hako → 123 ✅AST レベル正規化確認)
- 退行なし: phase190_atoi_impl.hako → 12 ✅、phase190_parse_number_impl.hako → 123 ✅、phase191_body_local_atoi.hako → 123 ✅
- 192-impl-4: ドキュメント更新 ✅
- phase192-complex-addend-design.md Section 9 追加(実装完了報告)
- CURRENT_TASK.md本項目追加
- **成果**: AST レベル正規化インフラ完成、箱化原則単一責任・再利用性・Fail-Fast遵守
- **制約Phase 193+ 拡張)**: LoopBodyLocalInitLowerer は int/arithmetic のみ対応
- MethodCall in temp init は Phase 186 limitation でエラー
- 拡張対象: `lower_init_expr()` に MethodCall/Call サポート追加
- **設計原則検証**:
- ✅ 箱化: ComplexAddendNormalizer は純粋 AST transformeremission なし)
- ✅ Fail-Fast: Unsupported patterns → NormalizationResult::Unchanged
- ✅ 再利用性: Phase 191 (body-local init) + Phase 190 (NumberAccumulation) 活用
- ✅ 変更最小化: Emission ラインCarrierUpdateEmitter, LoopBodyLocalInitLowererは変更なし
- [ ] Phase 193: LoopBodyLocalInit MethodCall Extension
- **目的**: Phase 186 limitation 解除、MethodCall/Call を init 式でサポート
- 193-1: `lower_init_expr()` 拡張MethodCall/Call 分岐追加)
- 193-2: JoinIR emission ロジック(既存 method lowering 再利用)
- 193-3: UpdateEnv integrationtemp の ValueId 解決)
- 193-4: E2E テスト(`result = result * 10 + digits.indexOf(ch)` が完全動作)
- **期待成果**: Phase 192 normalization と組み合わせて JsonParser 完全対応
- [ ] Phase 194: JsonParser 残りループ展開
- _parse_array, _parse_object P4 Continue, MethodCall 複数対応)
- _parse_string 完全版 P2/P4, string concat + escape
- _unescape_string P4 Continue, 複雑キャリア + flatten
---
### 2. SelfHost depth2 / MIR JSON v0 / JoinIR Analyzer ライン
- 現状
- `.hako` から Program JSON v0 / MIR JSON を読み込む準備は整備済みPhase 160 系)。
- JsonParserBox / JsonParserBox.ProgramJSONBox / JsonParserBox.JsonParserBox 自体は箱として実装されている。
- MIR/JoinIR Analyzer Box 群MirAnalyzerBox, JoinIrAnalyzerBoxは基盤実装済み。
- 直近の目的
- JoinIR ループ基盤が安定した前提で、「selfhost depth2 の最小ループ」がどこまで回るかを再確認する。
- JsonParserBox 側のループ制約Pattern14 + 将来 Pattern5と、Analyzer Box の入力形式を揃える。
- 次にやる候補
- [ ] Phase 161続き: MirAnalyzerBox / JoinIrAnalyzerBox に対する代表ケースの再実行
loop パターンが JoinIR 統一後も正しく認識できているか確認)。
- [ ] Phase 166続き: Program JSON v0 / MIR JSON v1 を `.hako` 側で安全にパースできるか確認
JsonParserBox のループ制約と衝突しないかをチェック)。
---
### 3. hako_check / MIR CFG / JoinIR 解析ライン
- 現状
- HC019 / HC020DeadCode / DeadBlocksなど、hako_check 側の Box は JoinIR/MIR CFG を読む経路に統一済み。
- JsonParserBox による JSON パーサー共通ライブラリ化も進行中Phase 170172
- 直近の目的
- JoinIR / MIR ラインの変更Pattern14, ExitLine, Boundary, ConditionScopeが hako_check に与える影響を最小に保ちつつ、
解析結果の精度を維持する。
- 次にやる候補
- [ ] Phase 155+ の MIR JSON v1 統合ラインを、最新の JoinIR/Loop 仕様に追随させるかどうかの判断。
(今のところブロッカーではないので優先度は中〜低)
---
## ✅ 最近完了した主なフェーズ(抜粋)
ここは「今の作業に強く関係する直近フェーズ」だけをざっくり残すよ。詳細は各 phase ドキュメントを参照。
- **Phase 3316/20/21**: Loop header PHI / ExitLine / Boundary の SSOT 化
→ ループ変数の現在値と exit 値が header PHI / ExitLine 経由で一貫して伝播するようになった。
- **Phase 3318/19/20**: Pattern4continue・elsecontinue 正規化・carrier フィルタリング
→ continue 含みのループPattern4が JoinIR 統一ラインの中で動作。
`ContinueBranchNormalizer` / `LoopUpdateAnalyzer` / `CarrierInfo` ラインが安定。
- **Phase 165**: JoinIR ループ Pattern14 代表ケースの完全検証
→ loop_min_while / joinir_min_loop / loop_if_phi / loop_continue_pattern4 で
`[joinir/freeze]` と SSAundef を全排除。
- **Phase 170D (BugFix)**: LoopConditionScopeBox 実装&パラメータ誤分類バグ修正
→ ループ条件の変数スコープ分類LoopParam / OuterLocal / LoopBodyLocalが安定。
JsonParserBox の `s`, `pos`, `len` など関数パラメータが正しく OuterLocal と見なされるようになった。
- **Phase 168169**: BoolExprLowerer / condition_to_joinir 強化
`_trim` / `_skip_whitespace` の OR chain / AND / NOT を JoinIR/MIR に正しく落とせるようになった。
(ただし LoopBodyLocal 条件をどう扱うかは Pattern5 設計の領域として切り出し済み)
---
## 📌 このファイルの運用方針
- CURRENT_TASK.md には「直近 1〜2 週間で触っているライン」と「次にやる候補」だけを書く。
- フェーズごとの詳細ログ・長文の議事録・実装メモは:
- `docs/development/current/main/10-Now.md`
- `docs/development/current/main/phaseXX*.md`
に移し、このファイルからはリンクまたは簡単な要約だけに留める。
- もし CURRENT_TASK がまた肥大化してきたら、
古いセクションを phase ドキュメント側に逃して、このファイルを再度「現在地サマリ」に戻す。