From 71c746379d5872e250d90ae45c585760afaf9516 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada 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(-) (limited to 'vm_method.c') diff --git a/vm_method.c b/vm_method.c index 4833ff692c..7218faa5c9 100644 --- a/vm_method.c +++ b/vm_method.c @@ -1932,11 +1932,17 @@ rb_alias(VALUE klass, ID alias_name, ID original_name) } } - 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.2.3