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

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