2025-12-04 14:19:48 +09:00
|
|
|
|
# Current Task
|
|
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
このファイルは「いま何に集中しているか」と「次にやる候補」だけを書く軽量ビューに戻すよ。
|
|
|
|
|
|
過去フェーズの詳細ログは `docs/development/current/main/10-Now.md` と各 `phase-XX*.md` に残してあるので、履歴はそちらを見てね。
|
2025-12-04 10:52:10 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
## 🎯 今フォーカスしているテーマ
|
2025-12-04 10:52:10 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
### 1. JoinIR ループ基盤 → JsonParser / Trim への適用
|
2025-12-04 10:52:10 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- 現状
|
|
|
|
|
|
- LoopBuilder は完全削除済み。ループは JoinIR Pattern1–4(while / break / if‑PHI / continue)で統一。
|
|
|
|
|
|
- LoopExit / ExitLine / Boundary / Header PHI のラインは代表ケース(Pattern1–4)で安定。
|
|
|
|
|
|
- LoopConditionScopeBox(Phase 170‑D)はバグ修正済みで、
|
|
|
|
|
|
- ループ条件に出てくる変数を `LoopParam / OuterLocal / LoopBodyLocal` に分類
|
|
|
|
|
|
- 関数パラメータや外側ローカル(例: `s`, `pos`, `len`)は正しく OuterLocal と判定できるようになった。
|
|
|
|
|
|
- 直近の目的
|
|
|
|
|
|
- JsonParserBox / Trim 系ループを、Pattern1–4 + LoopConditionScopeBox の上にどこまで安全に載せられるかを再観測する。
|
|
|
|
|
|
- LoopBodyLocal を条件に含むパターン(Trim の `ch` など)を、Pattern5 でどう扱うか設計する。
|
|
|
|
|
|
- 次にやる候補
|
|
|
|
|
|
- [x] Phase 171‑A: LoopConditionScope 修正版で JsonParser / Trim ループの再インベントリ ✅
|
|
|
|
|
|
→ どのループが Pattern1–4 内に入り、どれが LoopBodyLocal 条件で弾かれているかを整理。
|
|
|
|
|
|
- [x] Phase 171‑B: Pattern5‑A のターゲット決定 ✅
|
|
|
|
|
|
→ Trim の leading whitespace ループを代表として選定。
|
|
|
|
|
|
- [x] Phase 171‑C-1: LoopBodyCarrierPromoter スケルトン実装 ✅
|
|
|
|
|
|
→ API 定義(PromotionRequest → PromotionResult)、基本検出ロジック。
|
|
|
|
|
|
- [x] Phase 171‑C-2: Trim パターン昇格ロジック実装 ✅
|
|
|
|
|
|
→ `find_definition_in_body()`, `is_substring_method_call()`, `extract_equality_literals()` 実装。
|
|
|
|
|
|
→ `TrimPatternInfo` で検出結果を返す。10 unit tests。
|
2025-12-08 02:41:53 +09:00
|
|
|
|
- [x] Phase 171‑C-3: Pattern 2/4 ルーティングとの統合 ✅
|
2025-12-07 23:09:25 +09:00
|
|
|
|
→ routing.rs で LoopBodyCarrierPromoter を呼び出し、昇格可能なら Pattern2 へルート。
|
2025-12-08 02:41:53 +09:00
|
|
|
|
- [x] Phase 171‑C-4: CarrierInfo への統合 ✅ (2025-12-07)
|
|
|
|
|
|
→ `CarrierInfo::merge_from()` で昇格後のキャリアをマージ。
|
|
|
|
|
|
→ `TrimPatternInfo::to_carrier_info()` で変換ヘルパ実装。
|
|
|
|
|
|
→ Pattern2/4 lowerer で `Promoted` ブランチをマージに更新。7 unit tests。
|
|
|
|
|
|
- [x] Phase 171‑C-5: TrimLoopHelper 設計 ✅ (2025-12-07)
|
|
|
|
|
|
→ `TrimLoopHelper` struct で Trim 専用ロジックを一箇所に集約。
|
|
|
|
|
|
→ `CarrierInfo::trim_helper()` アクセサ追加。4 unit tests。
|
2025-12-08 04:35:13 +09:00
|
|
|
|
- [x] Phase 171‑impl-Trim: Trim 用 JoinIR 生成 ✅ (2025-12-08)
|
2025-12-08 02:41:53 +09:00
|
|
|
|
→ `CarrierInfo::trim_helper()` を使って bool carrier の初期化・更新・exit PHI を生成。
|
2025-12-08 04:35:13 +09:00
|
|
|
|
- [x] Phase 172-Trim-impl: Trim 用 MIR 生成 ✅ (2025-12-08)
|
|
|
|
|
|
→ Pattern2 で Trim パターンの JoinIR→MIR lowering 実装完了。
|
|
|
|
|
|
→ emit_whitespace_check(), extract_substring_args() ヘルパ追加。
|
2025-12-08 10:13:34 +09:00
|
|
|
|
- [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 の汎用性が完全証明された。
|
2025-12-08 04:35:13 +09:00
|
|
|
|
- [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 内容を反映)。
|
2025-12-08 06:14:03 +09:00
|
|
|
|
- [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)。
|
2025-12-04 10:52:10 +09:00
|
|
|
|
|
2025-12-04 11:04:29 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
### 2. Self‑Host depth‑2 / MIR JSON v0 / JoinIR Analyzer ライン
|
2025-12-04 11:04:29 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- 現状
|
|
|
|
|
|
- `.hako` から Program JSON v0 / MIR JSON を読み込む準備は整備済み(Phase 160 系)。
|
|
|
|
|
|
- JsonParserBox / JsonParserBox.ProgramJSONBox / JsonParserBox.JsonParserBox 自体は箱として実装されている。
|
|
|
|
|
|
- MIR/JoinIR Analyzer Box 群(MirAnalyzerBox, JoinIrAnalyzerBox)は基盤実装済み。
|
|
|
|
|
|
- 直近の目的
|
|
|
|
|
|
- JoinIR ループ基盤が安定した前提で、「selfhost depth‑2 の最小ループ」がどこまで回るかを再確認する。
|
|
|
|
|
|
- JsonParserBox 側のループ制約(Pattern1–4 + 将来 Pattern5)と、Analyzer Box の入力形式を揃える。
|
|
|
|
|
|
- 次にやる候補
|
|
|
|
|
|
- [ ] Phase 161‑続き: MirAnalyzerBox / JoinIrAnalyzerBox に対する代表ケースの再実行
|
|
|
|
|
|
(loop パターンが JoinIR 統一後も正しく認識できているか確認)。
|
|
|
|
|
|
- [ ] Phase 166‑続き: Program JSON v0 / MIR JSON v1 を `.hako` 側で安全にパースできるか確認
|
|
|
|
|
|
(JsonParserBox のループ制約と衝突しないかをチェック)。
|
2025-12-04 12:06:34 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
### 3. hako_check / MIR CFG / JoinIR 解析ライン
|
2025-12-04 12:06:34 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- 現状
|
|
|
|
|
|
- HC019 / HC020(DeadCode / DeadBlocks)など、hako_check 側の Box は JoinIR/MIR CFG を読む経路に統一済み。
|
|
|
|
|
|
- JsonParserBox による JSON パーサー共通ライブラリ化も進行中(Phase 170–172)。
|
|
|
|
|
|
- 直近の目的
|
|
|
|
|
|
- JoinIR / MIR ラインの変更(Pattern1–4, ExitLine, Boundary, ConditionScope)が hako_check に与える影響を最小に保ちつつ、
|
|
|
|
|
|
解析結果の精度を維持する。
|
|
|
|
|
|
- 次にやる候補
|
|
|
|
|
|
- [ ] Phase 155+ の MIR JSON v1 統合ラインを、最新の JoinIR/Loop 仕様に追随させるかどうかの判断。
|
|
|
|
|
|
(今のところブロッカーではないので優先度は中〜低)
|
2025-12-04 12:06:34 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
## ✅ 最近完了した主なフェーズ(抜粋)
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
ここは「今の作業に強く関係する直近フェーズ」だけをざっくり残すよ。詳細は各 phase ドキュメントを参照。
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- **Phase 33‑16/20/21**: Loop header PHI / ExitLine / Boundary の SSOT 化
|
|
|
|
|
|
→ ループ変数の現在値と exit 値が header PHI / ExitLine 経由で一貫して伝播するようになった。
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- **Phase 33‑18/19/20**: Pattern4(continue)・else‑continue 正規化・carrier フィルタリング
|
|
|
|
|
|
→ continue 含みのループ(Pattern4)が JoinIR 統一ラインの中で動作。
|
|
|
|
|
|
`ContinueBranchNormalizer` / `LoopUpdateAnalyzer` / `CarrierInfo` ラインが安定。
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- **Phase 165**: JoinIR ループ Pattern1–4 代表ケースの完全検証
|
|
|
|
|
|
→ loop_min_while / joinir_min_loop / loop_if_phi / loop_continue_pattern4 で
|
|
|
|
|
|
`[joinir/freeze]` と SSA‑undef を全排除。
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- **Phase 170‑D (+BugFix)**: LoopConditionScopeBox 実装&パラメータ誤分類バグ修正
|
|
|
|
|
|
→ ループ条件の変数スコープ分類(LoopParam / OuterLocal / LoopBodyLocal)が安定。
|
|
|
|
|
|
JsonParserBox の `s`, `pos`, `len` など関数パラメータが正しく OuterLocal と見なされるようになった。
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- **Phase 168–169**: BoolExprLowerer / condition_to_joinir 強化
|
|
|
|
|
|
→ `_trim` / `_skip_whitespace` の OR chain / AND / NOT を JoinIR/MIR に正しく落とせるようになった。
|
|
|
|
|
|
(ただし LoopBodyLocal 条件をどう扱うかは Pattern5 設計の領域として切り出し済み)
|
2025-12-05 16:00:31 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
2025-12-07 21:43:08 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
## 📌 このファイルの運用方針
|
2025-12-07 21:43:08 +09:00
|
|
|
|
|
2025-12-07 23:09:25 +09:00
|
|
|
|
- CURRENT_TASK.md には「直近 1〜2 週間で触っているライン」と「次にやる候補」だけを書く。
|
|
|
|
|
|
- フェーズごとの詳細ログ・長文の議事録・実装メモは:
|
|
|
|
|
|
- `docs/development/current/main/10-Now.md`
|
|
|
|
|
|
- `docs/development/current/main/phaseXX*.md`
|
|
|
|
|
|
に移し、このファイルからはリンクまたは簡単な要約だけに留める。
|
|
|
|
|
|
- もし CURRENT_TASK がまた肥大化してきたら、
|
|
|
|
|
|
古いセクションを phase ドキュメント側に逃して、このファイルを再度「現在地サマリ」に戻す。
|
2025-12-07 21:43:08 +09:00
|
|
|
|
|