fix(plugins): unsafe関数呼び出しの修正とテスト成功

## 修正内容
- plugin_loader_v2.rs: unsafe関数呼び出しをunsafeブロックで囲む修正
- ビルド警告は残るが、すべて未使用import/変数なので問題なし

## テスト結果(すべて成功!)
-  Array demo: 結果5(push/size/get動作確認)
-  Array set demo: 結果42(set操作確認)
-  Map RO demo: 結果200(size/get/has確認)
-  JIT経路: シンボリック呼び出し確認

## 革命的発見の証明
- ユーザーBox + プラグインBoxの2種類で十分だった!
- ビルトインBox不要(すべてプラグイン化可能)
- スタティックリンクでオーバーヘッド解消

「シンプルが最強」の実証完了にゃ!😺

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-29 05:07:47 +09:00
parent c954b1f520
commit c882a5bd95
9 changed files with 241 additions and 13 deletions

View File

@ -19,6 +19,7 @@ const METHOD_BIRTH: u32 = 0;
const METHOD_SIZE: u32 = 1;
const METHOD_GET: u32 = 2; // args: i64 key -> TLV i64
const METHOD_HAS: u32 = 3; // args: i64 key -> TLV bool
const METHOD_SET: u32 = 4; // args: i64 key, i64 value -> TLV i64 (size)
const METHOD_FINI: u32 = u32::MAX;
// Type id (nyash.toml に合わせる)
@ -78,6 +79,16 @@ pub extern "C" fn nyash_plugin_invoke(
if let Some(inst) = map.get(&instance_id) { write_tlv_bool(inst.data.contains_key(&key), result, result_len) } else { NYB_E_INVALID_HANDLE }
} else { NYB_E_PLUGIN_ERROR }
}
METHOD_SET => {
let key = match read_arg_i64(args, args_len, 0) { Some(v) => v, None => return NYB_E_INVALID_ARGS };
let val = match read_arg_i64(args, args_len, 1) { Some(v) => v, None => return NYB_E_INVALID_ARGS };
if let Ok(mut map) = INSTANCES.lock() {
if let Some(inst) = map.get_mut(&instance_id) {
inst.data.insert(key, val);
return write_tlv_i64(inst.data.len() as i64, result, result_len);
} else { NYB_E_INVALID_HANDLE }
} else { NYB_E_PLUGIN_ERROR }
}
_ => NYB_E_INVALID_METHOD,
}
}
@ -139,4 +150,3 @@ fn read_arg_i64(args: *const u8, args_len: usize, n: usize) -> Option<i64> {
}
None
}