diff --git a/src/mir/builder/rewrite/known.rs b/src/mir/builder/rewrite/known.rs index 9f98aaa1..8c21d707 100644 --- a/src/mir/builder/rewrite/known.rs +++ b/src/mir/builder/rewrite/known.rs @@ -58,14 +58,16 @@ pub(crate) fn try_known_rewrite( if method == "toString" || method == "stringify" || method == "str" { if let Some(recv_type) = builder.type_ctx.value_types.get(&object_value) { use crate::mir::MirType; - match recv_type { - MirType::Integer | MirType::Float | MirType::Bool | MirType::String => { - if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { - eprintln!("[P287-GUARD] try_known_rewrite: BLOCKED primitive type {:?} for {}", recv_type, method); - } - return None; + let is_primitive = match recv_type { + MirType::Integer | MirType::Float | MirType::Bool | MirType::String => true, + MirType::Box(name) if name == "IntegerBox" || name == "FloatBox" || name == "BoolBox" || name == "StringBox" => true, + _ => false, + }; + if is_primitive { + if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { + eprintln!("[P287-GUARD] try_known_rewrite: BLOCKED primitive type {:?} for {}", recv_type, method); } - _ => {} + return None; } } } @@ -151,14 +153,16 @@ pub(crate) fn try_known_rewrite_to_dst( if method == "toString" || method == "stringify" || method == "str" { if let Some(recv_type) = builder.type_ctx.value_types.get(&object_value) { use crate::mir::MirType; - match recv_type { - MirType::Integer | MirType::Float | MirType::Bool | MirType::String => { - if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { - eprintln!("[P287-GUARD] try_known_rewrite_to_dst: BLOCKED primitive type {:?} for {}", recv_type, method); - } - return None; + let is_primitive = match recv_type { + MirType::Integer | MirType::Float | MirType::Bool | MirType::String => true, + MirType::Box(name) if name == "IntegerBox" || name == "FloatBox" || name == "BoolBox" || name == "StringBox" => true, + _ => false, + }; + if is_primitive { + if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { + eprintln!("[P287-GUARD] try_known_rewrite_to_dst: BLOCKED primitive type {:?} for {}", recv_type, method); } - _ => {} + return None; } } } @@ -249,14 +253,16 @@ pub(crate) fn try_unique_suffix_rewrite( if method == "toString" || method == "stringify" || method == "str" { if let Some(recv_type) = builder.type_ctx.value_types.get(&object_value) { use crate::mir::MirType; - match recv_type { - MirType::Integer | MirType::Float | MirType::Bool | MirType::String => { - if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { - eprintln!("[P287-GUARD] try_unique_suffix_rewrite: BLOCKED primitive type {:?} for {}", recv_type, method); - } - return None; + let is_primitive = match recv_type { + MirType::Integer | MirType::Float | MirType::Bool | MirType::String => true, + MirType::Box(name) if name == "IntegerBox" || name == "FloatBox" || name == "BoolBox" || name == "StringBox" => true, + _ => false, + }; + if is_primitive { + if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { + eprintln!("[P287-GUARD] try_unique_suffix_rewrite: BLOCKED primitive type {:?} for {}", recv_type, method); } - _ => {} + return None; } } } @@ -323,14 +329,16 @@ pub(crate) fn try_unique_suffix_rewrite_to_dst( if method == "toString" || method == "stringify" || method == "str" { if let Some(recv_type) = builder.type_ctx.value_types.get(&object_value) { use crate::mir::MirType; - match recv_type { - MirType::Integer | MirType::Float | MirType::Bool | MirType::String => { - if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { + let is_primitive = match recv_type { + MirType::Integer | MirType::Float | MirType::Bool | MirType::String => true, + MirType::Box(name) if name == "IntegerBox" || name == "FloatBox" || name == "BoolBox" || name == "StringBox" => true, + _ => false, + }; + if is_primitive { + if std::env::var("NYASH_STATIC_CALL_TRACE").ok().as_deref() == Some("1") { eprintln!("[P287-GUARD] try_unique_suffix_rewrite_to_dst: BLOCKED primitive type {:?} for {}", recv_type, method); - } - return None; } - _ => {} + return None; } } }