summaryrefslogtreecommitdiff
path: root/vm.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2019-06-01 13:15:43 +0900
committerYusuke Endoh <mame@ruby-lang.org>2019-06-01 13:15:43 +0900
commit65e63af377bb493dea4d0207627ed87d5da360a8 (patch)
tree06871344ac6e5800a9c06387d52f2ce942c04609 /vm.c
parent7df65ef67691fcc354d819da9cd54a1ade9b6247 (diff)
Make opt_aref instruction support Integer#[]
only when its receiver and the argument are both Integers. Since 6bedbf4625, Integer#[] has supported a range extraction. This means that Integer#[] now accepts multiple arguments, which made the method very slow unfortunately. This change fixes the performance issue by adding a special handling for its traditional use case: `num[idx]` where both `num` and `idx` are Integers.
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 3f5a619e3c..70ec2315c1 100644
--- a/vm.c
+++ b/vm.c
@@ -1643,7 +1643,7 @@ vm_init_redefined_flag(void)
OP(GT, GT), (C(Integer), C(Float));
OP(GE, GE), (C(Integer), C(Float));
OP(LTLT, LTLT), (C(String), C(Array));
- OP(AREF, AREF), (C(Array), C(Hash));
+ OP(AREF, AREF), (C(Array), C(Hash), C(Integer));
OP(ASET, ASET), (C(Array), C(Hash));
OP(Length, LENGTH), (C(Array), C(String), C(Hash));
OP(Size, SIZE), (C(Array), C(String), C(Hash));