summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadosław Bułat <radek.bulat@gmail.com>2020-12-18 19:14:23 +0100
committerYusuke Endoh <mame@ruby-lang.org>2020-12-19 12:23:58 +0900
commit51bcd50915941d21df806e8dcde769ae63b6eaaf (patch)
tree325554687a1a94ebcbb4dbcf34a03191c70deb8c
parent34f6b22df073fe86e30aca99be5aa0b0eb8653df (diff)
Feature 17314: alias_method returns symbol
-rw-r--r--NEWS.md3
-rw-r--r--spec/ruby/core/module/alias_method_spec.rb15
-rw-r--r--vm_method.c9
3 files changed, 21 insertions, 6 deletions
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 <i>new_name</i> a new copy of the method <i>old_name</i>. 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