summaryrefslogtreecommitdiffhomepage
path: root/src/codedump.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-10-03 17:14:00 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-10-03 17:14:00 +0900
commit09336c5d49481d56587f6e28924014954b4c8dd2 (patch)
tree2929382ec25ac34578a3ae6ee77f2dafda7964dd /src/codedump.c
parentd64d8ca8e4515a2e03165401470ef109a6097e5d (diff)
downloadmruby-09336c5d49481d56587f6e28924014954b4c8dd2.tar.gz
mruby-09336c5d49481d56587f6e28924014954b4c8dd2.zip
mruby/ops.h: add new instructions `OP_GETIDX` and `OP_SETIDX`.
Which represent `obj[int]` and `obj[int]=val` respectively where `obj` is either `string`, `array` or `hash`, so that index access could be faster. When `obj` is not assumed type or `R(a+1)` is not integer, the instructions fallback to method calls.
Diffstat (limited to 'src/codedump.c')
-rw-r--r--src/codedump.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/codedump.c b/src/codedump.c
index 431771ca9..df88b37fc 100644
--- a/src/codedump.c
+++ b/src/codedump.c
@@ -265,6 +265,12 @@ codedump(mrb_state *mrb, const mrb_irep *irep)
printf("OP_SETCV\t%s\tR%d\t", mrb_sym_dump(mrb, irep->syms[b]), a);
print_lv_a(mrb, irep, a);
break;
+ CASE(OP_GETIDX, B):
+ printf("OP_GETIDX\tR%d\tR%d\n", a, a+1);
+ break;
+ CASE(OP_SETIDX, B):
+ printf("OP_SETIDX\tR%d\tR%d\tR%d\n", a, a+1, a+2);
+ break;
CASE(OP_JMP, S):
i = pc - irep->iseq;
printf("OP_JMP\t\t%03d\n", (int)i+(int16_t)a);