[前][次][番号順一覧][スレッド一覧]

ruby-changes:65130

From: Nobuyoshi <ko1@a...>
Date: Wed, 3 Feb 2021 20:00:01 +0900 (JST)
Subject: [ruby-changes:65130] 71c746379d (master): Make alias for aliased original method

https://git.ruby-lang.org/ruby.git/commit/?id=71c746379d

From 71c746379d5872e250d90ae45c585760afaf9516 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Wed, 3 Feb 2021 17:38:19 +0900
Subject: Make alias for aliased original method

Chaining aliased methods increases searching cost linearly.
---
 vm_method.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/vm_method.c b/vm_method.c
index 4833ff6..7218faa 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -1932,11 +1932,17 @@ rb_alias(VALUE klass, ID alias_name, ID original_name) https://github.com/ruby/ruby/blob/trunk/vm_method.c#L1932
 	}
     }
 
-    if (orig_me->def->type == VM_METHOD_TYPE_ZSUPER) {
+    switch (orig_me->def->type) {
+      case VM_METHOD_TYPE_ZSUPER:
 	klass = RCLASS_SUPER(klass);
 	original_name = orig_me->def->original_id;
 	visi = METHOD_ENTRY_VISI(orig_me);
 	goto again;
+      case VM_METHOD_TYPE_ALIAS:
+        orig_me = orig_me->def->body.alias.original_me;
+        VM_ASSERT(orig_me->def->type != VM_METHOD_TYPE_ALIAS);
+        break;
+      default: break;
     }
 
     if (visi == METHOD_VISI_UNDEF) visi = METHOD_ENTRY_VISI(orig_me);
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]