move regs field from pic_state to pic_heap

This commit is contained in:
Yuichi Nishiwaki 2015-07-26 16:48:38 +09:00
parent eec7d1754b
commit 1a71f3f578
3 changed files with 10 additions and 11 deletions

View File

@ -41,6 +41,7 @@ union object {
struct pic_heap { struct pic_heap {
union header base, *freep; union header base, *freep;
struct heap_page *pages; struct heap_page *pages;
struct pic_reg *regs; /* weak map chain */
}; };
struct pic_heap * struct pic_heap *
@ -56,6 +57,8 @@ pic_heap_open(pic_state *pic)
heap->freep = &heap->base; heap->freep = &heap->base;
heap->pages = NULL; heap->pages = NULL;
heap->regs = NULL;
return heap; return heap;
} }
@ -400,8 +403,8 @@ gc_mark_object(pic_state *pic, union object *obj)
case PIC_TT_REG: { case PIC_TT_REG: {
struct pic_reg *reg = (struct pic_reg *)obj; struct pic_reg *reg = (struct pic_reg *)obj;
reg->prev = pic->regs; reg->prev = pic->heap->regs;
pic->regs = reg; pic->heap->regs = reg;
break; break;
} }
case PIC_TT_CP: { case PIC_TT_CP: {
@ -439,7 +442,7 @@ gc_mark_phase(pic_state *pic)
struct pic_proc **xhandler; struct pic_proc **xhandler;
size_t j; size_t j;
assert(pic->regs == NULL); assert(pic->heap->regs == NULL);
/* checkpoint */ /* checkpoint */
if (pic->cp) { if (pic->cp) {
@ -519,7 +522,7 @@ gc_mark_phase(pic_state *pic)
struct pic_reg *reg; struct pic_reg *reg;
j = 0; j = 0;
reg = pic->regs; reg = pic->heap->regs;
while (reg != NULL) { while (reg != NULL) {
h = &reg->hash; h = &reg->hash;
@ -664,8 +667,8 @@ gc_sweep_phase(pic_state *pic)
size_t total = 0, inuse = 0; size_t total = 0, inuse = 0;
/* registries */ /* registries */
while (pic->regs != NULL) { while (pic->heap->regs != NULL) {
h = &pic->regs->hash; h = &pic->heap->regs->hash;
for (it = kh_begin(h); it != kh_end(h); ++it) { for (it = kh_begin(h); it != kh_end(h); ++it) {
if (! kh_exist(h, it)) if (! kh_exist(h, it))
continue; continue;
@ -674,7 +677,7 @@ gc_sweep_phase(pic_state *pic)
kh_del(reg, h, it); kh_del(reg, h, it);
} }
} }
pic->regs = pic->regs->prev; pic->heap->regs = pic->heap->regs->prev;
} }
/* symbol table */ /* symbol table */

View File

@ -131,7 +131,6 @@ struct pic_state {
struct pic_heap *heap; struct pic_heap *heap;
struct pic_object **arena; struct pic_object **arena;
size_t arena_size, arena_idx; size_t arena_size, arena_idx;
struct pic_reg *regs;
pic_value err; pic_value err;

View File

@ -300,9 +300,6 @@ pic_open(pic_allocf allocf, void *userdata)
/* memory heap */ /* memory heap */
pic->heap = pic_heap_open(pic); pic->heap = pic_heap_open(pic);
/* registries */
pic->regs = NULL;
/* symbol table */ /* symbol table */
kh_init(s, &pic->syms); kh_init(s, &pic->syms);