2025-09-07 07:36:15 +09:00
|
|
|
#[test]
|
|
|
|
|
fn plugin_invoke_hygiene_prefers_hostcall_for_mapped() {
|
|
|
|
|
use crate::jit::policy::invoke::{decide_box_method, InvokeDecision};
|
|
|
|
|
use crate::jit::r#extern::collections as c;
|
|
|
|
|
|
|
|
|
|
// Ensure plugin builtins are not forced
|
|
|
|
|
std::env::remove_var("NYASH_USE_PLUGIN_BUILTINS");
|
|
|
|
|
|
|
|
|
|
// For ArrayBox.get, policy should map to hostcall symbol, not plugin invoke
|
|
|
|
|
let decision = decide_box_method("ArrayBox", "get", 2, true);
|
|
|
|
|
match decision {
|
|
|
|
|
InvokeDecision::HostCall { symbol, reason, .. } => {
|
|
|
|
|
assert_eq!(symbol, c::SYM_ARRAY_GET_H);
|
|
|
|
|
assert_eq!(reason, "mapped_symbol");
|
|
|
|
|
}
|
|
|
|
|
other => panic!("expected HostCall(mapped_symbol), got: {:?}", other),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn plugin_invoke_hygiene_string_len_is_hostcall() {
|
|
|
|
|
use crate::jit::policy::invoke::{decide_box_method, InvokeDecision};
|
|
|
|
|
use crate::jit::r#extern::collections as c;
|
|
|
|
|
|
|
|
|
|
std::env::remove_var("NYASH_USE_PLUGIN_BUILTINS");
|
|
|
|
|
let decision = decide_box_method("StringBox", "len", 1, true);
|
|
|
|
|
match decision {
|
|
|
|
|
InvokeDecision::HostCall { symbol, reason, .. } => {
|
|
|
|
|
assert_eq!(symbol, c::SYM_STRING_LEN_H);
|
|
|
|
|
assert_eq!(reason, "mapped_symbol");
|
|
|
|
|
}
|
2025-09-17 07:43:07 +09:00
|
|
|
other => panic!(
|
|
|
|
|
"expected HostCall(mapped_symbol) for String.len, got: {:?}",
|
|
|
|
|
other
|
|
|
|
|
),
|
2025-09-07 07:36:15 +09:00
|
|
|
}
|
|
|
|
|
}
|