feat: Implement plugin singleton pattern with shutdown support
- Add singleton support for plugin boxes (e.g., CounterBox) - Implement shutdown_plugins_v2() for controlled plugin lifecycle - Plugin instances now shared across multiple new() calls - Shutdown properly releases and allows re-initialization - All singleton E2E tests passing ✅ ChatGPT5による高度なプラグインライフサイクル管理実装 - シングルトンパターンでプラグインインスタンス共有 - 明示的なshutdownでリソース解放と再初期化対応 - Nyashの統一ライフサイクルポリシー維持 Note: ast.rs test failures are due to rapid development pace - tests need updating for new BoxDeclaration fields (private_fields, public_fields) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -72,3 +72,29 @@ v
|
||||
Err(e) => panic!("Counter assignment test failed: {:?}", e),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn e2e_counter_mapbox_shares_handle() {
|
||||
if !try_init_plugins() { return; }
|
||||
|
||||
let code = r#"
|
||||
local c, m, v
|
||||
c = new CounterBox()
|
||||
m = new MapBox()
|
||||
m.set("k", c)
|
||||
v = m.get("k")
|
||||
v.inc()
|
||||
// c should reflect the increment if handle is shared
|
||||
v = c.get()
|
||||
v
|
||||
"#;
|
||||
let ast = NyashParser::parse_from_string(code).expect("parse failed");
|
||||
let mut interpreter = nyash_rust::interpreter::NyashInterpreter::new();
|
||||
|
||||
match interpreter.execute(ast) {
|
||||
Ok(result) => {
|
||||
assert_eq!(result.to_string_box().value, "1");
|
||||
}
|
||||
Err(e) => panic!("Counter MapBox share test failed: {:?}", e),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user