diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-03 17:14:00 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-03 17:14:00 +0900 |
| commit | 09336c5d49481d56587f6e28924014954b4c8dd2 (patch) | |
| tree | 2929382ec25ac34578a3ae6ee77f2dafda7964dd /include | |
| parent | d64d8ca8e4515a2e03165401470ef109a6097e5d (diff) | |
| download | mruby-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.h | 2 |
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 */ |
