feat(joinir): Phase 188 StringAppend support in Pattern2/4
- Extended Pattern2/4 whitelist to accept StringLiteral updates - CarrierUpdateEmitter now emits JoinIR for string append - Selective Fail-Fast: accept safe patterns, reject complex Changes: - pattern2_with_break.rs: StringLiteral whitelist - pattern4_with_continue.rs: StringLiteral whitelist - carrier_update_emitter.rs: StringLiteral JoinIR emission Tests: - phase188_string_append_char.hako - phase188_string_append_literal.hako - 10/10 carrier_update_emitter tests PASS 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -188,14 +188,18 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
|
||||
|
||||
### 2.3 キャリア / Exit / Boundary ライン
|
||||
|
||||
- **CarrierInfo / LoopUpdateAnalyzer**
|
||||
- **CarrierInfo / LoopUpdateAnalyzer / CarrierUpdateEmitter**
|
||||
- ファイル:
|
||||
- `src/mir/join_ir/lowering/carrier_info.rs`
|
||||
- `src/mir/join_ir/lowering/loop_update_analyzer.rs`
|
||||
- `src/mir/join_ir/lowering/carrier_update_emitter.rs`
|
||||
- 責務:
|
||||
- ループで更新される変数(carrier)を検出し、UpdateExpr を保持。
|
||||
- Pattern 4 では実際に更新されるキャリアだけを残す。
|
||||
- **Phase 187設計**: String 更新は UpdateKind ベースのホワイトリストで扱う方針(StringAppendChar/Literal は Phase 188+ で実装予定)。
|
||||
- **Phase 188 完了** ✅: String 更新(StringAppendChar/StringAppendLiteral)を UpdateRhs ベースのホワイトリストで受理し、JoinIR BinOp を emit。
|
||||
- 許可: `UpdateRhs::Const`, `UpdateRhs::Variable`, `UpdateRhs::StringLiteral`
|
||||
- 拒否: `UpdateRhs::Other`(method call / nested BinOp 等の複雑パターンのみ)
|
||||
- Pattern2/4 の can_lower() で選別、carrier_update_emitter.rs で JoinIR 生成
|
||||
|
||||
- **ExitMeta / JoinFragmentMeta**
|
||||
- ファイル: `carrier_info.rs`
|
||||
|
||||
Reference in New Issue
Block a user