struct stack_frame_t *frame = stack_frame_head;
GC_static_object *staticObject = staticObjects.top;
val_t object;
+ struct nitni_ref_array_link *local_ref_array_link; /* for native interface */
gc_allocation_pointer = gc_heap_pointer;
gc_scavenging_pointer = gc_heap_pointer;
frame->REG[j] = GC_evacuation((obj_t)object);
}
}
+
+ /* Process C references to Nit objects */
+ local_ref_array_link = frame->nitni_local_ref_head;
+ while ( local_ref_array_link != NULL )
+ {
+ for (j = 0; j < local_ref_array_link->count; j++) {
+ object = local_ref_array_link->reg[j]->val;
+ if (!ISNULL(object) && ISOBJ(object)) {
+ local_ref_array_link->reg[j]->val = GC_evacuation((obj_t)object);
+ }
+ }
+ local_ref_array_link = local_ref_array_link->next;
+ }
+
if (frame == frame->prev) break;
frame = frame->prev;
}