diff options
Diffstat (limited to 'insns.def')
-rw-r--r-- | insns.def | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -441,6 +441,26 @@ newarray val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num)); } +/* put new array initialized with num values on the stack. There + should be at least one element on the stack, and the top element + should be a hash. If the top element is empty, it is not + included in the array. + */ +DEFINE_INSN +newarraykwsplat +(rb_num_t num) +(...) +(VALUE val) +// attr rb_snum_t sp_inc = 1 - (rb_snum_t)num; +{ + if (RHASH_EMPTY_P(*STACK_ADDR_FROM_TOP(1))) { + val = rb_ary_new4(num-1, STACK_ADDR_FROM_TOP(num)); + } + else { + val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num)); + } +} + /* dup array */ DEFINE_INSN duparray |