diff --git a/src/interpreter/objects.rs b/src/interpreter/objects.rs index 6b222e18..c0b06703 100644 --- a/src/interpreter/objects.rs +++ b/src/interpreter/objects.rs @@ -762,6 +762,26 @@ impl NyashInterpreter { return Ok((*instance_arc).clone_box()); // Convert Arc back to Box for external interface } + // 🔌 v2プラグインシステム: BoxFactoryRegistryをチェック + use crate::runtime::get_global_registry; + let registry = get_global_registry(); + + if let Some(_provider) = registry.get_provider(class) { + // BoxFactoryRegistry経由でBoxを生成(v2プラグインシステム) + let nyash_args: Vec> = arguments.iter() + .map(|arg| self.execute_expression(arg)) + .collect::, _>>()?; + + match registry.create_box(class, &nyash_args) { + Ok(plugin_box) => return Ok(plugin_box), + Err(e) => { + return Err(RuntimeError::InvalidOperation { + message: format!("Failed to create {} via plugin: {}", class, e), + }); + } + } + } + // プラグインもユーザー定義も見つからなかった場合 return Err(RuntimeError::UndefinedClass { name: class.to_string() }); } diff --git a/src/main.rs b/src/main.rs index a1dfce66..85243f30 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,6 +45,12 @@ pub mod runner; // BID-FFI / Plugin System (prototype) pub mod bid; +// Configuration system +pub mod config; + +// Runtime system (plugins, registry, etc.) +pub mod runtime; + use nyash_rust::cli::CliConfig; use runner::NyashRunner;