static void gc_mark_objects(CRB_Interpreter *inter) { CRB_Object *obj; Variable *v; CRB_LocalEnvironment *lv; int i; for (obj = inter->heap.header; obj; obj = obj->next) { gc_reset_mark(obj); } for (v = inter->variable; v; v = v->next) { if (dkc_is_object_value(v->value.type)) { gc_mark(v->value.u.object); } } for (lv = inter->top_environment; lv; lv = lv->next) { for (v = lv->variable; v; v = v->next) { if (dkc_is_object_value(v->value.type)) { gc_mark(v->value.u.object); } } gc_mark_ref_in_native_method(lv); } for (i = 0; i < inter->stack.stack_pointer; i++) { if (dkc_is_object_value(inter->stack.stack[i].type)) { gc_mark(inter->stack.stack[i].u.object); } } }
static void gc_mark_objects(MVM_VirtualMachine *mvm) { MVM_Object *obj; int i; for (obj = mvm->heap.header; obj; obj = obj->next) { gc_reset_mark(obj); } for (i = 0; i < mvm->static_v.variable_count; i++) { if (mvm->executable->global_variable[i].type->basic_type == MVM_STRING_TYPE || (mvm->executable->global_variable[i].type->derive != NULL && (mvm->executable->global_variable[i].type->derive[0].tag == MVM_ARRAY_DERIVE))) { gc_mark(mvm->static_v.variable[i].object); } } for (i = 0; i < mvm->stack.stack_pointer; i++) { if (mvm->stack.pointer_flags[i]) { gc_mark(mvm->stack.stack[i].object); } } }