134 lines
4.1 KiB
Markdown
134 lines
4.1 KiB
Markdown
|
|
# Phase 188.2: StepTree nesting depth SSOT (Option A) — strict Fail-Fast
|
|||
|
|
|
|||
|
|
**Date**: 2025-12-27
|
|||
|
|
**Status**: ✅ Option A implemented / ❌ Pattern 6 lowering deferred (Phase 188.3+)
|
|||
|
|
**Goal**: `StepTreeFeatures.max_loop_depth` を SSOT として、strict mode で depth > 2 を明示エラーにする
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ Decision: Option A Adopted (2025-12-27)
|
|||
|
|
|
|||
|
|
**Chosen Approach**: StepTreeFeatures Integration
|
|||
|
|
|
|||
|
|
**What Phase 188.2 Implements**:
|
|||
|
|
- Use `StepTree.features.max_loop_depth` as SSOT for nesting depth
|
|||
|
|
- Add explicit error for `max_loop_depth > 2` in strict mode (capability_guard.rs)
|
|||
|
|
- Update NestedLoop capability hint to reflect current support
|
|||
|
|
|
|||
|
|
**Implementation Location**:
|
|||
|
|
- `src/mir/builder/control_flow/joinir/control_tree_capability_guard.rs` (lines 32-76)
|
|||
|
|
|
|||
|
|
**Status**: Option A depth checking implemented, Option B deferred
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## What Phase 188.2 delivered
|
|||
|
|
|
|||
|
|
- ✅ strict mode の depth 制約を SSOT 化(`max_loop_depth > 2` は明示エラー)
|
|||
|
|
- ✅ NestedLoop capability hint を現実に合わせて更新(1-levelは許可、2+ level は depth_exceeded)
|
|||
|
|
- ✅ unit tests 更新(depth=2 PASS / depth=3 FAIL)
|
|||
|
|
- ✅ quick/integration は不変(回帰なし)
|
|||
|
|
|
|||
|
|
### Verification (reference)
|
|||
|
|
|
|||
|
|
- quick: `./tools/smokes/v2/run.sh --profile quick`
|
|||
|
|
- integration selfhost: `./tools/smokes/v2/run.sh --profile integration --filter "selfhost_"`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Background
|
|||
|
|
|
|||
|
|
Phase 188.1 delivered infrastructure (capability allowlist, enum, stub module), but **detection and lowering are NOT implemented** due to architectural limitations.
|
|||
|
|
|
|||
|
|
**See**: `docs/development/current/main/phases/phase-188.1/README.md` § Implementation Reality
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Design Decision Required (Choose A or B)
|
|||
|
|
|
|||
|
|
### Option A: StepTreeFeatures Integration
|
|||
|
|
|
|||
|
|
**Approach**:
|
|||
|
|
- Pass `StepTreeFeatures` from StepTree to LoopForm creation
|
|||
|
|
- Store `max_loop_depth` in LoopForm (add field) or pass via context
|
|||
|
|
- Use AST-level nesting depth for Pattern 6 detection
|
|||
|
|
|
|||
|
|
**Pros**:
|
|||
|
|
- Nesting info already exists in StepTree
|
|||
|
|
- No new detection logic required
|
|||
|
|
- Fast implementation
|
|||
|
|
|
|||
|
|
**Cons**:
|
|||
|
|
- AST-level info may diverge from MIR structure (after optimizations)
|
|||
|
|
- Adding fields to LoopForm breaks separation of concerns
|
|||
|
|
|
|||
|
|
**Estimated Effort**: 1-2 days
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Option B: LoopRegion Integration
|
|||
|
|
|
|||
|
|
**Approach**:
|
|||
|
|
- Implement LoopRegion builder (instantiate parent/child structure)
|
|||
|
|
- Build LoopRegion tree from MIR control flow graph
|
|||
|
|
- Compute nesting depth from LoopRegion.parent traversal
|
|||
|
|
- Replace LoopForm with LoopRegion in lowering pipeline
|
|||
|
|
|
|||
|
|
**Pros**:
|
|||
|
|
- MIR-level truth (accurate after optimizations)
|
|||
|
|
- Leverages Phase 32 infrastructure
|
|||
|
|
- Clean separation (LoopRegion is designed for nesting)
|
|||
|
|
|
|||
|
|
**Cons**:
|
|||
|
|
- Requires implementing LoopRegion builder (non-trivial)
|
|||
|
|
- Larger architectural change
|
|||
|
|
- May affect other loop analysis code
|
|||
|
|
|
|||
|
|
**Estimated Effort**: 1-2 weeks
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Planning Session Agenda
|
|||
|
|
|
|||
|
|
**Step 1: Docs-First Design Review**
|
|||
|
|
- Review Option A vs B trade-offs
|
|||
|
|
- Consider impact on selfhost_minimal requirements
|
|||
|
|
- Decide on approach based on scope/timeline
|
|||
|
|
|
|||
|
|
**Step 2: Detailed Implementation Plan**
|
|||
|
|
- Write step-by-step implementation guide
|
|||
|
|
- Identify critical files
|
|||
|
|
- Estimate effort per task
|
|||
|
|
|
|||
|
|
**Step 3: Implementation**
|
|||
|
|
- Execute chosen approach
|
|||
|
|
- Test with selfhost_minimal
|
|||
|
|
- Verify 154/154 PASS maintained
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Out of Scope (Phase 188.2)
|
|||
|
|
|
|||
|
|
Still deferred to Phase 188.3+:
|
|||
|
|
- Break/continue in nested loops (Pattern 2/4 combinations)
|
|||
|
|
- Multiple inner loops (siblings)
|
|||
|
|
- 2+ level nesting (depth > 2) の lowering(Phase 188.2 は strict Fail-Fast のみ)
|
|||
|
|
|
|||
|
|
**Rationale**: Phase 188.2 focuses on 1-level nesting detection only (minimal scope).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## References
|
|||
|
|
|
|||
|
|
- **Phase 188.1 Reality**: `docs/development/current/main/phases/phase-188.1/README.md` § Implementation Reality
|
|||
|
|
- **LoopRegion Definition**: `src/mir/control_form.rs` (lines 40-62)
|
|||
|
|
- **StepTreeFeatures Definition**: `src/mir/control_tree/step_tree.rs` (lines 17-25)
|
|||
|
|
- **LoopForm/LoopShape Definition**: `src/mir/loop_form.rs`, `src/mir/control_form.rs`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## End of Phase 188.2 Planning Stub
|
|||
|
|
|
|||
|
|
**Status**: Option A is complete; remaining work is Phase 188.3+
|
|||
|
|
**Dependencies**: Phase 188.1 “Implementation Reality” remains SSOT
|