Stage‑B + Bridge v1 tests and docs sweep

- Add opt-in negative canary: canonicalize_closure_captures_negative_vm (v1 bridge Closure malformed captures)
- Add opt-in Stage‑B canary: stageb_bundle_alias_table_bad_vm (malformed alias table fails)
- README.md/ja: replace hardcoded ./target/release/nyash with  (branding/prefs)
- Keep Stage‑B heavy tests opt-in (SMOKES_ENABLE_STAGEB); quick remains green
This commit is contained in:
nyash-codex
2025-11-02 17:54:35 +09:00
parent dd6876e1c6
commit b988d309f0
4 changed files with 84 additions and 5 deletions

View File

@ -272,7 +272,7 @@ $NYASH_BIN --run-task smoke_obj_array
- `NYASH_LLVM_USE_HARNESS=1` - `NYASH_LLVM_USE_HARNESS=1`
- `NYASH_NY_LLVM_COMPILER=$NYASH_ROOT/target/release/ny-llvmc` - `NYASH_NY_LLVM_COMPILER=$NYASH_ROOT/target/release/ny-llvmc`
- `NYASH_EMIT_EXE_NYRT=$NYASH_ROOT/target/release` - `NYASH_EMIT_EXE_NYRT=$NYASH_ROOT/target/release`
- 例: `NYASH_LLVM_USE_HARNESS=1 NYASH_NY_LLVM_COMPILER=target/release/ny-llvmc NYASH_EMIT_EXE_NYRT=target/release ./target/release/nyash --backend llvm apps/ny-llvm-smoke/main.nyash` - 例: `NYASH_LLVM_USE_HARNESS=1 NYASH_NY_LLVM_COMPILER=target/release/ny-llvmc NYASH_EMIT_EXE_NYRT=target/release $NYASH_BIN --backend llvm apps/ny-llvm-smoke/main.nyash`
### DebugHub かんたんガイド ### DebugHub かんたんガイド
- 有効化: `NYASH_DEBUG_ENABLE=1` - 有効化: `NYASH_DEBUG_ENABLE=1`
@ -410,7 +410,7 @@ cargo build --release --features cranelift-jit
# 最初のプログラムを実行 # 最初のプログラムを実行
echo 'print("Hello Nyash!")' > hello.nyash echo 'print("Hello Nyash!")' > hello.nyash
./target/release/nyash hello.nyash $NYASH_BIN hello.nyash
``` ```
### Windows ### Windows

View File

@ -25,7 +25,7 @@ Execution Status (Feature Additions Pause)
Quick pointers Quick pointers
- Emit object with harness: set `NYASH_LLVM_USE_HARNESS=1` and `NYASH_LLVM_OBJ_OUT=<path>` (defaults in tools use `tmp/`). - Emit object with harness: set `NYASH_LLVM_USE_HARNESS=1` and `NYASH_LLVM_OBJ_OUT=<path>` (defaults in tools use `tmp/`).
- Run PyVM: `NYASH_VM_USE_PY=1 ./target/release/nyash --backend vm apps/APP/main.nyash`. - Run PyVM: `NYASH_VM_USE_PY=1 $NYASH_BIN --backend vm apps/APP/main.nyash`.
Dev shortcuts (Operator Boxes & JSON smokes) Dev shortcuts (Operator Boxes & JSON smokes)
- Oneshot JSON verification (dev, Operator Boxes ON): `./tools/opbox-json.sh` - Oneshot JSON verification (dev, Operator Boxes ON): `./tools/opbox-json.sh`
@ -100,7 +100,7 @@ Layer guard (one-way deps: origin→observe→rewrite)
Profiles (quick) Profiles (quick)
- `--profile dev` → Macros ON (strict), PyVM dev向け設定を適用必要に応じて環境で上書き可 - `--profile dev` → Macros ON (strict), PyVM dev向け設定を適用必要に応じて環境で上書き可
- `--profile lite` → Macros OFF の軽量実行 - `--profile lite` → Macros OFF の軽量実行
- 例: `./target/release/nyash --profile dev --backend vm apps/tests/ternary_basic.nyash` - 例: `$NYASH_BIN --profile dev --backend vm apps/tests/ternary_basic.nyash`
Specs & Constraints Specs & Constraints
- Invariants (must-hold): `docs/reference/invariants.md` - Invariants (must-hold): `docs/reference/invariants.md`
@ -118,7 +118,7 @@ Specs & Constraints
<a id="self-hosting"></a> <a id="self-hosting"></a>
## 🧪 SelfHosting (Dev Focus) ## 🧪 SelfHosting (Dev Focus)
- Guide: `docs/how-to/self-hosting.md` - Guide: `docs/how-to/self-hosting.md`
- Minimal E2E: `./target/release/nyash --backend vm apps/selfhost-minimal/main.nyash` - Minimal E2E: `$NYASH_BIN --backend vm apps/selfhost-minimal/main.nyash`
- Smokes: `bash tools/jit_smoke.sh` / `bash tools/selfhost_vm_smoke.sh` - Smokes: `bash tools/jit_smoke.sh` / `bash tools/selfhost_vm_smoke.sh`
- JSON (Operator Boxes, dev): `./tools/opbox-json.sh` / `./tools/opbox-quick.sh` - JSON (Operator Boxes, dev): `./tools/opbox-json.sh` / `./tools/opbox-quick.sh`
- Makefile: `make run-minimal`, `make smoke-selfhost` - Makefile: `make run-minimal`, `make smoke-selfhost`

