Files
hakorune/docs/development/current/main/phases/phase-137
nyash-codex a0009d474d feat(mir): Loop Canonicalizer Phase 3 - skip_whitespace pattern recognition
## Summary
skip_whitespace パターンを Skeleton→Decision で認識可能に。
dev-only 観測で chosen=Pattern3IfPhi / missing_caps=[] を固定。

## Changes
- src/mir/loop_canonicalizer/mod.rs:
  - try_extract_skip_whitespace_pattern() 追加
    - loop(cond) { ... if check { p = p + 1 } else { break } } パターン認識
    - carrier name, delta, body statements を抽出
  - canonicalize_loop_expr() 拡張(skip_whitespace 対応)
    - Pattern3IfPhi 成功時は RoutingDecision::success 返却
    - Skeleton に HeaderCond, Body, Update ステップ追加
    - CarrierSlot に Counter role 設定
    - ExitContract に has_break=true 設定
  - Phase 3 unit tests 追加
    - test_skip_whitespace_pattern_recognition: 基本パターン
    - test_skip_whitespace_with_body_statements: body 付きパターン
    - test_skip_whitespace_fails_without_else: else なし失敗
    - test_skip_whitespace_fails_with_wrong_delta: 減算パターン失敗
  - Phase 2 obsolete tests 削除
- src/mir/builder/control_flow/joinir/routing.rs:
  - Debug 出力拡張(chosen pattern 表示)

## Tests
- cargo test --release --lib loop_canonicalizer::tests: PASS(11 tests)
- cargo test --release --lib: PASS(1044 tests, 退行なし)
- HAKO_JOINIR_DEBUG=1 test_pattern3_skip_whitespace.hako:
  - chosen=Pattern3IfPhi 
  - missing_caps=[] 

## Validation
-  dev-only 観測(HAKO_JOINIR_DEBUG=1)のときだけログ出力
-  フラグ OFF 時は完全不変
-  skip_whitespace パターンで SUCCESS 固定
-  unit tests で全パターン固定

Phase 137-3 complete
2025-12-16 05:38:18 +09:00
..

Phase 137: Loop Canonicalizer前処理 SSOT

Status

  • 状態: 🔶 進行中Phase 2 完了)

Goal

  • ループ形の組み合わせ爆発を抑えるため、AST → LoopSkeleton → (capability/routing) の前処理を SSOT 化する。
  • 既存の方針fixture + shape guard + Fail-Fastを維持したまま、pattern 数を増やさずにスケールさせる。

Phase 1完了: 型/語彙の SSOT

  • 実装: src/mir/loop_canonicalizer/mod.rs
    • LoopSkeleton / SkeletonStep / UpdateKind
    • ExitContract / CarrierSlot / CarrierRole
    • RoutingDecision / capability tagsCAP_MISSING_*
  • 注意: Phase 1 は「型と語彙」のみ。routing/lowering にはまだ介入しない。

Phase 2完了: dev-only 観測の導入

  • 入口:
    • Canonicalize: src/mir/loop_canonicalizer/mod.rscanonicalize_loop_expr
    • 観測ポイント: src/mir/builder/control_flow/joinir/routing.rsjoinir_dev_enabled() 配下)
  • 既定挙動: 不変dev-only 観測のみ)

Phase 3: Pattern 検出Skeleton→Decision の精密化)

  • 目標: skip_whitespace を Skeleton から安定に識別し、RoutingDecision.chosenmissing_caps を期待通りに固定する。
  • 注意: routing/lowering の変更は dev-only の観測結果が固まってから。

SSOT

  • 設計 SSOT: docs/development/current/main/design/loop-canonicalizer.md
  • JoinIR 契約 SSOT: docs/development/current/main/joinir-architecture-overview.md