Major refactoring of JoinIR normalization pipeline: Key changes: - Structured→Normalized→MIR(direct) pipeline established - ShapeGuard enhanced with Pattern2 loop validation - dev_env.rs: New development fixtures and env control - fixtures.rs: jsonparser_parse_number_real fixture - normalized_bridge/direct.rs: Direct MIR generation from Normalized - pattern2_step_schedule.rs: Extracted step scheduling logic Files changed: - normalized.rs: Enhanced NormalizedJoinModule with DevEnv support - shape_guard.rs: Pattern2-specific validation (+300 lines) - normalized_bridge.rs: Unified bridge with direct path - loop_with_break_minimal.rs: Integrated step scheduling - Deleted: step_schedule.rs (moved to pattern2_step_schedule.rs) New files: - param_guess.rs: Loop parameter inference - pattern2_step_schedule.rs: Step scheduling for Pattern2 - phase43-norm-canon-p2-mid.md: Design doc Tests: 937/937 PASS (+6 from baseline 931) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
Status: Implemented (Phase 245B-IMPL)
Scope: _parse_number で num_str を Pattern2/P5 のキャリアとして扱うかどうかを決める設計フェーズ(実装は Structured→Normalized dev フィクスチャで完了)。
Notes: jsonparser_parse_number_real フィクスチャで num_str = num_str + ch を LoopState キャリアとして実装し、dev Normalized 比較テストで固定済み。
Phase 245B: JsonParser _parse_number の num_str キャリア設計
1. 目的
_parse_numberで数値文字列を蓄積するnum_strを、JoinIR Pattern2/P5 のキャリアとして扱うかを決める。- UpdateExpr の許容範囲(例:
num_str = num_str + ch)と、どのテストで意味論を固定するかを先に書き下す。
2. 論点
- キャリア化するか:
- Option A:
num_strをキャリアとして Pattern2 に含める(LoopHeader PHI/ExitLine まで通す)。 - Option B: 今フェーズは
pのみ、num_strは後続(言語仕様/意味論決定後)に回す。
- Option A:
- 許可する UpdateExpr:
- 文字連結パターン(
num_str = num_str + ch)のみを許容するか。 - それ以外の文字列操作(substring/indexOf 等)は当面禁止するか。
- 文字連結パターン(
- 依存する箱:
- CarrierUpdateEmitter が文字列連結を安全に扱えるか(型/ValueId の整合)。
- ExprLowerer/MethodCallLowerer で文字列メソッドが必要か。
3. テストで固定したいこと(候補)
- 正常系:
"42"→num_str == "42",p == len, RC/ログ従来通り。 - 非digit混在:
"7z"→ break でnum_str == "7", RC/ログ従来通り。 - 既存の JsonParser スモークがあればそれを JoinIR 経路で回して差分が出ないことを確認。
4. 進め方(小タスク案)
- UpdateExpr の whitelist を決める(文字連結のみ/その他禁止)。
- CarrierInfo に
num_strを入れるかどうかを設計メモに明記。 - どのテストで意味論を固定するかを列挙(既存/新規)。
- これらを決めてからコード側 Phase 245B(小変更)に着手する。
5. メモ
- Phase 245-EX では
pのみ JoinIR Pattern2 に載せた。num_strの扱いは未決。 - 文字列キャリアは ValueId/ExitLine との整合が崩れやすいので、Fail-Fast 原則を崩さずに小さく導入すること。