summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-09-17 07:49:47 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-09-17 07:49:47 +0900
commit7c99df8416aa866725c11e5ced7f2c5a818a8c74 (patch)
tree827ad7d0074e44eb28672ca8b41788a3c1bc28a4 /src/vm.c
parent6f044de578bd9b1056e59bb499d49a5dc7ebef2b (diff)
downloadmruby-7c99df8416aa866725c11e5ced7f2c5a818a8c74.tar.gz
mruby-7c99df8416aa866725c11e5ced7f2c5a818a8c74.zip
ops.h: add `OP_ARYPUSH_N` instruction.
Add n elements at once. Reduces instructions for huge array initialization. In addition, `gen_value` function in `codegen.c` was refactored and clarified.
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/vm.c b/src/vm.c
index 95458774b..5690684cb 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -2551,6 +2551,13 @@ RETRY_TRY_BLOCK:
NEXT;
}
+ CASE(OP_ARYPUSH_N, BB) {
+ for (mrb_int i=0; i<b; i++) {
+ mrb_ary_push(mrb, regs[a], regs[a+i+1]);
+ }
+ NEXT;
+ }
+
CASE(OP_ARYDUP, B) {
mrb_value ary = regs[a];
if (mrb_array_p(ary)) {