summaryrefslogtreecommitdiffhomepage
path: root/include
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 /include
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 'include')
-rw-r--r--include/mruby/ops.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/mruby/ops.h b/include/mruby/ops.h
index 9b9fefeb0..7b5ea40ca 100644
--- a/include/mruby/ops.h
+++ b/include/mruby/ops.h
@@ -47,6 +47,8 @@ OPCODE(GETMCNST, BB) /* R(a) = R(a)::Syms(b) */
OPCODE(SETMCNST, BB) /* R(a+1)::Syms(b) = R(a) */
OPCODE(GETUPVAR, BBB) /* R(a) = uvget(b,c) */
OPCODE(SETUPVAR, BBB) /* uvset(b,c,R(a)) */
+OPCODE(GETIDX, B) /* R(a) = R(a)[R(a+1)] */
+OPCODE(SETIDX, B) /* R(a)[R(a+1)] = R(a+2) */
OPCODE(JMP, S) /* pc+=a */
OPCODE(JMPIF, BS) /* if R(a) pc+=b */
OPCODE(JMPNOT, BS) /* if !R(a) pc+=b */