summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/codedump.c6
-rw-r--r--src/vm.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/src/codedump.c b/src/codedump.c
index 87faa589c..3128d7467 100644
--- a/src/codedump.c
+++ b/src/codedump.c
@@ -428,13 +428,17 @@ codedump(mrb_state *mrb, const mrb_irep *irep)
print_lv_ab(mrb, irep, a, b);
break;
CASE(OP_ARYCAT, B):
- printf("OP_ARYCAT\tR%d\t", a);
+ printf("OP_ARYCAT\tR%d\tR%d\t", a, a+1);
print_lv_a(mrb, irep, a);
break;
CASE(OP_ARYPUSH, B):
printf("OP_ARYPUSH\tR%d\t", a);
print_lv_a(mrb, irep, a);
break;
+ CASE(OP_ARYPUSH_N, BB):
+ printf("OP_ARYPUSH_N\tR%d\t%d\t", a, b);
+ print_lv_a(mrb, irep, a);
+ break;
CASE(OP_ARYDUP, B):
printf("OP_ARYDUP\tR%d\t", a);
print_lv_a(mrb, irep, a);
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)) {