Files
hakorune/CURRENT_TASK.md
nyash-codex 14c84fc583 feat(joinir): Phase 171 complete - Trim pattern LoopBodyLocal promotion
Phase 171-C-4/5 + impl-Trim: Full Trim pattern validation infrastructure

## CarrierInfo 統合 (C-4)
- CarrierInfo::merge_from(): Deduplicated carrier merging
- TrimPatternInfo::to_carrier_info(): Conversion helper
- Pattern2/4: Promoted carrier merge integration
- 7 unit tests for merge logic

## TrimLoopHelper 設計 (C-5)
- TrimLoopHelper struct: Trim-specific validation box
- carrier_type(), initial_value(), whitespace helpers
- CarrierInfo::trim_helper() accessor
- 5 unit tests

## Validation-Only Integration (impl-Trim)
- TrimLoopHelper::is_safe_trim(), is_trim_like(), has_valid_structure()
- Pattern2/4: Trim exception route with safety validation
- body_locals extraction from loop body AST
- LoopBodyCarrierPromoter: ASTNode::Local handler extension
- 4 unit tests for safety validation

## Architecture
- Box Theory: TrimLoopHelper is "validation only" (no JoinIR generation)
- Fail-Fast: Non-Trim LoopBodyLocal immediately rejected
- Whitelist approach: Only Trim pattern bypasses LoopBodyLocal restriction

Tests: 16 new unit tests, all passing
E2E: test_trim_main_pattern.hako validation successful

Next: Phase 172 - Actual JoinIR lowering for Trim pattern

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 02:41:53 +09:00

6.9 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 生成 → CarrierInfo::trim_helper() を使って bool carrier の初期化・更新・exit PHI を生成。

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