docs: Phase 191 completion + Phase 192 Complex addend design
- Updated joinir-architecture-overview.md: - Phase 191 body-local init integration complete - Phase 192 Complex addend normalization strategy - Updated CURRENT_TASK.md: Phase 191 complete with results - Created phase192-complex-addend-design.md: - ComplexAddendNormalizer design (temp variable decomposition) - Integration with LoopUpdateAnalyzer and Pattern2 - No changes to emission layer (reuses existing boxes) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -169,11 +169,12 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
|
||||
- else-continue を then-continue へ正規化し、Select ベースの continue を簡潔にする。
|
||||
- ループ本体で実際に更新されるキャリアだけを抽出(Pattern 4 で不要キャリアを排除)。
|
||||
|
||||
- **LoopBodyLocalEnv / UpdateEnv / CarrierUpdateEmitter(Phase 184)**
|
||||
- **LoopBodyLocalEnv / UpdateEnv / CarrierUpdateEmitter(Phase 184, 191統合完了)**
|
||||
- ファイル:
|
||||
- `src/mir/join_ir/lowering/loop_body_local_env.rs`
|
||||
- `src/mir/join_ir/lowering/update_env.rs`
|
||||
- `src/mir/join_ir/lowering/carrier_update_emitter.rs`
|
||||
- `src/mir/join_ir/lowering/loop_with_break_minimal.rs`(Phase 191統合)
|
||||
- 責務:
|
||||
- **LoopBodyLocalEnv**: ループ本体で宣言された body-local 変数の名前→ValueId マッピングを管理(箱化設計)。
|
||||
- **UpdateEnv**: 条件変数(ConditionEnv)と body-local 変数(LoopBodyLocalEnv)を統合した変数解決層。
|
||||
@ -181,10 +182,13 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
|
||||
- **CarrierUpdateEmitter**: UpdateExpr を JoinIR 命令に変換する際、UpdateEnv を使用して body-local 変数をサポート。
|
||||
- `emit_carrier_update_with_env()`: UpdateEnv 版(Phase 184 新規)
|
||||
- `emit_carrier_update()`: ConditionEnv 版(後方互換)
|
||||
- **LoopBodyLocalInitLowerer**: Phase 191 で Pattern2 に統合完了。
|
||||
- 対応済み init 式: 整数リテラル、変数参照、二項演算(`local digit = i + 1`)
|
||||
- UpdateEnv の優先順位により ConditionEnv → LoopBodyLocalEnv の順で変数解決
|
||||
- 設計原則:
|
||||
- **箱理論**: 各 Box が単一責任を持ち、境界明確。
|
||||
- **決定性**: BTreeMap 使用で一貫した順序保証(PHI 生成の決定性)。
|
||||
- **保守的**: Pattern5 (Trim) は対象外、Phase 185 で統合予定。
|
||||
- **Phase 192予定**: Complex addend(`v = v*10 + f(x)`)は Normalizer で temp に落としてから NumberAccumulation に載せる。
|
||||
|
||||
### 2.3 キャリア / Exit / Boundary ライン
|
||||
|
||||
@ -489,18 +493,19 @@ JoinIR は Rust 側だけでなく、将来的に .hako selfhost コンパイラ
|
||||
- ✅ JoinIRVerifier: デバッグビルドで契約検証
|
||||
- ✅ ExitLine Contract Verifier: PHI 配線検証(Phase 190-impl-D)
|
||||
|
||||
### 7.2 残タスク(Phase 191+ で対応予定)
|
||||
### 7.2 残タスク(Phase 192+ で対応予定)
|
||||
|
||||
1. **body-local 変数の init + update lowering(Phase 186/191 ライン)**
|
||||
- `local digit = s[i] - '0'` のような body-local 変数の JoinIR/MIR 生成
|
||||
- LoopBodyLocalEnv / UpdateEnv インフラは Phase 184 で実装済み
|
||||
- Pattern2/4 への統合が残タスク
|
||||
1. **✅ body-local 変数の init + update lowering** → Phase 191 完了
|
||||
- `local digit = i + 1` のような body-local 変数の JoinIR/MIR 生成完了
|
||||
- 対応済み: 整数リテラル、変数参照、二項演算
|
||||
- テスト: `phase191_body_local_atoi.hako` → 期待値 123 ✅
|
||||
|
||||
2. **Complex addend 対応(Phase 191+)**
|
||||
2. **Complex addend 対応(Phase 192)**
|
||||
- `v = v * 10 + digits.indexOf(ch)` のような method call を含む NumberAccumulation
|
||||
- 現状は Fail-Fast で拒否、将来的に addend を事前計算して temp に格納
|
||||
- 方針: ComplexAddendNormalizer で `temp = f(x)` に分解してから NumberAccumulation に載せる
|
||||
- 現状は Fail-Fast で拒否
|
||||
|
||||
3. **JsonParser 残り複雑ループ・selfhost ループへの適用**
|
||||
3. **JsonParser 残り複雑ループ・selfhost ループへの適用(Phase 193+)**
|
||||
- `_parse_array` / `_parse_object`(P4 Continue + 複数 MethodCall)
|
||||
- `_unescape_string`(複雑なキャリア + flatten)
|
||||
- selfhost `.hako` コンパイラの全ループを JoinIR で処理
|
||||
|
||||
Reference in New Issue
Block a user