static void uNewWeak(uObject* object) { if (object->__weakptr) return; uWeakObject* weak = (uWeakObject*)U_MALLOC_WEAKREF(sizeof(uWeakObject)); weak->Object = object; weak->RefCount = 1; weak->ZombieState = uWeakObject::Healthy; weak->ZombieStateIntercept = 0; object->__weakptr = weak; //#if #(GC:Defined) //#ifdef DEBUG_GC // GC_REGISTER_FINALIZER( // weak, (GC_finalization_proc)&uGCFinalizeWeakRef, object->__type, 0, 0); //#endif // // GC_GENERAL_REGISTER_DISAPPEARING_LINK((void**)&weak->Object, object); //#endif }
static void uAllocWeakObject(uObject *obj) { if (obj->__obj_weak) return; uWeakObject *weak = (uWeakObject*)U_MALLOC_WEAKREF(sizeof(uWeakObject)); weak->Object = obj; weak->RefCount = 1; weak->ZombieState = uWeakObject::Healthy; weak->ZombieStateIntercept = 0; obj->__obj_weak = weak; }