summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compile.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/compile.c b/compile.c
index 7b3bd00137..c3afd6c121 100644
--- a/compile.c
+++ b/compile.c
@@ -9295,21 +9295,23 @@ ibf_load_object(const struct ibf_load *load, VALUE object_index)
static void
ibf_dump_object_list(struct ibf_dump *dump, struct ibf_header *header)
{
- VALUE list = rb_ary_tmp_new(RARRAY_LEN(dump->obj_list));
+ VALUE listv;
+ ibf_offset_t *list = ALLOCV_N(ibf_offset_t, listv, RARRAY_LEN(dump->obj_list));
int i, size;
for (i=0; i<RARRAY_LEN(dump->obj_list); i++) {
VALUE obj = RARRAY_AREF(dump->obj_list, i);
ibf_offset_t offset = lbf_dump_object_object(dump, obj);
- rb_ary_push(list, UINT2NUM(offset));
+ list[i] = offset;
}
size = i;
header->object_list_offset = ibf_dump_pos(dump);
for (i=0; i<size; i++) {
- ibf_offset_t offset = NUM2UINT(RARRAY_AREF(list, i));
+ ibf_offset_t offset = list[i];
IBF_WV(offset);
}
+ ALLOCV_END(listv);
header->object_list_size = size;
}