test(phase263): add minimal repro for Pattern2 LoopBodyLocal seg issue
- apps/tests/phase263_p0_pattern2_seg_min.hako: loop body で seg 代入 - tools/.../phase263_p0_pattern2_seg_vm.sh: VM smoke test - 現状: Pattern2 rejection で FAIL(固定) - 期待: 修正後に Pattern1 fallback で PASS
This commit is contained in:
35
apps/tests/phase263_p0_pattern2_seg_min.hako
Normal file
35
apps/tests/phase263_p0_pattern2_seg_min.hako
Normal file
@ -0,0 +1,35 @@
|
||||
// Phase 263 P0: Pattern2 LoopBodyLocal "seg" 問題の最小再現テスト
|
||||
//
|
||||
// 目的:
|
||||
// - loop body で代入される seg 変数を Pattern2 が promote しようとして失敗する
|
||||
// - 現状: Pattern2 rejection で FAIL
|
||||
// - 期待: 修正後に Pattern1 fallback で PASS
|
||||
|
||||
static box Main {
|
||||
main() {
|
||||
local result = parse_segments()
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
// Pattern2 が検出するループ構造
|
||||
method parse_segments() {
|
||||
local i = 0
|
||||
local seg = ""
|
||||
|
||||
loop(i < 5) {
|
||||
seg = get_segment(i) // ← loop body で代入(ReadOnlySlot 契約違反)
|
||||
|
||||
if seg == "end" {
|
||||
break
|
||||
}
|
||||
|
||||
i = i + 1
|
||||
}
|
||||
|
||||
return i
|
||||
}
|
||||
|
||||
method get_segment(idx) {
|
||||
return "seg"
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../../common.sh"
|
||||
|
||||
APP_PATH="apps/tests/phase263_p0_pattern2_seg_min.hako"
|
||||
|
||||
run_vm_test "$APP_PATH" "phase263_p0_pattern2_seg_min"
|
||||
Reference in New Issue
Block a user