Files
hakorune/docs/development/current/main/phases/phase-140/README.md

63 lines
2.4 KiB
Markdown
Raw Normal View History

# Phase 140: NormalizedExprLowererBox (pure expressions)
Status: DONE ✅
Scope: Normalized shadow の expression lowering を AST walker で一般化し、パターン爆発を避けるpure のみ)。
Related:
- `docs/development/current/main/design/normalized-expr-lowering.md`
- `docs/development/current/main/30-Backlog.md`
- `docs/development/current/main/phases/phase-139/README.md`
- `src/mir/control_tree/normalized_shadow/common/expr_lowerer_box.rs`
- `src/mir/control_tree/normalized_shadow/common/return_value_lowerer_box.rs`
---
## Goal
- `NormalizedExprLowererBox` を導入し、pure expression を JoinIRNormalized dialectへ lowering できるようにする。
- return lowering は `ReturnValueLowererBox``ExprLowererBox` 委譲へ寄せ、return の形追加を “総当たり” にしない。
## Scope (Phase 140 P0)
### ✅ In scope: pure expression
- `Variable`
- `Literal`Integer/Bool から開始)
- `UnaryOp`not, -
- `BinaryOp`+ - * /
- `Compare`==, <, <=, >, >=
### ❌ Out of scope
- Call/MethodCallPhase 141+
- Short-circuit&&/||)の制御フローを伴う lowering
- 例外/throw/try/catch
- NormalizationPlan の粒度変更suffix→statement などの再設計は Phase 141+ の検討に回す)
## Contract
`NormalizedExprLowererBox::lower_expr(...) -> Result<Option<ValueId>, String>`
- `Ok(Some(vid))`: lowering 成功
- `Ok(None)`: out-of-scope既存経路へフォールバック、既定挙動不変
- `Err(_)`: 内部不整合のみstrict では fail-fast
## Implementation Notes
- 既存の `ReturnValueLowererBox` は “return 構文” の薄い箱に縮退し、expr lowering の実体は `ExprLowererBox` に置く。
- 型は過剰に推論しない。Const/Compare/BinOp の最小ヒントのみ(必要なら段階投入)。
## Tests
- Unit tests:
- `cargo test -p nyash-rust --lib mir::control_tree::normalized_shadow::common`
- Smokes (regressions):
- Phase 139VM/LLVM EXE
- Phase 136/137/138return 系)
- Phase 97フォールバック
## Implementation (DONE)
- Added pure expression SSOT: `src/mir/control_tree/normalized_shadow/common/expr_lowerer_box.rs`
- `ReturnValueLowererBox` shrunk to return-syntax only and delegates to `NormalizedExprLowererBox`
- Explicitly keeps out-of-scope = `Ok(None)` (fallback) and avoids fail-fast expansion