docs(joinir): Phase 182-6 Update documentation with P1/P2 verification results
Phase 182 Summary: ✅ Pattern1 (Simple) verification complete ✅ Pattern2 (Break) verification complete with integer operations ✅ Routing whitelist updated (_parse_number/2, _atoi/1, _match_literal/3) ✅ Representative tests created and passing Blockers identified: 1. LoopBodyLocal variable handling - Current: Tries Trim-specific carrier promotion (fails) - Needed: Allow pure local variables (no promotion) in P1/P2 2. String concatenation filter (Phase 178) - Current: Rejects 'num_str = num_str + ch' conservatively - Needed: Gradual enablement for JsonParser use cases Updated documentation: - joinir-architecture-overview.md: Added Phase 182 status to JsonParser section - CURRENT_TASK.md: Added Phase 182 completion and Phase 183 next steps - phase182-simple-loops-design.md: Design memo for Phase 182
This commit is contained in:
@ -274,7 +274,45 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
|
||||
|
||||
---
|
||||
|
||||
## 4. selfhost / .hako JoinIR Frontend との関係
|
||||
## 4. JsonParser / Trim / P5 ループの現在地(Phase 170–181)
|
||||
|
||||
### 4.1 JsonParser ループ空間と P1–P5
|
||||
|
||||
Phase 181 で JsonParserBox 内の 11 ループを棚卸しした結果、
|
||||
構造的には **すべて JoinIR Pattern1–4 (+ P5) で扱える** ことが分かったよ。
|
||||
|
||||
- 既に JoinIR 経路で動作しているもの:
|
||||
- `_skip_whitespace`(P2 + P5 Trim)
|
||||
- `_trim` leading/trailing(P2 + P5 Trim)
|
||||
- **Phase 182 で P1/P2 パターン検証完了** ✅:
|
||||
- Pattern1 (Simple): `_match_literal` 系ループで動作確認済み(apps/tests/phase182_p1_match_literal.hako)
|
||||
- Pattern2 (Break): 整数演算ループで動作確認済み(apps/tests/phase182_p2_break_integer.hako)
|
||||
- **ブロッカー発見**: 実際の JsonParser ループには 2 つの制約が必要:
|
||||
1. LoopBodyLocal 変数の扱い(`ch`, `digit_pos`, `pos` など)
|
||||
- 現状は Trim pattern 専用の carrier 昇格を試みてエラーになる
|
||||
- P1/P2 では純粋なローカル変数(昇格不要)として扱うべき
|
||||
2. 文字列連結フィルタ(Phase 178)
|
||||
- `num_str = num_str + ch` のような string concat を保守的に reject
|
||||
- JsonParser では必須の操作なので段階的に有効化が必要
|
||||
- 構造的に P1–P4 で対応可能(代表例):
|
||||
- `_parse_number` / `_atoi`(P2 Break)- Phase 182 でブロッカー特定済み
|
||||
- `_match_literal`(P1 Simple while)- Phase 182 で動作確認済み ✅
|
||||
- `_parse_string` / `_parse_array` / `_parse_object`
|
||||
(P2 + P4 + P5 の組み合わせで表現可能なことを設計上確認済み)
|
||||
- 低優先度だが理論上は P1–P4 からの拡張で吸収可能:
|
||||
- `_unescape_string` など、複雑な continue / 条件付き更新を含むループ
|
||||
|
||||
方針:
|
||||
|
||||
- **ループの「形」は P1–P4 から増やさない**。
|
||||
複雑さ(LoopBodyLocal 条件、OR chain、continue 多用など)は BoolExprLowerer /
|
||||
ContinueBranchNormalizer / TrimLoopLowerer (P5) といった補助箱側で吸収する。
|
||||
- JsonParser 側の P5 適用(Trim / `_skip_whitespace` / `_parse_string` 最小版)は実証済み。
|
||||
残りのループは Phase 17x–18x で、P1–P4+P5 の組み合わせとして段階的に実装していく。
|
||||
|
||||
---
|
||||
|
||||
## 5. selfhost / .hako JoinIR Frontend との関係
|
||||
|
||||
JoinIR は Rust 側だけでなく、将来的に .hako selfhost コンパイラ側でも生成・解析される予定だよ:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user