4.5 KiB
4.5 KiB
Codex向け質問 - Phase 15.5後のテスト戦略
📋 背景
Phase 15.5でCore Box完全削除を実施し、すべてのBoxをプラグイン化しました。その結果:
- ✅ nyash.tomlのパス修正完了(13箇所)
- ✅ プラグインは正常にロード(.soファイル20個存在)
- ✅ 基本的な算術演算・制御構文は動作
- ❌ StringBox/IntegerBoxのメソッドが動作しない
🔍 現在の問題
StringBoxプラグインの状況
local s = new StringBox("Hello") # ← オブジェクト生成OK(ハンドル返却)
print(s) # ← 空文字列(toString失敗)
s.length() # ← 0を返す(内部データなし)
s.toString() # ← 空文字列を返す
s.get() # ← 空文字列を返す
調査済み事項
- プラグインは正常にロード(plugin-testerで確認)
- nyash_plugin_invokeは実装済み(legacy v1 ABI)
- method_id衝突を修正済み(0-3 → 4+に変更)
- 通常の文字列リテラルは動作する
- 算術演算は問題なし
🔬 根本原因(Codex調査結果 - 2025-09-24)
実装レベルの具体的問題箇所を特定済み:
-
string_invoke_idにM_BIRTH分岐がないplugins/nyash-string-plugin/src/lib.rsのstring_invoke_idにM_BIRTH分岐が無くnew StringBox("test")で生成されたIDがINSTマップに登録されない.length()呼び出しでE_HANDLEが返る
-
string_resolveがtoStringを未マッピング- 同ファイルの
string_resolveが"toString"をM_TO_UTF8にマッピングしていない .toString()は未知メソッド扱いになり空文字列/エラーでフォールバック
- 同ファイルの
-
IntegerBoxも同様の問題
plugins/nyash-integer-plugin/src/lib.rsでもM_BIRTH/M_FINIが未実装- 値を保持できず
.get()/.set()が失敗
🎯 質問
1. 実装修正の優先度は?
string_invoke_idとinteger_invoke_idにM_BIRTH/M_FINI分岐を復元するのが最優先か?- それともTypeBox共通レイヤーでフォールバック処理を追加すべきか?
2. toStringメソッドの実装方針
.toString()はtoUtf8のエイリアスにすべきか?- 新たなメソッドIDを
nyash_box.tomlへ追加してVMに通知すべきか?
3. テスト戦略の方向性
現状でStringBox/IntegerBoxが動作しない中で:
- A案: プラグインメソッド修正を優先(M_BIRTH実装)
- B案: 基本機能(算術・制御)のテストを先に充実
- C案: 別のBoxプラグイン(FileBox等)でテスト
どの方向性が効率的でしょうか?
4. 既存テストの扱い
tools/smokes/v2/profiles/quick/boxesのStringBoxケースを一時的に外すか?- 失敗を許容したまま調査用に残すか?
🔄 再現手順
最小再現コード
# test_stringbox.hako
local s = new StringBox("Hello World")
print("StringBox created")
print(s) # 期待: "Hello World", 実際: ""
local len = s.length()
print("Length: " + len) # 期待: 11, 実際: 0
実行コマンド
# プラグインロード確認
./tools/plugin-tester/target/release/plugin-tester check --config nyash.toml
# テスト実行
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 ./target/release/nyash test_stringbox.hako
デバッグ情報収集
# 詳細ログ
NYASH_CLI_VERBOSE=1 ./target/release/nyash test_stringbox.hako
# MIRダンプ確認
./target/release/nyash --dump-mir test_stringbox.hako
# 具体的な問題箇所の確認
rg "M_BIRTH" plugins/nyash-string-plugin/src/lib.rs # 該当箇所を特定
📁 関連ファイル
nyash.toml- プラグイン設定(method_id修正済み)plugins/nyash-string-plugin/src/lib.rs- StringBoxプラグイン実装(L23-L113, L205-L280)plugins/nyash-integer-plugin/src/lib.rs- IntegerBoxプラグイン実装tools/smokes/v2/- 新スモークテストシステムsrc/box_factory/plugin.rs- プラグインロード実装src/runtime/plugin_loader_v2/enabled/loader.rs- create_box → nyash_plugin_invoke_v2_shimsrc/mir/builder/builder_calls.rs- TypeBox v2 resolve実装(問題箇所)
🚀 期待する回答
- M_BIRTH/M_FINI実装の具体的な修正方法
- 効率的なテスト戦略の提案
- プラグインメソッド呼び出しのデバッグ手法
よろしくお願いします!