Skip to content

Commit 783e7b8

Browse files
committed
Implement bind_pos_boxed in VMArray.
1 parent 2694596 commit 783e7b8

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/6model/reprs/VMArray.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,12 +254,23 @@ static void bind_pos_native(PARROT_INTERP, STable *st, void *data, INTVAL index,
254254
}
255255

256256
static void bind_pos_boxed(PARROT_INTERP, STable *st, void *data, INTVAL index, PMC *obj) {
257+
VMArrayBody *body = (VMArrayBody *) data;
257258
VMArrayREPRData *repr_data = (VMArrayREPRData *) st->REPR_data;
258259

259260
if(repr_data->elem_size)
260261
die_no_boxed(interp, "set");
261262

262-
/* TODO */
263+
if(index < 0) {
264+
index += body->elems;
265+
if(index < 0)
266+
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
267+
"VMArray: index out of bounds");
268+
}
269+
else if(index >= body->elems) {
270+
ensure_size(interp, body, repr_data, index+1);
271+
}
272+
273+
set_pos_pmc((PMC **) body->slots, index, obj);
263274
}
264275

265276
static void push_boxed(PARROT_INTERP, STable *st, void *data, PMC *obj) {

0 commit comments

Comments
 (0)