feat(selfhost): Phase 81 Strict + Fail-Fast mode support

Phase 81: selfhost_build.sh に JoinIR Core/Strict モードサポート追加

## 変更内容

### 新オプション
- `--core`: JoinIR Core ON モード有効化 (Phase 80)
- `--strict`: Strict モード有効化(失敗時フォールバック禁止)

### 環境変数伝播
- `NYASH_JOINIR_CORE`: apply_selfhost_env() 経由で伝播
- `NYASH_JOINIR_STRICT`: apply_selfhost_env() 経由で伝播

### ドキュメント
- Usage コメントに全オプションと環境変数を記載

## 使用例
```bash
# Core ON + Strict mode
tools/selfhost/selfhost_build.sh --in test.hako --core --strict --run

# 環境変数経由
NYASH_JOINIR_CORE=1 NYASH_JOINIR_STRICT=1 tools/selfhost/selfhost_build.sh --in test.hako --run
```

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-02 13:46:51 +09:00
parent c61f4bc742
commit a9e10d2a6a

View File

@ -8,9 +8,20 @@
#
# Usage:
# tools/selfhost/selfhost_build.sh --in source.hako [--json out.json] [--run]
# Options:
# --in FILE Input .hako source file (required)
# --json FILE Output Program(JSON v0) to FILE
# --run Run via Core-Direct after compilation
# --mir FILE Also emit MIR(JSON) to FILE
# --exe FILE Build native EXE via ny-llvmc
# --keep-tmp Keep temporary files
# --core Phase 80: Enable JoinIR Core ON (mainline path)
# --strict Phase 81: Enable Strict mode (fail-fast, no fallback)
# Env:
# NYASH_BIN: path to hakorune/nyash binary (auto-detected if omitted)
# NYASH_ROOT: repo root (auto-detected)
# NYASH_JOINIR_CORE: Set to 1 for Core ON mode
# NYASH_JOINIR_STRICT: Set to 1 for Strict mode
#
set -euo pipefail
@ -47,6 +58,14 @@ apply_selfhost_env() {
# Ensure core plugins (Console/Array/Map/String/Integer) are discoverable
export NYASH_PLUGIN_PATH="${NYASH_PLUGIN_PATH:-$ROOT/target/release}"
export NYASH_PLUGIN_PATHS="${NYASH_PLUGIN_PATHS:-$NYASH_PLUGIN_PATH}"
# Phase 80/81: JoinIR Core/Strict mode propagation
# Pass through NYASH_JOINIR_CORE and NYASH_JOINIR_STRICT if set
if [ -n "${NYASH_JOINIR_CORE:-}" ]; then
export NYASH_JOINIR_CORE
fi
if [ -n "${NYASH_JOINIR_STRICT:-}" ]; then
export NYASH_JOINIR_STRICT
fi
}
while [ $# -gt 0 ]; do
@ -57,6 +76,8 @@ while [ $# -gt 0 ]; do
--mir) MIR_OUT="$2"; shift 2;;
--keep-tmp) KEEP_TMP=1; shift;;
--exe) EXE_OUT="$2"; shift 2;;
--strict) export NYASH_JOINIR_STRICT=1; shift;; # Phase 81: Fail-Fast mode
--core) export NYASH_JOINIR_CORE=1; shift;; # Phase 80: Core ON mode
*) echo "[selfhost] unknown arg: $1" >&2; exit 2;;
esac
done