Phase 25.1b: Step3完了(LoopForm対応)
Step3実装内容(LoopForm → MIR導線確立): - FuncBodyBasicLowerBox._try_lower_loop追加: - Loop判定 → LowerLoopSumBcBox → LowerLoopSimpleBox の順に試行 - 成功時は_rebindで関数名をBox.method/arityに付け替え - 失敗時は[builder/funcs:unsupported:loopform]でFail-Fast - lowerメソッド冒頭でLoop優先処理: - Loop含む場合は_try_lower_loopを呼び、成功/失敗で明確に分岐 - Loopが無い場合のみ既存のLocal/If/Return処理に進む - PHI地獄防止ポリシー徹底: - FuncBodyBasicLowerBox/FuncLowering側でPHIやキャリアを直接いじらない - LoopForm制約外は必ずタグ付きでFail-Fast(Rust providerに退避可能) ドキュメント更新: - Phase 25.1b README: Step3をinitial-implementedに更新 - builder README: [builder/funcs:unsupported:loopform]タグ追加 - CURRENT_TASK.md: Step3進捗記録 スモークテスト: - selfhost_mir_loopform_basic_vm.sh追加(基本構造実装済み) - defs生成経路の詳細調整は継続タスク Next: Step4(MethodCall/ExternCall対応) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
# selfhost_mir_loopform_basic_vm.sh
|
||||
# - Canary for Phase 25.1b Step3: ensure FuncBodyBasicLowerBox can delegate
|
||||
# LoopForm-normalized loops to LowerLoopSimpleBox/LowerLoopSumBcBox.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
ROOT_DIR="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || (cd "$SCRIPT_DIR/../../../../../../.." && pwd))"
|
||||
|
||||
# Create a minimal .hako file with a simple counting loop
|
||||
TEST_HAKO="$(mktemp --suffix .hako)"
|
||||
cat > "$TEST_HAKO" <<'HAKO'
|
||||
static box TestBox {
|
||||
count() {
|
||||
local i = 0
|
||||
loop(i < 10) {
|
||||
i = i + 1
|
||||
}
|
||||
return i
|
||||
}
|
||||
}
|
||||
|
||||
static box Main {
|
||||
main() {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
HAKO
|
||||
|
||||
OUT_MIR="$(mktemp --suffix .json)"
|
||||
LOG_OUT="$(mktemp --suffix .log)"
|
||||
trap 'rm -f "$TEST_HAKO" "$OUT_MIR" "$LOG_OUT" || true' EXIT
|
||||
|
||||
set +e
|
||||
HAKO_SELFHOST_BUILDER_FIRST=1 HAKO_MIR_BUILDER_FUNCS=1 HAKO_SELFHOST_TRACE=1 NYASH_JSON_ONLY=1 \
|
||||
bash "$ROOT_DIR/tools/hakorune_emit_mir.sh" "$TEST_HAKO" "$OUT_MIR" >"$LOG_OUT" 2>&1
|
||||
rc=$?
|
||||
set -e
|
||||
|
||||
# Check logs for LoopForm lower tags
|
||||
if ! grep -q "\[funcs/basic:loop\." "$LOG_OUT"; then
|
||||
echo "[FAIL] selfhost_mir_loopform_basic_vm (no [funcs/basic:loop.*] tag found)" >&2
|
||||
echo "=== LOG OUTPUT ===" >&2
|
||||
cat "$LOG_OUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check MIR(JSON) was generated
|
||||
if [ $rc -ne 0 ] || [ ! -s "$OUT_MIR" ]; then
|
||||
echo "[FAIL] selfhost_mir_loopform_basic_vm (MIR generation failed rc=$rc)" >&2
|
||||
echo "=== LOG OUTPUT ===" >&2
|
||||
cat "$LOG_OUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[PASS] selfhost_mir_loopform_basic_vm (LoopForm lower delegated successfully)"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user