Files
hakorune/CURRENT_TASK.md
nyash-codex 22f97b67b1 docs: Phase 195 Pattern 3 extension design (multi-carrier support)
Phase 195 design document for P3 (If-Else PHI) multi-carrier expansion:
- Goal: Handle 2-3 carriers in if-else branches simultaneously
- Scope: if-complete multi-carrier updates (flag+buffer, sum+count patterns)

Task breakdown:
- 195-1: Loop inventory (_parse_string simple, if-sum patterns)
- 195-2: LoopUpdateSummary/CarrierInfo design (multi-carrier support)
- 195-3: Pattern3 lowerer design (PhiGroup vs ExitLine extension)
- 195-4: Implementation scope (2-3 carriers, existing UpdateKind range)
- 195-5: Documentation updates (CURRENT_TASK.md + overview)

Design decisions:
-  ExitLine extension (no PhiGroupBox - YAGNI principle)
-  Both-branch carrier definition check (unchanged = use previous value)
-  No ConditionEnv expansion (Phase 200+ deferred)
-  LoopBodyLocal + MethodCall mix deferred to Phase 195+

Target loops:
1. JsonParser _parse_string (escaped flag + buffer)
   - Carrier 1: escaped (BoolFlag) - conditional flag
   - Carrier 2: buffer (StringAppend) - else-only update
2. selfhost if-sum (sum + count)
   - Carrier 1: sum (NumberAccumulation) - then-only update
   - Carrier 2: count (CounterLike) - then-only update

Test cases designed:
- phase195_flag_buffer.hako (BoolFlag + StringAppend)
- phase195_sum_count.hako (NumberAccumulation + CounterLike)

Expected outcome:
- phase195-pattern3-extension-design.md (complete design spec)
- Clear implementation scope for Phase 195-impl
- Path to 40% → 60% JsonParser coverage

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-09 13:22:14 +09:00

