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:
nyash-codex
2025-12-09 03:59:53 +09:00
parent ba33bfc323
commit b7bf4a721e
3 changed files with 488 additions and 17 deletions

View File

@ -169,11 +169,12 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
- else-continue を then-continue へ正規化し、Select ベースの continue を簡潔にする。
- ループ本体で実際に更新されるキャリアだけを抽出Pattern 4 で不要キャリアを排除)。
- **LoopBodyLocalEnv / UpdateEnv / CarrierUpdateEmitterPhase 184**
- **LoopBodyLocalEnv / UpdateEnv / CarrierUpdateEmitterPhase 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 loweringPhase 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 で処理