🚀 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

@ -6,6 +6,9 @@
use std::sync::Arc;
use crate::box_trait::NyashBox;
use crate::instance_v2::InstanceBox;
#[cfg(all(feature = "plugins", not(target_arch = "wasm32")))]
use crate::runtime::plugin_loader_v2::PluginBoxV2;
/// Tracks Box instances created in different scopes for proper fini calls
pub struct ScopeTracker {
@ -31,11 +34,18 @@ impl ScopeTracker {
if let Some(scope) = self.scopes.pop() {
// Call fini in reverse order of creation
for arc_box in scope.into_iter().rev() {
// For now, fini handling is simplified
// In a full implementation, we would check if the Box has a fini method
// and call it appropriately
// TODO: Implement proper fini dispatch
let _ = arc_box; // Suppress unused warning
// InstanceBox: call fini()
if let Some(instance) = arc_box.as_any().downcast_ref::<InstanceBox>() {
let _ = instance.fini();
continue;
}
// PluginBox: call plugin fini
#[cfg(all(feature = "plugins", not(target_arch = "wasm32")))]
if let Some(plugin) = arc_box.as_any().downcast_ref::<PluginBoxV2>() {
plugin.call_fini();
continue;
}
// Builtin and others: no-op for now
}
}
@ -70,4 +80,4 @@ impl Default for ScopeTracker {
fn default() -> Self {
Self::new()
}
}
}