phase: 20.49 COMPLETE; 20.50 Flow+String minimal reps; 20.51 selfhost v0/v1 minimal (Option A/B); hv1-inline binop/unop/copy; docs + run_all + CURRENT_TASK -> 21.0
This commit is contained in:
@ -86,6 +86,7 @@ filter_noise() {
|
||||
| grep -v "^🔌 plugin host initialized" \
|
||||
| grep -v "^✅ plugin host fully configured" \
|
||||
| grep -v "Failed to load nyash.toml - plugins disabled" \
|
||||
| grep -v "^⚠️ Failed to load plugin config (hakorune.toml/nyash.toml) - plugins disabled" \
|
||||
| grep -v "^🚀 Nyash VM Backend - Executing file:" \
|
||||
| grep -v "^🚀 Hakorune VM Backend - Executing file:"
|
||||
}
|
||||
@ -178,7 +179,7 @@ run_nyash_vm() {
|
||||
if [ "$program" = "-c" ]; then
|
||||
local code="$1"
|
||||
shift
|
||||
local tmpfile="/tmp/nyash_test_$$.nyash"
|
||||
local tmpfile="/tmp/nyash_test_$$.hako"
|
||||
echo "$code" > "$tmpfile"
|
||||
# (shim removed) provider tag shortcut — hv1 inline is stable now
|
||||
# 軽量ASIFix(テスト用): ブロック終端の余剰セミコロンを寛容に除去
|
||||
@ -189,7 +190,7 @@ run_nyash_vm() {
|
||||
# Optional preinclude for include-based code
|
||||
local runfile="$tmpfile"
|
||||
if [ "${NYASH_PREINCLUDE:-0}" = "1" ] || [ "${HAKO_PREINCLUDE:-0}" = "1" ]; then
|
||||
local prefile="/tmp/nyash_pre_$$.nyash"
|
||||
local prefile="/tmp/nyash_pre_$$.hako"
|
||||
"$NYASH_ROOT/tools/dev/hako_preinclude.sh" "$tmpfile" "$prefile" >/dev/null || true
|
||||
runfile="$prefile"
|
||||
fi
|
||||
@ -197,6 +198,7 @@ run_nyash_vm() {
|
||||
if grep -q '^include\s\"' "$tmpfile" 2>/dev/null && [ "${NYASH_PREINCLUDE:-0}" != "1" ] && [ "${HAKO_PREINCLUDE:-0}" != "1" ]; then
|
||||
echo "[WARN] VM backend does not support include. Prefer using+alias, or set NYASH_PREINCLUDE=1 for dev." >&2
|
||||
fi
|
||||
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 \
|
||||
NYASH_VM_USE_PY="$USE_PYVM" NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||
@ -215,7 +217,7 @@ run_nyash_vm() {
|
||||
# Optional preinclude
|
||||
local runfile2="$program"
|
||||
if [ "${NYASH_PREINCLUDE:-0}" = "1" ] || [ "${HAKO_PREINCLUDE:-0}" = "1" ]; then
|
||||
local prefile2="/tmp/nyash_pre_$$.nyash"
|
||||
local prefile2="/tmp/nyash_pre_$$.hako"
|
||||
"$NYASH_ROOT/tools/dev/hako_preinclude.sh" "$program" "$prefile2" >/dev/null || true
|
||||
runfile2="$prefile2"
|
||||
fi
|
||||
@ -245,6 +247,7 @@ run_nyash_vm() {
|
||||
echo "[WARN] include is deprecated in 20.36+. Prefer using+alias. Preinclude is dev-only (NYASH_PREINCLUDE=1)." >&2
|
||||
fi
|
||||
fi
|
||||
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 \
|
||||
NYASH_VM_USE_PY="$USE_PYVM" NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||
@ -269,13 +272,21 @@ verify_mir_rc() {
|
||||
if [ "${HAKO_VERIFY_V1_FORCE_CORE:-0}" = "1" ]; then
|
||||
"$NYASH_BIN" --mir-json-file "$json_path" >/dev/null 2>&1; return $?
|
||||
fi
|
||||
# hv1 直行(NyashParserバイパス): vm.rs冒頭で NYASH_VERIFY_JSON を検知して MIR 実行
|
||||
local out_v1; out_v1=$(HAKO_V1_FLOW_TRACE=1 HAKO_V1_EXTERN_PROVIDER=1 HAKO_V1_DISPATCHER_FLOW=1 HAKO_V1_ALLOW_PHI_EXPERIMENT=1 \
|
||||
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 HAKO_ROUTE_HAKOVM=1 \
|
||||
NYASH_VERIFY_JSON="$(cat "$json_path")" \
|
||||
"$NYASH_BIN" --backend vm /dev/null 2>/dev/null | tr -d '\r' | awk '/^-?[0-9]+$/{n=$0} END{if(n!="") print n}')
|
||||
if [[ "$out_v1" =~ ^-?[0-9]+$ ]]; then
|
||||
local n=$out_v1; if [ $n -lt 0 ]; then n=$(( (n % 256 + 256) % 256 )); else n=$(( n % 256 )); fi; return $n
|
||||
# hv1 直行(main.rs 早期経路)。成功時は rc を採用、失敗時は Core にフォールバック。
|
||||
# ただしフロー検証(dispatcher flow / phi 実験)が有効な場合は Core を優先(hv1-inline は最小実装のため)。
|
||||
if [ "${HAKO_VERIFY_V1_FORCE_HAKOVM:-0}" != "1" ]; then
|
||||
local hv1_rc; hv1_rc=$(verify_v1_inline_file "$json_path" || true)
|
||||
if [[ "$hv1_rc" =~ ^-?[0-9]+$ ]]; then
|
||||
local n=$hv1_rc; if [ $n -lt 0 ]; then n=$(( (n % 256 + 256) % 256 )); else n=$(( n % 256 )); fi; return $n
|
||||
fi
|
||||
fi
|
||||
# 強制 hv1(-c ラッパ): NyVmDispatcherV1Box.run を直接呼び出して rc を取得
|
||||
if [ "${HAKO_VERIFY_V1_FORCE_HAKOVM:-0}" = "1" ]; then
|
||||
local hv1_rc_force; hv1_rc_force=$(verify_v1_inline_file "$json_path" || true)
|
||||
if [[ "$hv1_rc_force" =~ ^-?[0-9]+$ ]]; then
|
||||
local n=$hv1_rc_force; if [ $n -lt 0 ]; then n=$(( (n % 256 + 256) % 256 )); else n=$(( n % 256 )); fi; return $n
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
# No include+preinclude fallback succeeded → Core にフォールバック
|
||||
"$NYASH_BIN" --mir-json-file "$json_path" >/dev/null 2>&1
|
||||
@ -348,7 +359,7 @@ static box Main { method main(args) {
|
||||
HCODE
|
||||
)
|
||||
code="${code/__MIR_JSON__/$json_literal3}"
|
||||
local tmpwrap="/tmp/hako_core_wrap_$$.nyash"
|
||||
local tmpwrap="/tmp/hako_core_wrap_$$.hako"
|
||||
echo "$code" > "$tmpwrap"
|
||||
NYASH_PREINCLUDE=1 run_nyash_vm "$tmpwrap" >/dev/null 2>&1; local r=$?; rm -f "$tmpwrap"; return $r
|
||||
fi
|
||||
@ -589,7 +600,7 @@ run_nyash_llvm() {
|
||||
if [ "$program" = "-c" ]; then
|
||||
local code="$1"
|
||||
shift
|
||||
local tmpfile="/tmp/nyash_test_$$.nyash"
|
||||
local tmpfile="/tmp/nyash_test_$$.hako"
|
||||
echo "$code" > "$tmpfile"
|
||||
# 軽量ASIFix(テスト用): ブロック終端の余剰セミコロンを寛容に除去
|
||||
if [ "${SMOKES_ASI_STRIP_SEMI:-1}" = "1" ]; then
|
||||
@ -714,3 +725,48 @@ output_junit() {
|
||||
</testsuite>
|
||||
EOF
|
||||
}
|
||||
|
||||
# v1 JSON 正規化(オブジェクトキー順序ソート、配列順は保持)→ SHA256 ハッシュ
|
||||
v1_normalized_hash() {
|
||||
local json_path="$1"
|
||||
if [ ! -f "$json_path" ]; then
|
||||
echo "[FAIL] v1_normalized_hash: json not found: $json_path" >&2
|
||||
return 2
|
||||
fi
|
||||
if ! command -v jq >/dev/null 2>&1; then
|
||||
echo "[FAIL] v1_normalized_hash: jq required" >&2
|
||||
return 2
|
||||
fi
|
||||
local canon
|
||||
canon=$(jq -S -c . < "$json_path") || return 1
|
||||
printf "%s" "$canon" | sha256sum | awk '{print $1}'
|
||||
}
|
||||
|
||||
# 2つの v1 JSON ファイルの正規化ハッシュを比較(等しければ0)
|
||||
compare_v1_hash() {
|
||||
local a="$1"; local b="$2"
|
||||
local ha hb
|
||||
ha=$(v1_normalized_hash "$a" || true)
|
||||
hb=$(v1_normalized_hash "$b" || true)
|
||||
if [ -z "$ha" ] || [ -z "$hb" ]; then
|
||||
return 2
|
||||
fi
|
||||
[ "$ha" = "$hb" ]
|
||||
}
|
||||
# Run hv1 inline (early route) and return numeric rc (0-255). Returns non-zero exit on failure to execute.
|
||||
verify_v1_inline_file() {
|
||||
local json_path="$1"
|
||||
if [ ! -f "$json_path" ]; then
|
||||
echo "[FAIL] verify_v1_inline_file: json not found: $json_path" >&2
|
||||
return 2
|
||||
fi
|
||||
local out
|
||||
out=$(HAKO_ROUTE_HAKOVM=1 HAKO_VERIFY_V1_FORCE_HAKOVM=1 NYASH_VERIFY_JSON="$(cat "$json_path")" \
|
||||
"$NYASH_BIN" --backend vm /dev/null 2>/dev/null | tr -d '\r' | awk '/^-?[0-9]+$/{n=$0} END{if(n!="") print n}')
|
||||
if [[ "$out" =~ ^-?[0-9]+$ ]]; then
|
||||
# echo numeric rc and return success; caller normalizes/returns as exit code
|
||||
echo "$out"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user