This commit is contained in:
Justin Ethier 2017-07-29 20:27:43 -04:00
parent 06d7eb1e7e
commit 0aa3437143
3 changed files with 7 additions and 19 deletions

11
gc.c
View file

@ -432,14 +432,6 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
} }
return (char *)hp; return (char *)hp;
} }
case closure0_tag:{
closure0_type *hp = dest;
mark(hp) = thd->gc_alloc_color;
type_of(hp) = closure0_tag;
hp->fn = ((closure0) obj)->fn;
hp->num_args = ((closure0) obj)->num_args;
return (char *)hp;
}
case pair_tag:{ case pair_tag:{
list hp = dest; list hp = dest;
hp->hdr.mark = thd->gc_alloc_color; hp->hdr.mark = thd->gc_alloc_color;
@ -558,6 +550,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
case primitive_tag: case primitive_tag:
case boolean_tag: case boolean_tag:
case symbol_tag: case symbol_tag:
case closure0_tag:
break; break;
case integer_tag:{ case integer_tag:{
integer_type *hp = dest; integer_type *hp = dest;
@ -974,8 +967,6 @@ size_t gc_allocated_bytes(object obj, gc_free_list * q, gc_free_list * r)
} }
if (t == double_tag) if (t == double_tag)
return gc_heap_align(sizeof(double_type)); return gc_heap_align(sizeof(double_type));
if (t == closure0_tag)
return gc_heap_align(sizeof(closure0_type));
if (t == closure1_tag) if (t == closure1_tag)
return gc_heap_align(sizeof(closure1_type)); return gc_heap_align(sizeof(closure1_type));
if (t == string_tag) { if (t == string_tag) {

View file

@ -1002,11 +1002,10 @@ typedef closure0_type *macro;
c.fn = f; \ c.fn = f; \
c.num_args = -1; c.num_args = -1;
/*
#define mclosure0(c, f) \ #define mclosure0(c, f) \
static closure0_type c = { .hdr.mark = gc_color_red, .hdr.grayed = 0, .tag = closure0_tag, .fn = f, .num_args = -1 }; / * TODO: need a new macro that initializes num_args * / static closure0_type c = { .hdr.mark = gc_color_red, .hdr.grayed = 0, .tag = closure0_tag, .fn = f, .num_args = -1 }; /* TODO: need a new macro that initializes num_args */
*/
/*
#define mclosure0(c,f) \ #define mclosure0(c,f) \
closure0_type c; \ closure0_type c; \
c.hdr.mark = gc_color_red; \ c.hdr.mark = gc_color_red; \
@ -1014,6 +1013,7 @@ typedef closure0_type *macro;
c.tag = closure0_tag; \ c.tag = closure0_tag; \
c.fn = f; \ c.fn = f; \
c.num_args = -1; c.num_args = -1;
*/
#define maclosure0(c,f,na) \ #define maclosure0(c,f,na) \
closure0_type c; \ closure0_type c; \

View file

@ -4718,11 +4718,6 @@ char *gc_move(char *obj, gc_thread_data * thd, int *alloci, int *heap_grown)
obj, thd, heap_grown); obj, thd, heap_grown);
return gc_fixup_moved_obj(thd, alloci, obj, hp); return gc_fixup_moved_obj(thd, alloci, obj, hp);
} }
case closure0_tag:{
closure0_type *hp =
gc_alloc(heap, sizeof(closure0_type), obj, thd, heap_grown);
return gc_fixup_moved_obj(thd, alloci, obj, hp);
}
case pair_tag:{ case pair_tag:{
list hp = gc_alloc(heap, sizeof(pair_type), obj, thd, heap_grown); list hp = gc_alloc(heap, sizeof(pair_type), obj, thd, heap_grown);
return gc_fixup_moved_obj(thd, alloci, obj, hp); return gc_fixup_moved_obj(thd, alloci, obj, hp);
@ -4783,6 +4778,8 @@ char *gc_move(char *obj, gc_thread_data * thd, int *alloci, int *heap_grown)
gc_alloc(heap, sizeof(c_opaque_type), obj, thd, heap_grown); gc_alloc(heap, sizeof(c_opaque_type), obj, thd, heap_grown);
return gc_fixup_moved_obj(thd, alloci, obj, hp); return gc_fixup_moved_obj(thd, alloci, obj, hp);
} }
case closure0_tag:
break;
case forward_tag: case forward_tag:
return (char *)forward(obj); return (char *)forward(obj);
case eof_tag: case eof_tag:
@ -4927,7 +4924,6 @@ int gc_minor(void *data, object low_limit, object high_limit, closure cont,
break; break;
} }
// No child objects to move // No child objects to move
case closure0_tag:
case macro_tag: case macro_tag:
case bytevector_tag: case bytevector_tag:
case string_tag: case string_tag:
@ -4943,6 +4939,7 @@ int gc_minor(void *data, object low_limit, object high_limit, closure cont,
case primitive_tag: case primitive_tag:
case symbol_tag: case symbol_tag:
case boolean_tag: case boolean_tag:
case closure0_tag:
default: default:
fprintf(stderr, fprintf(stderr,
"GC: unexpected object type %d for object %p\n", type_of(obj), "GC: unexpected object type %d for object %p\n", type_of(obj),