View File

@ -0,0 +1,45 @@
#!/bin/bash
# canonicalize_closure_captures_negative_vm.sh — v1 bridge Closure captures (malformed) should fail
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
if ROOT_GIT=$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null); then
ROOT="$ROOT_GIT"
else
ROOT="$(cd "$SCRIPT_DIR/../../../../../../../../.." && pwd)"
fi
source "$ROOT/tools/smokes/v2/lib/test_runner.sh"
require_env || exit 2
# Opt-in with SMOKES_ENABLE_BRIDGE_CLOSURE=1
if [ "${SMOKES_ENABLE_BRIDGE_CLOSURE:-0}" != "1" ]; then
test_skip canonicalize_closure_captures_negative_vm "opt-in (SMOKES_ENABLE_BRIDGE_CLOSURE=1)"
exit 0
fi
# Malformed v1 JSON: Closure.captures with wrong element types (strings)
json_path="/tmp/ny_v1_closure_caps_bad_$$.json"
cat >"$json_path" <<'JSON'
{"schema_version":"1.0","functions":[{"name":"main","blocks":[{"id":0,"instructions":[
{"op":"mir_call","dst":3,
"callee":{"type":"Closure","func":1,"captures":["a","b"]},
"args":[1,2]},
{"op":"ret"}
]}]}]}
JSON
set +e
HAKO_NYVM_V1_DOWNCONVERT=1 "$NYASH_BIN" --json-file "$json_path" >/dev/null 2>&1
rc=$?
set -e
rm -f "$json_path"
if [ "$rc" != 0 ]; then
echo "[PASS] canonicalize_closure_captures_negative_vm"
exit 0
else
echo "[FAIL] canonicalize_closure_captures_negative_vm (unexpected rc=0)" >&2
exit 1
fi

View File

@ -0,0 +1,34 @@
#!/bin/bash
# stageb_bundle_alias_table_bad_vm.sh — StageB: malformed alias table should fail (optin)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
if ROOT_GIT=$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null); then
ROOT="$ROOT_GIT"
else
ROOT="$(cd "$SCRIPT_DIR/../../../../../../../../.." && pwd)"
fi
source "$ROOT/tools/smokes/v2/lib/test_runner.sh"
source "$ROOT/tools/smokes/v2/lib/stageb_helpers.sh"
require_env || exit 2
if [ "${SMOKES_ENABLE_STAGEB:-0}" != "1" ]; then
echo "[SKIP] stageb_bundle_alias_table_bad_vm (SMOKES_ENABLE_STAGEB=1 to enable)"
exit 0
fi
main='static box Main { method main(args) { return 0 } }'
# Malformed table: missing colon; empty name/code entries
export HAKO_BUNDLE_ALIAS_TABLE='U1|||BadEntryNoColon|||
:codeOnly|||NameOnly:'
if json=$(stageb_compile_to_json_with_require "$main" "U1"); then
echo "[FAIL] stageb_bundle_alias_table_bad_vm (unexpected success)" >&2
test -f "$json" && rm -f "$json"
exit 1
else
echo "[PASS] stageb_bundle_alias_table_bad_vm"
exit 0
fi