Phase 200-B: FunctionScopeCaptureAnalyzer implementation - analyze_captured_vars_v2() with structural loop matching - CapturedEnv for immutable function-scope variables - ParamRole::Condition for condition-only variables Phase 200-C: ConditionEnvBuilder extension - build_with_captures() integrates CapturedEnv into ConditionEnv - fn_body propagation through LoopPatternContext to Pattern 2 Phase 200-D: E2E verification - capture detection working for base, limit, n etc. - Test files: phase200d_capture_minimal.hako, phase200d_capture_in_condition.hako Phase 201-A: MirBuilder reserved_value_ids infrastructure - reserved_value_ids: HashSet<ValueId> field in MirBuilder - next_value_id() skips reserved IDs - merge/mod.rs sets/clears reserved IDs around JoinIR merge Phase 201: JoinValueSpace design document - Param/Local/PHI disjoint regions design - API: alloc_param(), alloc_local(), reserve_phi() - Migration plan for Pattern 1-4 lowerers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
32 lines
899 B
Plaintext
32 lines
899 B
Plaintext
// Phase 200-D: Capture variable used in CONDITION (not just body)
|
|
// This test verifies that captured variables can be used in break conditions.
|
|
//
|
|
// Key points:
|
|
// - limit is captured (function-scoped constant)
|
|
// - Used in break condition: if v > limit { break }
|
|
// - This proves ConditionEnv.captured is properly connected
|
|
|
|
static box Main {
|
|
main() {
|
|
local limit = 50 // Captured var (used in break condition)
|
|
|
|
local i = 0
|
|
local v = 0
|
|
local n = 100 // Loop up to 100 times
|
|
|
|
// Pattern 2: loop with break using captured var in condition
|
|
loop(i < n) {
|
|
v = v + 10
|
|
i = i + 1
|
|
|
|
// Break condition uses CAPTURED variable 'limit'
|
|
if v > limit {
|
|
break
|
|
}
|
|
}
|
|
|
|
// v should be 60 (broke when v=60 > limit=50)
|
|
print(v) // Expected: 60
|
|
}
|
|
}
|