X-Git-Url: http://nitlanguage.org diff --git a/clib/gc.c b/clib/gc.c index 2cb8675..ad051d9 100644 --- a/clib/gc.c +++ b/clib/gc.c @@ -146,6 +146,7 @@ static void GC_collect(void) { struct stack_frame_t *frame = stack_frame_head; GC_static_object *staticObject = staticObjects.top; val_t object; + struct nitni_ref *global_ref; struct nitni_ref_array_link *local_ref_array_link; /* for native interface */ gc_allocation_pointer = gc_heap_pointer; @@ -160,6 +161,16 @@ static void GC_collect(void) { staticObject = staticObject->next; } + /* Process global reference to Nit objects from C code */ + global_ref = nitni_global_ref_list->head; + while (global_ref != NULL) { + object = global_ref->val; + if (!ISNULL(object) && ISOBJ(object)) { + global_ref->val = GC_evacuation((obj_t)object); + } + global_ref = global_ref->next; + } + /* Process function frames (local variables) */ while (frame != NULL) { for (j = 0; j < frame->REG_size; j++) {