no relloc on restore_cont

This commit is contained in:
Yuichi Nishiwaki 2015-07-26 16:39:34 +09:00
parent da0c9d2594
commit 9365eb4c7f
1 changed files with 10 additions and 7 deletions

View File

@ -11,13 +11,16 @@ struct pic_fullcont {
ptrdiff_t stk_len;
pic_value *st_ptr;
size_t sp_offset, st_len;
size_t sp_offset;
ptrdiff_t st_len;
pic_callinfo *ci_ptr;
size_t ci_offset, ci_len;
size_t ci_offset;
ptrdiff_t ci_len;
struct pic_proc **xp_ptr;
size_t xp_offset, xp_len;
size_t xp_offset;
ptrdiff_t xp_len;
pic_code *ip;
@ -184,17 +187,17 @@ restore_cont(pic_state *pic, struct pic_fullcont *cont)
pic->cc = cont->prev_jmp;
pic->cp = cont->cp;
pic->stbase = pic_realloc(pic, pic->stbase, sizeof(pic_value) * cont->st_len);
assert(pic->stend - pic->stbase >= cont->st_len);
memcpy(pic->stbase, cont->st_ptr, sizeof(pic_value) * cont->st_len);
pic->sp = pic->stbase + cont->sp_offset;
pic->stend = pic->stbase + cont->st_len;
pic->cibase = pic_realloc(pic, pic->cibase, sizeof(pic_callinfo) * cont->ci_len);
assert(pic->ciend - pic->cibase >= cont->ci_len);
memcpy(pic->cibase, cont->ci_ptr, sizeof(pic_callinfo) * cont->ci_len);
pic->ci = pic->cibase + cont->ci_offset;
pic->ciend = pic->cibase + cont->ci_len;
pic->xpbase = pic_realloc(pic, pic->xpbase, sizeof(struct pic_proc *) * cont->xp_len);
assert(pic->xpend - pic->xpbase >= cont->xp_len);
memcpy(pic->xpbase, cont->xp_ptr, sizeof(struct pic_proc *) * cont->xp_len);
pic->xp = pic->xpbase + cont->xp_offset;
pic->xpend = pic->xpbase + cont->xp_len;
@ -203,7 +206,7 @@ restore_cont(pic_state *pic, struct pic_fullcont *cont)
pic->ptable = cont->ptable;
pic->arena = pic_realloc(pic, pic->arena, sizeof(struct pic_object *) * cont->arena_size);
assert(pic->arena_size >= cont->arena_size);
memcpy(pic->arena, cont->arena, sizeof(struct pic_object *) * cont->arena_size);
pic->arena_size = cont->arena_size;
pic->arena_idx = cont->arena_idx;