From f0dc9dcdc7a3b15b3192b1503a3c3d9eec3ada06 Mon Sep 17 00:00:00 2001 From: Fabio Sangiovanni Date: Wed, 29 Jan 2025 14:57:58 +0100 Subject: [PATCH] rb_alias: improve "undefined method" error message by invoking `rb_print_undef` with `target_klass` as argument. --- test/ruby/test_alias.rb | 13 +++++++++++++ vm_method.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/test/ruby/test_alias.rb b/test/ruby/test_alias.rb index 6d4fcc085b..539cd49488 100644 --- a/test/ruby/test_alias.rb +++ b/test/ruby/test_alias.rb @@ -328,4 +328,17 @@ class TestAlias < Test::Unit::TestCase } end; end + + def test_undef_method_error_message_with_zsuper_method + modules = [ + Module.new { private :class }, + Module.new { prepend Module.new { private :class } }, + ] + message = "undefined method 'class' for module '%s'" + modules.each do |mod| + assert_raise_with_message(NameError, message % mod) do + mod.alias_method :xyz, :class + end + end + end end diff --git a/vm_method.c b/vm_method.c index e4f71648ac..69f9a76377 100644 --- a/vm_method.c +++ b/vm_method.c @@ -2311,7 +2311,7 @@ rb_alias(VALUE klass, ID alias_name, ID original_name) if ((!RB_TYPE_P(klass, T_MODULE)) || (orig_me = search_method(rb_cObject, original_name, &defined_class), UNDEFINED_METHOD_ENTRY_P(orig_me))) { - rb_print_undef(klass, original_name, METHOD_VISI_UNDEF); + rb_print_undef(target_klass, original_name, METHOD_VISI_UNDEF); } }