fix OP_APOST bug for no pre arg cases; fix #2810

parent 9ef4bbb1
......@@ -2125,33 +2125,28 @@ RETRY_TRY_BLOCK:
int pre = GETARG_B(i);
int post = GETARG_C(i);
struct RArray *ary;
int len, idx;
if (!mrb_array_p(v)) {
regs[a++] = mrb_ary_new_capa(mrb, 0);
v = mrb_ary_new_from_values(mrb, 1, &regs[a]);
}
ary = mrb_ary_ptr(v);
len = ary->len;
if (len > pre + post) {
regs[a++] = mrb_ary_new_from_values(mrb, len - pre - post, ary->ptr+pre);
while (post--) {
SET_NIL_VALUE(regs[a]);
a++;
regs[a++] = ary->ptr[len-post-1];
}
}
else {
struct RArray *ary = mrb_ary_ptr(v);
int len = ary->len;
int idx;
if (len > pre + post) {
regs[a++] = mrb_ary_new_from_values(mrb, len - pre - post, ary->ptr+pre);
while (post--) {
regs[a++] = ary->ptr[len-post-1];
}
regs[a++] = mrb_ary_new_capa(mrb, 0);
for (idx=0; idx+pre<len; idx++) {
regs[a+idx] = ary->ptr[pre+idx];
}
else {
regs[a++] = mrb_ary_new_capa(mrb, 0);
for (idx=0; idx+pre<len; idx++) {
regs[a+idx] = ary->ptr[pre+idx];
}
while (idx < post) {
SET_NIL_VALUE(regs[a+idx]);
idx++;
}
while (idx < post) {
SET_NIL_VALUE(regs[a+idx]);
idx++;
}
}
ARENA_RESTORE(mrb, ai);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment