summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2021-12-24 17:47:44 +0900
committernagachika <nagachika@ruby-lang.org>2021-12-24 17:47:44 +0900
commit545d6820715a48a17d6182128c0db4198dfa76c1 (patch)
tree4eb0ca72b4e98923adfcf163a394a4d2997597b2 /array.c
parent1d29740c1b101db4bd8fc2d05f929a9e37471a0f (diff)
merge revision(s) fb4cf204a662a8cd9dafef6f31f2bd0db9129abe,fa0279d947c3962c3f8c32852278d3ebb964cb19: [Backport #17725]
use me->def instead of me for opt_table `vm_opt_method_table` is me=>bop table to manage the optimized methods (by specialized instruction). However, `me` can be invalidated to invalidate the method cache entry. [Bug #17725] To solve the issue, use `me-def` instead of `me` which simply copied at invalidation timing. A test by @jeremyevans https://github.com/ruby/ruby/pull/4376 --- test/ruby/test_method.rb | 15 +++++++++++++++ vm.c | 11 +++++------ 2 files changed, 20 insertions(+), 6 deletions(-) should not share same `def` for specialized method Because the key of redefine table is `def`, `def` should be unique for each optimized method (`alias` is not allowed). --- array.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Diffstat (limited to 'array.c')
-rw-r--r--array.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/array.c b/array.c
index 6993796854..b48a6431e7 100644
--- a/array.c
+++ b/array.c
@@ -8122,7 +8122,7 @@ Init_Array(void)
rb_define_method(rb_cArray, "each_index", rb_ary_each_index, 0);
rb_define_method(rb_cArray, "reverse_each", rb_ary_reverse_each, 0);
rb_define_method(rb_cArray, "length", rb_ary_length, 0);
- rb_define_alias(rb_cArray, "size", "length");
+ rb_define_method(rb_cArray, "size", rb_ary_length, 0);
rb_define_method(rb_cArray, "empty?", rb_ary_empty_p, 0);
rb_define_method(rb_cArray, "find_index", rb_ary_index, -1);
rb_define_method(rb_cArray, "index", rb_ary_index, -1);