feat(llvm): Phase 97 - Call/PHI/Plugin強化 + リファクタリング準備
## 概要 LLVM backend のCall処理、PHI wiring、Plugin loader を強化。 次のリファクタリング(箱化モジュール化)のための準備も含む。 ## 変更内容 ### LLVM Call処理強化 - `mir_call/__init__.py`: Call ルーティングロジック改善 - `mir_call/global_call.py`: print処理の marshal強化 - `mir_call/method_call.py`: メソッド呼び出し処理改善 - `boxcall.py`: BoxCall処理改善 ### PHI処理強化 - `phi_manager.py`: PHI管理改善 - `phi_wiring/wiring.py`: PHI配線ロジック強化(+17行) - `phi_wiring/tagging.py`: Type tagging改善 - `resolver.py`: Value解決ロジック強化(+34行) ### Copy伝播 - `copy.py`: Copy命令のType tag伝播追加(+10行) ### Plugin loader強化 - `library.rs`: エラー出力改善、[plugin/missing]ログ追加(+34行) - fail-fast強化 ### テスト - `phase97_json_loader_escape_llvm_exe.sh`: Phase 97 E2Eテスト追加 - `phase97_next_non_ws_llvm_exe.sh`: Phase 97 E2Eテスト追加 ### その他 - `nyash_kernel/lib.rs`: Kernel側の改善(+23行) ## 統計 - 14ファイル変更 - +256行 / -53行 = +203 net ## 次のリファクタリング準備 以下の箇所がリファクタリング対象として識別済み: 1. Call ルーティング箱の明文化 2. print の marshal 箱 3. TypeFacts/Tagging 箱の一本化 4. PHI Snapshot 契約のSSOT 5. Plugin loader のエラー出力統合 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -20,8 +20,33 @@ fi
|
||||
|
||||
FILEBOX_SO="$NYASH_ROOT/plugins/nyash-filebox-plugin/libnyash_filebox_plugin.so"
|
||||
MAPBOX_SO="$NYASH_ROOT/plugins/nyash-map-plugin/libnyash_map_plugin.so"
|
||||
|
||||
# Phase 98 P0: Ensure required dynamic plugin artifacts exist and are loadable.
|
||||
echo "[INFO] Ensuring plugin artifacts (FileBox/MapBox)"
|
||||
if ! bash "$NYASH_ROOT/tools/plugins/build-all.sh" nyash-filebox-plugin nyash-map-plugin >/dev/null; then
|
||||
echo "[FAIL] tools/plugins/build-all.sh failed for FileBox/MapBox"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f "$FILEBOX_SO" ] || [ ! -f "$MAPBOX_SO" ]; then
|
||||
test_skip "Required plugins not found (FileBox/MapBox)"; exit 0
|
||||
echo "[FAIL] Required plugin artifacts still missing after build-all (FileBox/MapBox)"
|
||||
echo "[INFO] FileBox: $FILEBOX_SO"
|
||||
echo "[INFO] MapBox: $MAPBOX_SO"
|
||||
exit 1
|
||||
fi
|
||||
if ! python3 - <<PY 2>/dev/null; then
|
||||
import ctypes
|
||||
ctypes.CDLL(r"$FILEBOX_SO")
|
||||
ctypes.CDLL(r"$MAPBOX_SO")
|
||||
print("OK")
|
||||
PY
|
||||
echo "[FAIL] Plugin dlopen check failed for FileBox/MapBox"
|
||||
python3 - <<PY 2>&1 | tail -n 80
|
||||
import ctypes
|
||||
ctypes.CDLL(r"$FILEBOX_SO")
|
||||
ctypes.CDLL(r"$MAPBOX_SO")
|
||||
print("OK")
|
||||
PY
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$NYASH_ROOT/tmp"
|
||||
@ -32,7 +57,7 @@ OUTPUT_EXE="$NYASH_ROOT/tmp/phase97_json_loader_escape_llvm_exe"
|
||||
echo "[INFO] Building: $INPUT_HAKO → $OUTPUT_EXE"
|
||||
|
||||
BUILD_LOG="/tmp/phase97_json_loader_escape_build.log"
|
||||
if ! env NYASH_DISABLE_PLUGINS=1 "$NYASH_ROOT/tools/build_llvm.sh" "$INPUT_HAKO" -o "$OUTPUT_EXE" 2>&1 | tee "$BUILD_LOG"; then
|
||||
if ! env NYASH_DISABLE_PLUGINS=0 "$NYASH_ROOT/tools/build_llvm.sh" "$INPUT_HAKO" -o "$OUTPUT_EXE" 2>&1 | tee "$BUILD_LOG"; then
|
||||
echo "[FAIL] build_llvm.sh failed"
|
||||
tail -n 80 "$BUILD_LOG"
|
||||
exit 1
|
||||
@ -47,7 +72,7 @@ fi
|
||||
echo "[INFO] Executing: $OUTPUT_EXE"
|
||||
|
||||
set +e
|
||||
OUTPUT=$(timeout "${RUN_TIMEOUT_SECS:-10}" env NYASH_DISABLE_PLUGINS=1 "$OUTPUT_EXE" 2>&1)
|
||||
OUTPUT=$(timeout "${RUN_TIMEOUT_SECS:-10}" env NYASH_DISABLE_PLUGINS=0 "$OUTPUT_EXE" 2>&1)
|
||||
EXIT_CODE=$?
|
||||
set -e
|
||||
|
||||
|
||||
@ -20,8 +20,33 @@ fi
|
||||
|
||||
FILEBOX_SO="$NYASH_ROOT/plugins/nyash-filebox-plugin/libnyash_filebox_plugin.so"
|
||||
MAPBOX_SO="$NYASH_ROOT/plugins/nyash-map-plugin/libnyash_map_plugin.so"
|
||||
|
||||
# Phase 98 P0: Ensure required dynamic plugin artifacts exist and are loadable.
|
||||
echo "[INFO] Ensuring plugin artifacts (FileBox/MapBox)"
|
||||
if ! bash "$NYASH_ROOT/tools/plugins/build-all.sh" nyash-filebox-plugin nyash-map-plugin >/dev/null; then
|
||||
echo "[FAIL] tools/plugins/build-all.sh failed for FileBox/MapBox"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f "$FILEBOX_SO" ] || [ ! -f "$MAPBOX_SO" ]; then
|
||||
test_skip "Required plugins not found (FileBox/MapBox)"; exit 0
|
||||
echo "[FAIL] Required plugin artifacts still missing after build-all (FileBox/MapBox)"
|
||||
echo "[INFO] FileBox: $FILEBOX_SO"
|
||||
echo "[INFO] MapBox: $MAPBOX_SO"
|
||||
exit 1
|
||||
fi
|
||||
if ! python3 - <<PY 2>/dev/null; then
|
||||
import ctypes
|
||||
ctypes.CDLL(r"$FILEBOX_SO")
|
||||
ctypes.CDLL(r"$MAPBOX_SO")
|
||||
print("OK")
|
||||
PY
|
||||
echo "[FAIL] Plugin dlopen check failed for FileBox/MapBox"
|
||||
python3 - <<PY 2>&1 | tail -n 80
|
||||
import ctypes
|
||||
ctypes.CDLL(r"$FILEBOX_SO")
|
||||
ctypes.CDLL(r"$MAPBOX_SO")
|
||||
print("OK")
|
||||
PY
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$NYASH_ROOT/tmp"
|
||||
@ -32,7 +57,7 @@ OUTPUT_EXE="$NYASH_ROOT/tmp/phase97_next_non_ws_llvm_exe"
|
||||
echo "[INFO] Building: $INPUT_HAKO → $OUTPUT_EXE"
|
||||
|
||||
BUILD_LOG="/tmp/phase97_next_non_ws_build.log"
|
||||
if ! env NYASH_DISABLE_PLUGINS=1 "$NYASH_ROOT/tools/build_llvm.sh" "$INPUT_HAKO" -o "$OUTPUT_EXE" 2>&1 | tee "$BUILD_LOG"; then
|
||||
if ! env NYASH_DISABLE_PLUGINS=0 "$NYASH_ROOT/tools/build_llvm.sh" "$INPUT_HAKO" -o "$OUTPUT_EXE" 2>&1 | tee "$BUILD_LOG"; then
|
||||
echo "[FAIL] build_llvm.sh failed"
|
||||
tail -n 80 "$BUILD_LOG"
|
||||
exit 1
|
||||
@ -47,7 +72,7 @@ fi
|
||||
echo "[INFO] Executing: $OUTPUT_EXE"
|
||||
|
||||
set +e
|
||||
OUTPUT=$(timeout "${RUN_TIMEOUT_SECS:-10}" env NYASH_DISABLE_PLUGINS=1 "$OUTPUT_EXE" 2>&1)
|
||||
OUTPUT=$(timeout "${RUN_TIMEOUT_SECS:-10}" env NYASH_DISABLE_PLUGINS=0 "$OUTPUT_EXE" 2>&1)
|
||||
EXIT_CODE=$?
|
||||
set -e
|
||||
|
||||
|
||||
Reference in New Issue
Block a user