vm.c: allow Array subclasses to override []; ref #6675

Apply the same pattern as the Hash fix: the OP_GETIDX optimization
now only applies to instances of the Array class itself. Subclasses
fall back to method dispatch, allowing them to override the [] method.

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-12-25 01:31:22 +09:00
parent 35af869d7d
commit d65fb765ef
+2
View File
@@ -1880,6 +1880,8 @@ RETRY_TRY_BLOCK:
mrb_value va = regs[a], vb = regs[a+1];
switch (mrb_type(va)) {
case MRB_TT_ARRAY:
/* optimize only for Array class; subclasses may override [] */
if (mrb_obj_class(mrb, va) != mrb->array_class) goto getidx_fallback;
if (!mrb_integer_p(vb)) goto getidx_fallback;
else {
mrb_int idx = mrb_integer(vb);