diff --git a/NEWS.md b/NEWS.md index 39ddf376c9..1101f5148c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -253,6 +253,9 @@ Outstanding ones only. methods now return array of defined methods names as symbols. [[Feature #17314]] + * Module#alias_method now returns the defined alias as symbol. + [[Feature #17314]] + * Mutex * `Mutex` is now acquired per-`Fiber` instead of per-`Thread`. This change diff --git a/spec/ruby/core/module/alias_method_spec.rb b/spec/ruby/core/module/alias_method_spec.rb index 742e289a3f..5d3d0c23d9 100644 --- a/spec/ruby/core/module/alias_method_spec.rb +++ b/spec/ruby/core/module/alias_method_spec.rb @@ -85,8 +85,19 @@ describe "Module#alias_method" do Module.should have_public_instance_method(:alias_method, false) end - it "returns self" do - @class.send(:alias_method, :checking_return_value, :public_one).should equal(@class) + describe "returned value" do + ruby_version_is ""..."3.0" do + it "returns self" do + @class.send(:alias_method, :checking_return_value, :public_one).should equal(@class) + end + end + + ruby_version_is "3.0" do + it "returns symbol of the defined method name" do + @class.send(:alias_method, :checking_return_value, :public_one).should equal(:checking_return_value) + @class.send(:alias_method, 'checking_return_value', :public_one).should equal(:checking_return_value) + end + end end it "works in module" do diff --git a/vm_method.c b/vm_method.c index 9ee96886d8..1546722b14 100644 --- a/vm_method.c +++ b/vm_method.c @@ -1941,13 +1941,13 @@ rb_alias(VALUE klass, ID alias_name, ID original_name) /* * call-seq: - * alias_method(new_name, old_name) -> self + * alias_method(new_name, old_name) -> symbol * * Makes new_name a new copy of the method old_name. This can * be used to retain access to methods that are overridden. * * module Mod - * alias_method :orig_exit, :exit + * alias_method :orig_exit, :exit #=> :orig_exit * def exit(code=0) * puts "Exiting with code #{code}" * orig_exit(code) @@ -1968,8 +1968,9 @@ rb_mod_alias_method(VALUE mod, VALUE newname, VALUE oldname) if (!oldid) { rb_print_undef_str(mod, oldname); } - rb_alias(mod, rb_to_id(newname), oldid); - return mod; + VALUE id = rb_to_id(newname); + rb_alias(mod, id, oldid); + return ID2SYM(id); } static void