mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
fix OP_APOST bug for no pre arg cases; fix #2810
This commit is contained in:
@@ -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, ®s[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);
|
||||
|
||||
Reference in New Issue
Block a user