no relloc on restore_cont
This commit is contained in:
parent
da0c9d2594
commit
9365eb4c7f
|
@ -11,13 +11,16 @@ struct pic_fullcont {
|
||||||
ptrdiff_t stk_len;
|
ptrdiff_t stk_len;
|
||||||
|
|
||||||
pic_value *st_ptr;
|
pic_value *st_ptr;
|
||||||
size_t sp_offset, st_len;
|
size_t sp_offset;
|
||||||
|
ptrdiff_t st_len;
|
||||||
|
|
||||||
pic_callinfo *ci_ptr;
|
pic_callinfo *ci_ptr;
|
||||||
size_t ci_offset, ci_len;
|
size_t ci_offset;
|
||||||
|
ptrdiff_t ci_len;
|
||||||
|
|
||||||
struct pic_proc **xp_ptr;
|
struct pic_proc **xp_ptr;
|
||||||
size_t xp_offset, xp_len;
|
size_t xp_offset;
|
||||||
|
ptrdiff_t xp_len;
|
||||||
|
|
||||||
pic_code *ip;
|
pic_code *ip;
|
||||||
|
|
||||||
|
@ -184,17 +187,17 @@ restore_cont(pic_state *pic, struct pic_fullcont *cont)
|
||||||
pic->cc = cont->prev_jmp;
|
pic->cc = cont->prev_jmp;
|
||||||
pic->cp = cont->cp;
|
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);
|
memcpy(pic->stbase, cont->st_ptr, sizeof(pic_value) * cont->st_len);
|
||||||
pic->sp = pic->stbase + cont->sp_offset;
|
pic->sp = pic->stbase + cont->sp_offset;
|
||||||
pic->stend = pic->stbase + cont->st_len;
|
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);
|
memcpy(pic->cibase, cont->ci_ptr, sizeof(pic_callinfo) * cont->ci_len);
|
||||||
pic->ci = pic->cibase + cont->ci_offset;
|
pic->ci = pic->cibase + cont->ci_offset;
|
||||||
pic->ciend = pic->cibase + cont->ci_len;
|
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);
|
memcpy(pic->xpbase, cont->xp_ptr, sizeof(struct pic_proc *) * cont->xp_len);
|
||||||
pic->xp = pic->xpbase + cont->xp_offset;
|
pic->xp = pic->xpbase + cont->xp_offset;
|
||||||
pic->xpend = pic->xpbase + cont->xp_len;
|
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->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);
|
memcpy(pic->arena, cont->arena, sizeof(struct pic_object *) * cont->arena_size);
|
||||||
pic->arena_size = cont->arena_size;
|
pic->arena_size = cont->arena_size;
|
||||||
pic->arena_idx = cont->arena_idx;
|
pic->arena_idx = cont->arena_idx;
|
||||||
|
|
Loading…
Reference in New Issue