diff --git a/src/mir/builder/rewrite/known.rs b/src/mir/builder/rewrite/known.rs index 0c5d3eed..9f98aaa1 100644 --- a/src/mir/builder/rewrite/known.rs +++ b/src/mir/builder/rewrite/known.rs @@ -53,18 +53,20 @@ pub(crate) fn try_known_rewrite( return None; } - // Phase 287 P4: Don't rewrite for primitive types + // Phase 287 P4: Don't rewrite for primitive types (toString/stringify/str only) // (should use universal slot toString[#0], not user-defined static methods) - 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 {:?}", recv_type); + 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; } - return None; + _ => {} } - _ => {} } } @@ -144,18 +146,20 @@ pub(crate) fn try_known_rewrite_to_dst( return None; } - // Phase 287 P4: Don't rewrite for primitive types + // Phase 287 P4: Don't rewrite for primitive types (toString/stringify/str only) // (should use universal slot toString[#0], not user-defined static methods) - 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 {:?}", recv_type); + 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; } - return None; + _ => {} } - _ => {} } } @@ -240,18 +244,20 @@ pub(crate) fn try_unique_suffix_rewrite( return None; } - // Phase 287 P4: Don't rewrite for primitive types + // Phase 287 P4: Don't rewrite for primitive types (toString/stringify/str only) // (should use universal slot toString[#0], not user-defined static methods) - 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 {:?}", recv_type); + 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; } - return None; + _ => {} } - _ => {} } } @@ -312,18 +318,20 @@ pub(crate) fn try_unique_suffix_rewrite_to_dst( return None; } - // Phase 287 P4: Don't rewrite for primitive types + // Phase 287 P4: Don't rewrite for primitive types (toString/stringify/str only) // (should use universal slot toString[#0], not user-defined static methods) - 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_to_dst: BLOCKED primitive type {:?}", recv_type); + 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_to_dst: BLOCKED primitive type {:?} for {}", recv_type, method); + } + return None; } - return None; + _ => {} } - _ => {} } }