Tighten up loading of __weak variables slightly.

main
theraven 15 years ago
parent 69e53c4cdb
commit e7a6be5584

29
arc.m

@ -287,7 +287,14 @@ id objc_storeWeak(id *addr, id obj)
} }
if (&_NSConcreteStackBlock == obj->isa) if (&_NSConcreteStackBlock == obj->isa)
{ {
block_load_weak(obj); obj = block_load_weak(obj);
}
else if (objc_test_class_flag(obj->isa, objc_class_flag_fast_arc))
{
if ((*(((intptr_t*)obj) - 1)) <= 0)
{
return nil;
}
} }
else else
{ {
@ -361,10 +368,26 @@ void objc_delete_weak_refs(id obj)
} }
} }
id objc_loadWeakRetained(id* obj) id objc_loadWeakRetained(id* addr)
{ {
LOCK_FOR_SCOPE(&weakRefLock); LOCK_FOR_SCOPE(&weakRefLock);
return objc_retain(*obj); id obj = *addr;
if (&_NSConcreteStackBlock == obj->isa)
{
obj = block_load_weak(obj);
}
else if (objc_test_class_flag(obj->isa, objc_class_flag_fast_arc))
{
if ((*(((intptr_t*)obj) - 1)) <= 0)
{
return nil;
}
}
else
{
obj = _objc_weak_load(obj);
}
return objc_retain(obj);
} }
id objc_loadWeak(id* object) id objc_loadWeak(id* object)

Loading…
Cancel
Save