🚀 feat: Phase 9.78b Step 1&2完了 - ChatGPT5による実装

ChatGPT5が実装したPhase 9.78b Step 1&2の統合

## 🎯 実装内容
1. Phase 9.78b Step 1: BoxDeclarationをcore::modelへ移動
   - src/core/mod.rs, model.rs 新規作成
   - BoxDeclarationを純粋データモデルとして分離

2. Phase 9.78b Step 2: NyashRuntime骨組み作成
   - src/runtime/nyash_runtime.rs 追加
   - 統一Box管理の基盤

3. ビルドエラー修正
   - Arc重複インポート修正
   - as_str() → as_ref() 変更
   - parent_name.to_string() 型変換
   - インポートパス調整

## 📊 ビルド結果
-  フルビルド成功 (47.34秒)
-  ユニットテスト: 145/145成功
-  統合テスト: 16/16成功
-  WASMビルド成功 (1.9MB)
-  MIRテスト: 1失敗 (ref_new命令)

## 🚀 次のステップ
- Phase 9.78b Step 3: BoxFactory dyn化
- Codexの設計に基づく段階的実装継続
This commit is contained in:
Moe Charm
2025-08-20 18:57:10 +09:00
parent 86b9f7719b
commit 41361a2f50
15 changed files with 571 additions and 95 deletions

View File

@ -643,8 +643,7 @@ impl NyashInterpreter {
for parent_name in &parent_names {
if crate::box_trait::is_builtin_box(parent_name) {
// ビルトインBoxメソッドを実行
match parent_name.as_str() {
"StringBox" => {
if parent_name == "StringBox" {
// ユーザー定義BoxがStringBoxを継承している場合
// __builtin_contentフィールドからStringBoxを取得
if let Some(builtin_value) = instance.get_field_ng("__builtin_content") {
@ -659,8 +658,7 @@ impl NyashInterpreter {
// フィールドが見つからない場合は空のStringBoxを使用互換性のため
let string_box = StringBox::new("");
return self.execute_string_method(&string_box, method, arguments);
},
"IntegerBox" => {
} else if parent_name == "IntegerBox" {
// __builtin_contentフィールドからIntegerBoxを取得
if let Some(builtin_value) = instance.get_field_ng("__builtin_content") {
if let crate::value::NyashValue::Box(boxed) = builtin_value {
@ -673,15 +671,12 @@ impl NyashInterpreter {
// フィールドが見つからない場合は0のIntegerBoxを使用
let integer_box = IntegerBox::new(0);
return self.execute_integer_method(&integer_box, method, arguments);
},
"MathBox" => {
} else if parent_name == "MathBox" {
// MathBoxはステートレスなので、新しいインスタンスを作成
let math_box = MathBox::new();
return self.execute_math_method(&math_box, method, arguments);
},
// 他のビルトインBoxも必要に応じて追加
_ => {}
}
// 他のビルトインBoxも必要に応じて追加
}
}
@ -1072,4 +1067,4 @@ impl NyashInterpreter {
Ok(Box::new(VoidBox::new()))
}
}
}
}