Files
hakorune/tools/pyvm_json_vectors_smoke.sh
Selfhosting Dev 94d95dfbcd 🚀 Break/Continue/Try-Catch構文のサポート追加とMIRループ制御強化
## 主な変更点

### 🎯 MIRループ制御の実装(根治対応)
- src/mir/loop_builder.rs: Break/Continue対応のループコンテキスト管理
  - ループのbreak/continueターゲットブロック追跡
  - ネストループの適切な処理
- src/mir/builder.rs: Break/Continue文のMIR生成実装
- src/tokenizer.rs: Break/Continue/Tryトークン認識追加

### 📝 セルフホストパーサーの拡張
- apps/selfhost-compiler/boxes/parser_box.nyash:
  - Stage-3: break/continue構文受理(no-op実装)
  - Stage-3: try-catch-finally構文受理(構文解析のみ)
  - エラー処理構文の将来対応準備

### 📚 ドキュメント更新
- 論文K(爆速事件簿): 45事例に更新(4件追加)
  - PyVM迂回路の混乱事件
  - Break/Continue無限ループ事件
  - EXE-first戦略の再発見
- 論文I(開発秘話): Day 38の重要決定追加

### 🧪 テストケース追加
- apps/tests/: ループ制御とPHIのテストケース
  - nested_loop_inner_break_isolated.nyash
  - nested_loop_inner_continue_isolated.nyash
  - loop_phi_one_sided.nyash
  - shortcircuit関連テスト

## 技術的詳細
- Break/ContinueをMIRレベルで適切に処理
- 無限ループ問題(CPU 99.9%暴走)の根本解決
- 将来の例外処理機能への準備

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 22:14:42 +09:00

42 lines
1.1 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
[[ "${NYASH_CLI_VERBOSE:-0}" == "1" ]] && set -x
ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
BIN="$ROOT_DIR/target/release/nyash"
if [[ ! -x "$BIN" ]]; then
(cd "$ROOT_DIR" && cargo build --release >/dev/null)
fi
VEC_DIR="$ROOT_DIR/tests/json_v0"
[[ -d "$VEC_DIR" ]] || { echo "No vectors at $VEC_DIR" >&2; exit 1; }
pass() { echo "$1" >&2; }
fail() { echo "$1" >&2; echo "$2" >&2; exit 1; }
run_vec() {
local base="$1"; shift
local expect_code="$1"; shift
local path="$VEC_DIR/$base.json"
[[ -f "$path" ]] || fail "$base (missing)" "Vector not found: $path"
set +e
OUT=$(cat "$path" | NYASH_PIPE_USE_PYVM=1 "$BIN" --ny-parser-pipe --backend vm 2>&1)
STATUS=$?
set -e
if [[ "$STATUS" == "$expect_code" ]]; then pass "$base"; else fail "$base" "$OUT"; fi
}
# Vectors: base name -> expected Result
run_vec arith 7
run_vec if_then_else 10
run_vec while_sum 3
run_vec logical_shortcircuit_and 0
run_vec logical_shortcircuit_or 0
run_vec method_string_length 3
run_vec logical_nested 1
run_vec string_chain 2
echo "All JSON v0 vectors PASS" >&2
exit 0