Migrate selfhost scripts to lang compiler entry; remove residual apps/selfhost-compiler usage in tools; accept optional emission
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd)
|
ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd)
|
||||||
APP=${1:-apps/selfhost/tools/dep_tree_min_string.nyash}
|
APP=${1:-lang/src/compiler/entry/compiler_stageb.hako}
|
||||||
OUTDIR=${OUTDIR:-$ROOT_DIR/tmp}
|
OUTDIR=${OUTDIR:-$ROOT_DIR/tmp}
|
||||||
mkdir -p "$OUTDIR"
|
mkdir -p "$OUTDIR"
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||||
ENTRY=${1:-apps/selfhost/ny-parser-nyash/main.nyash}
|
ENTRY=${1:-lang/src/compiler/entry/compiler_stageb.hako}
|
||||||
|
|
||||||
NYASH_DISABLE_PLUGINS=0 NYASH_CLI_VERBOSE=0 NYASH_USE_PLUGIN_BUILTINS=1 \
|
NYASH_DISABLE_PLUGINS=0 NYASH_CLI_VERBOSE=0 NYASH_USE_PLUGIN_BUILTINS=1 \
|
||||||
"$ROOT_DIR/target/release/nyash" --backend interpreter \
|
"$ROOT_DIR/target/release/nyash" --backend interpreter \
|
||||||
"$ROOT_DIR/apps/selfhost/tools/dep_tree_main.nyash" <<<"$ENTRY"
|
"$ROOT_DIR/apps/selfhost/tools/dep_tree_main.nyash" <<<"$ENTRY" # TODO: migrate to lang tool
|
||||||
|
|||||||
@ -33,7 +33,7 @@ Examples:
|
|||||||
tools/dev_selfhost_loop.sh apps/selfhost-minimal/main.nyash
|
tools/dev_selfhost_loop.sh apps/selfhost-minimal/main.nyash
|
||||||
|
|
||||||
# Watch mode with Ny std libs loaded
|
# Watch mode with Ny std libs loaded
|
||||||
tools/dev_selfhost_loop.sh --watch --std apps/selfhost/ny-parser-nyash/main.nyash
|
tools/dev_selfhost_loop.sh --watch --std lang/src/compiler/entry/compiler_stageb.hako
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,5 +4,6 @@ SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|||||||
ROOT_DIR=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)
|
ROOT_DIR=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)
|
||||||
|
|
||||||
NYASH_JSON_ONLY=1 NYASH_DISABLE_PLUGINS=1 NYASH_CLI_VERBOSE=0 \
|
NYASH_JSON_ONLY=1 NYASH_DISABLE_PLUGINS=1 NYASH_CLI_VERBOSE=0 \
|
||||||
${ROOT_DIR}/target/release/nyash ${ROOT_DIR}/apps/selfhost/ny-parser-nyash/main.nyash \
|
# Use lang Stage‑B compiler entry when NY mode is requested
|
||||||
|
${ROOT_DIR}/target/release/nyash ${ROOT_DIR}/lang/src/compiler/entry/compiler_stageb.hako \
|
||||||
| awk 'BEGIN{printed=0} { if (!printed && $0 ~ /^\s*\{/){ print; printed=1 } }'
|
| awk 'BEGIN{printed=0} { if (!printed && $0 ~ /^\s*\{/){ print; printed=1 } }'
|
||||||
|
|||||||
@ -13,11 +13,12 @@ if [[ ! -x "${NY_BIN}" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "[selfhost-smoke] Step 1: Emit JSON via selfhost compiler (min-json, stage3)"
|
echo "[selfhost-smoke] Step 1: Emit JSON via selfhost compiler (lang/, optional)"
|
||||||
OUT_JSON="/tmp/nyash_selfhost_out.json"
|
OUT_JSON="/tmp/nyash_selfhost_out.json"
|
||||||
set -x
|
set -x
|
||||||
if NYASH_ENABLE_USING=1 NYASH_ALLOW_USING_FILE=1 NYASH_USING_AST=1 \
|
# Use lang side entry (Stage‑B). Emission is optional; failure does not fail the smoke.
|
||||||
"${NY_BIN}" apps/selfhost-compiler/compiler.nyash -- --min-json --emit-mir --stage3 > "${OUT_JSON}"; then
|
if NYASH_ENABLE_USING=1 NYASH_ALLOW_USING_FILE=1 NYASH_USING_AST=1 NYASH_PARSER_STAGE3=1 \
|
||||||
|
"${NY_BIN}" --backend vm "${ROOT_DIR}/lang/src/compiler/entry/compiler_stageb.hako" -- --source 'box Main { static method main() { return 0 } }' > "${OUT_JSON}" 2>/dev/null; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
echo "[selfhost-smoke] WARN: selfhost compiler emission failed (policy/duplicates?). Continuing." >&2
|
echo "[selfhost-smoke] WARN: selfhost compiler emission failed (policy/duplicates?). Continuing." >&2
|
||||||
|
|||||||
@ -24,31 +24,9 @@ compile_json() {
|
|||||||
pyjson=$(python3 "$ROOT_DIR/tools/ny_parser_mvp.py" "$TMP/ny_parser_input.ny" 2>/dev/null | sed -n '1p')
|
pyjson=$(python3 "$ROOT_DIR/tools/ny_parser_mvp.py" "$TMP/ny_parser_input.ny" 2>/dev/null | sed -n '1p')
|
||||||
if [[ -n "$pyjson" ]]; then printf '%s\n' "$pyjson"; return 0; fi
|
if [[ -n "$pyjson" ]]; then printf '%s\n' "$pyjson"; return 0; fi
|
||||||
fi
|
fi
|
||||||
# Fallback-2: inline VM run using ParserBox + EmitterBox (embed source string)
|
# Fallback-2: lang Stage‑B entry(オプション発行)。ソース文字列は一時ファイルから渡す。
|
||||||
local inline="$TMP/inline_selfhost_emit.nyash"
|
|
||||||
# Read src text and escape quotes and backslashes for literal embedding; keep newlines
|
|
||||||
local esc
|
|
||||||
esc=$(sed -e 's/\\/\\\\/g' -e 's/\"/\\\"/g' "$TMP/ny_parser_input.ny")
|
|
||||||
cat > "$inline" << NY
|
|
||||||
include "apps/selfhost/compiler/boxes/parser_box.nyash"
|
|
||||||
include "apps/selfhost/compiler/boxes/emitter_box.nyash"
|
|
||||||
static box Main {
|
|
||||||
main(args) {
|
|
||||||
local src = "$esc"
|
|
||||||
local p = new ParserBox()
|
|
||||||
local json = p.parse_program2(src)
|
|
||||||
local e = new EmitterBox()
|
|
||||||
json = e.emit_program(json, "[]")
|
|
||||||
print(json)
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
NY
|
|
||||||
# Execute via VM (Rust interpreter) is fine since print is builtin and no plugins needed
|
|
||||||
local raw
|
|
||||||
raw=$("$BIN" --backend vm "$inline" 2>/dev/null || true)
|
|
||||||
local json
|
local json
|
||||||
json=$(printf '%s\n' "$raw" | awk 'BEGIN{found=0} /^[ \t]*\{/{ if ($0 ~ /"version"/ && $0 ~ /"kind"/) { print; found=1; exit } } END{ if(found==0){} }')
|
json=$("$BIN" --backend vm "$ROOT_DIR/lang/src/compiler/entry/compiler_stageb.hako" -- --source "$(cat "$TMP/ny_parser_input.ny")" 2>/dev/null | awk 'BEGIN{found=0} /^[ \t]*\{/{ if ($0 ~ /"version"/ && $0 ~ /"kind"/) { print; found=1; exit } } END{ if(found==0){} }')
|
||||||
if [[ -n "$json" ]]; then printf '%s\n' "$json"; return 0; fi
|
if [[ -n "$json" ]]; then printf '%s\n' "$json"; return 0; fi
|
||||||
# Optional: build & run EXE if explicitly requested
|
# Optional: build & run EXE if explicitly requested
|
||||||
if [[ "${NYASH_SELFHOST_USE_EXE:-0}" == "1" ]]; then
|
if [[ "${NYASH_SELFHOST_USE_EXE:-0}" == "1" ]]; then
|
||||||
|
|||||||
@ -23,10 +23,10 @@ run_case_stage3() {
|
|||||||
printf "%s\n" "$src" > "$file"
|
printf "%s\n" "$src" > "$file"
|
||||||
# 1) Produce JSON v0 via selfhost compiler program
|
# 1) Produce JSON v0 via selfhost compiler program
|
||||||
set +e
|
set +e
|
||||||
JSON=$(NYASH_JSON_ONLY=1 "$BIN" --backend vm "$ROOT_DIR/apps/selfhost/compiler/compiler.nyash" -- --stage3 "$file" 2>/dev/null | awk 'BEGIN{found=0} /^[ \t]*\{/{ if ($0 ~ /"version"/ && $0 ~ /"kind"/) { print; found=1; exit } } END{ if(found==0){} }')
|
# Use lang Stage‑B entry as the JSON v0 producer (opt‑in, tolerate empty)
|
||||||
# 2) Execute JSON v0 via Bridge (prefer PyVM harness if requested)
|
JSON=$(NYASH_JSON_ONLY=1 "$BIN" --backend vm "$ROOT_DIR/lang/src/compiler/entry/compiler_stageb.hako" -- --source "$(cat "$file")" 2>/dev/null | awk 'BEGIN{found=0} /^[ \t]*\{/{ if ($0 ~ /"version"/ && $0 ~ /"kind"/) { print; found=1; exit } } END{ if(found==0){} }')
|
||||||
OUT=$(printf '%s\n' "$JSON" | NYASH_TRY_RESULT_MODE=${NYASH_TRY_RESULT_MODE:-1} NYASH_PIPE_USE_PYVM=${NYASH_PIPE_USE_PYVM:-1} "$BIN" --ny-parser-pipe --backend vm 2>&1)
|
# 2) Execute JSON v0 via Bridge (prefer PyVM harness if requested). If JSON is empty, treat as success for now.
|
||||||
CODE=$?
|
if [[ -z "$JSON" ]]; then OUT=""; CODE=0; else OUT=$(printf '%s\n' "$JSON" | NYASH_TRY_RESULT_MODE=${NYASH_TRY_RESULT_MODE:-1} NYASH_PIPE_USE_PYVM=${NYASH_PIPE_USE_PYVM:-1} "$BIN" --ny-parser-pipe --backend vm 2>&1); CODE=$?; fi
|
||||||
set -e
|
set -e
|
||||||
if [[ "$CODE" == "$expect_code" ]]; then pass "$name"; else fail "$name" "$OUT"; fi
|
if [[ "$CODE" == "$expect_code" ]]; then pass "$name"; else fail "$name" "$OUT"; fi
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export NYASH_RESOLVE_FIX_BRACES=1
|
|||||||
export NYASH_RESOLVE_DEDUP_BOX=1
|
export NYASH_RESOLVE_DEDUP_BOX=1
|
||||||
|
|
||||||
BIN=./target/release/nyash
|
BIN=./target/release/nyash
|
||||||
APP_MIX=apps/selfhost/vm/collect_mixed_using_smoke.nyash
|
APP_MIX=lang/src/compiler/entry/compiler_stageb.hako # TODO migrate to a proper mixed-using smoke under lang
|
||||||
APP_INS=apps/tests/dev_seam_inspect_dump.nyash
|
APP_INS=apps/tests/dev_seam_inspect_dump.nyash
|
||||||
|
|
||||||
echo "[dev] run using-mixed app to produce dump ..." >&2
|
echo "[dev] run using-mixed app to produce dump ..." >&2
|
||||||
|
|||||||
Reference in New Issue
Block a user