From 4120ab65c91d916acaee80bdd06bfab5b701705c Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Tue, 25 Nov 2025 09:18:43 +0900 Subject: [PATCH] =?UTF-8?q?fix(selfhost):=20StringBox.get()=20=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E4=BF=AE=E6=AD=A3=E3=81=A7=E3=82=BB=E3=83=AB?= =?UTF-8?q?=E3=83=95=E3=83=9B=E3=82=B9=E3=83=88=E5=BE=A9=E6=B4=BB=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit StageBDriverBox.compile() と main() 内の2箇所に防御チェック追加: - methods.get(mi) が null の場合スキップ - methods.get(mi) が StringBox の場合スキップ (MapBox のみ処理) これにより "Unknown method 'get' on StringBox" エラーが解消され、 .hako セルフホストコンパイラが再び動作するようになった。 テスト確認: NYASH_USE_NY_COMPILER=1 ./target/release/hakorune test.hako → "Hello from selfhost!" RC: 0 ✅ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- lang/src/compiler/entry/compiler_stageb.hako | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lang/src/compiler/entry/compiler_stageb.hako b/lang/src/compiler/entry/compiler_stageb.hako index 6db09b4a..cd4a595b 100644 --- a/lang/src/compiler/entry/compiler_stageb.hako +++ b/lang/src/compiler/entry/compiler_stageb.hako @@ -1183,6 +1183,19 @@ static box StageBDriverBox { local mn = methods.length() loop(mi < mn) { local def = methods.get(mi) + + // Defensive check: skip if def is null or StringBox + if def == null { + mi = mi + 1 + continue + } + // Check if def is a StringBox by converting to string and comparing + local def_str = "" + def + if def_str == def { + mi = mi + 1 + continue + } + local mname = "" + def.get("name") local mparams = def.get("params") local mbody = "" + def.get("body_json") @@ -1397,6 +1410,19 @@ static box StageBDriverBox { local mn = methods.length() loop(mi < mn) { local def = methods.get(mi) + + // Defensive check: skip if def is null or StringBox + if def == null { + mi = mi + 1 + continue + } + // Check if def is a StringBox by converting to string and comparing + local def_str = "" + def + if def_str == def { + mi = mi + 1 + continue + } + local mname = "" + def.get("name") local mparams = def.get("params") local mbody = "" + def.get("body_json")