33 KiB
Raw Blame History

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 でどう扱うか設計する。
  • 次にやる候補

    • Phase 171A: LoopConditionScope 修正版で JsonParser / Trim ループの再インベントリ → どのループが Pattern14 内に入り、どれが LoopBodyLocal 条件で弾かれているかを整理。
    • Phase 171B: Pattern5A のターゲット決定 → Trim の leading whitespace ループを代表として選定。
    • Phase 171C-1: LoopBodyCarrierPromoter スケルトン実装 → API 定義PromotionRequest → PromotionResult、基本検出ロジック。
    • Phase 171C-2: Trim パターン昇格ロジック実装 find_definition_in_body(), is_substring_method_call(), extract_equality_literals() 実装。 → TrimPatternInfo で検出結果を返す。10 unit tests。
    • Phase 171C-3: Pattern 2/4 ルーティングとの統合 → routing.rs で LoopBodyCarrierPromoter を呼び出し、昇格可能なら Pattern2 へルート。
    • Phase 171C-4: CarrierInfo への統合 (2025-12-07) → CarrierInfo::merge_from() で昇格後のキャリアをマージ。 → TrimPatternInfo::to_carrier_info() で変換ヘルパ実装。 → Pattern2/4 lowerer で Promoted ブランチをマージに更新。7 unit tests。
    • Phase 171C-5: TrimLoopHelper 設計 (2025-12-07) → TrimLoopHelper struct で Trim 専用ロジックを一箇所に集約。 → CarrierInfo::trim_helper() アクセサ追加。4 unit tests。
    • Phase 171impl-Trim: Trim 用 JoinIR 生成 (2025-12-08) → CarrierInfo::trim_helper() を使って bool carrier の初期化・更新・exit PHI を生成。
    • Phase 172-Trim-impl: Trim 用 MIR 生成 (2025-12-08) → Pattern2 で Trim パターンの JoinIR→MIR lowering 実装完了。 → emit_whitespace_check(), extract_substring_args() ヘルパ追加。
    • 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 の汎用性が完全証明された。
    • 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 内容を反映)。
    • 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
    • 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 と同じ昇格パターンで動作確認。
    • 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 改善対象)。
    • 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 周りのサマリ)

    • 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 問題解決
    • 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 以前からの既知問題(別途対応)
    • 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 のみ)
    • 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 側で吸収する方針を確定。
    • 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。 - 注意: Pattern 2/4 の複雑ロジックTrim, carrier 解析)は inline 維持。 将来 Phase 180+ で Trim module 化予定。
    • 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
    • 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 対応
    • 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 スコープ外)
    • 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 収集機能必要)
    • 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+ での実装方針を確立
    • 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)
    • 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つのオプション設計済み
    • 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 で実装(コード変更は別フェーズ)
    • 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 で対応)
    • 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 、退行なし
    • 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 (完了: 2025-12-09) - 目的: Phase 186 limitation 部分解除、MethodCall を init 式でサポート - emit_method_call_init() 実装(~80行、MethodCall → BoxCall 変換 - String literal init サポート追加Phase 186 拡張) - Method whitelistindexOf, get, toStringFail-Fast 実装 - E2E テスト: i.toString() 成功、退行なし - 重要な設計判断: ConditionEnv を「ループパラメータ専用」として維持 - 対応: ループパラメータをレシーバーとする MethodCall (i.toString()) - ⚠️ 保留: 外部ローカルをレシーバーとする MethodCall (digits.indexOf(ch)) - 理由: Phase 170-200 の 2-tier 境界設計ConditionEnv/LoopBodyLocalEnvを保持 - 将来: Phase 200+ で独立した箱として設計、または .hako リライト対応
    • Phase 194: JsonParser P1/P2/P5 実戦投入(検証フェーズ) (2025-12-09) - 目的: Phase 170-193 インフラの実コード検証Fail-Fast 戦略) - 194-1: Loop inventory 作成 - 4/10 ループ JoinIR 対応_skip_whitespace, _trim x2, _match_literal - 6/10 ループ保留(明確な理由付き) - 詳細: phase194-loop-inventory.md10ループ完全分類 - 194-2: Routing 確認 - Structure-only mode 動作確認whitelist 不要) - 既存 whitelist に全4ループ登録済み - 194-3: E2E 実行 - 結果: Compilation ErrorExpected - Fail-Fast 戦略成功) - エラー: digits.indexOf() → ConditionEnv constraint - 分析: function-scoped variables は Phase 193 非対応 - 194-4: Regression tests - phase190_atoi_impl.hako → 12 - phase191_body_local_atoi.hako → 123 - phase193_init_method_call.hako → RC:0 - 194-5: ドキュメント更新 - phase194-jsonparser-deployment.mdImplementation Status 完全記録) - joinir-architecture-overview.mdSection 7.2 Phase 194 完了マーク) - CURRENT_TASK.md本項目追加 - 成果: インフラ品質検証完了、次 Phase への明確なロードマップ提示 - P5 Trim pattern 実戦検証_trim で動作確認) - ConditionEnv 制約明確化function-scoped variables 未対応) - 退行なしPhase 190-193 全テスト PASS - 技術的発見: 1. ConditionEnv constraintfunction-scoped variables 非対応) - 影響: _parse_number, _atoidigits.indexOf 依存) - 解決策案: Phase 200+ ConditionEnv 拡張 OR .hako リライト 2. Complex carriers多段フラグ - 影響: _parse_string, _unescape_string - 解決策: Phase 195+ Pattern 3 拡張 3. Multiple MethodCallsループ body 内複数呼び出し) - 影響: _parse_array, _parse_object - 解決策: Phase 195+ MethodCall 拡張 - 推奨ロードマップ: - Phase 195: Pattern 3 extensionif-in-loop + multi-flag carriers - Phase 200+: ConditionEnv expansionfunction-scoped locals - Phase 201+: MethodCall extensionmultiple calls in body
    • Phase 195: Pattern 3 拡張(設計フェーズ) - 目的: P3If-Else PHIを複数キャリア対応に拡張する設計 - 195-1: 対象ループ絞り込み_parse_string 簡易版、if-sum - 195-2: LoopUpdateSummary/CarrierInfo 設計整理(複数キャリア対応) - 195-3: Pattern3 lowerer 設計更新PhiGroup vs ExitLine 拡張判断) - 195-4: 実装スコープ決定2-3キャリア、既存 UpdateKind 範囲内) - 195-5: ドキュメント更新CURRENT_TASK.md + overview 更新) - 設計判断: - ExitLine 拡張で対応PhiGroupBox は作らない - YAGNI 原則) - 両分岐での Carrier 定義確認(更新なし = 前の値使用) - ConditionEnv 拡張なしPhase 200+ 保留) - LoopBodyLocal + MethodCall 混在は Phase 195+ 延期 - 期待成果: - phase195-pattern3-extension-design.md完全設計書 - Phase 195-impl の実装スコープ明確化 - JsonParser カバレッジ 40% → 60% への道筋

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 ドキュメント側に逃して、このファイルを再度「現在地サマリ」に戻す。