1*67e74705SXin Li #if __has_feature(objc_arr) 2*67e74705SXin Li #define NS_AUTOMATED_REFCOUNT_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) 3*67e74705SXin Li #else 4*67e74705SXin Li #define NS_AUTOMATED_REFCOUNT_UNAVAILABLE 5*67e74705SXin Li #endif 6*67e74705SXin Li 7*67e74705SXin Li #define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) 8*67e74705SXin Li #define CF_CONSUMED __attribute__((cf_consumed)) 9*67e74705SXin Li #define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) 10*67e74705SXin Li 11*67e74705SXin Li #define NS_INLINE static __inline__ __attribute__((always_inline)) 12*67e74705SXin Li #define nil ((void*) 0) 13*67e74705SXin Li #define NULL ((void*)0) 14*67e74705SXin Li 15*67e74705SXin Li typedef int BOOL; 16*67e74705SXin Li typedef unsigned NSUInteger; 17*67e74705SXin Li typedef int int32_t; 18*67e74705SXin Li typedef unsigned char uint8_t; 19*67e74705SXin Li typedef int32_t UChar32; 20*67e74705SXin Li typedef unsigned char UChar; 21*67e74705SXin Li 22*67e74705SXin Li typedef struct _NSZone NSZone; 23*67e74705SXin Li 24*67e74705SXin Li typedef const void * CFTypeRef; 25*67e74705SXin Li CFTypeRef CFRetain(CFTypeRef cf); 26*67e74705SXin Li CFTypeRef CFMakeCollectable(CFTypeRef cf) NS_AUTOMATED_REFCOUNT_UNAVAILABLE; 27*67e74705SXin Li 28*67e74705SXin Li NS_INLINE NS_RETURNS_RETAINED id NSMakeCollectable(CFTypeRef CF_CONSUMED cf) NS_AUTOMATED_REFCOUNT_UNAVAILABLE; 29*67e74705SXin Li 30*67e74705SXin Li @protocol NSObject 31*67e74705SXin Li - (BOOL)isEqual:(id)object; 32*67e74705SXin Li - (NSZone *)zone NS_AUTOMATED_REFCOUNT_UNAVAILABLE; 33*67e74705SXin Li - (id)retain NS_AUTOMATED_REFCOUNT_UNAVAILABLE; 34*67e74705SXin Li - (NSUInteger)retainCount NS_AUTOMATED_REFCOUNT_UNAVAILABLE; 35*67e74705SXin Li - (oneway void)release NS_AUTOMATED_REFCOUNT_UNAVAILABLE; 36*67e74705SXin Li - (id)autorelease NS_AUTOMATED_REFCOUNT_UNAVAILABLE; 37*67e74705SXin Li @end 38*67e74705SXin Li 39*67e74705SXin Li @interface NSObject <NSObject> {} 40*67e74705SXin Li - (id)init; 41*67e74705SXin Li 42*67e74705SXin Li + (id)new; 43*67e74705SXin Li + (id)alloc; 44*67e74705SXin Li - (void)dealloc; 45*67e74705SXin Li 46*67e74705SXin Li - (void)finalize; 47*67e74705SXin Li 48*67e74705SXin Li - (id)copy; 49*67e74705SXin Li - (id)mutableCopy; 50*67e74705SXin Li @end 51*67e74705SXin Li 52*67e74705SXin Li NS_AUTOMATED_REFCOUNT_UNAVAILABLE 53*67e74705SXin Li @interface NSAutoreleasePool : NSObject { 54*67e74705SXin Li @private 55*67e74705SXin Li void *_token; 56*67e74705SXin Li void *_reserved3; 57*67e74705SXin Li void *_reserved2; 58*67e74705SXin Li void *_reserved; 59*67e74705SXin Li } 60*67e74705SXin Li 61*67e74705SXin Li + (void)addObject:(id)anObject; 62*67e74705SXin Li 63*67e74705SXin Li - (void)addObject:(id)anObject; 64*67e74705SXin Li 65*67e74705SXin Li - (void)drain; 66*67e74705SXin Li 67*67e74705SXin Li @end 68*67e74705SXin Li 69*67e74705SXin Li typedef const void* objc_objectptr_t; 70*67e74705SXin Li extern __attribute__((ns_returns_retained)) id objc_retainedObject(objc_objectptr_t __attribute__((cf_consumed)) pointer); 71*67e74705SXin Li extern __attribute__((ns_returns_not_retained)) id objc_unretainedObject(objc_objectptr_t pointer); 72*67e74705SXin Li extern objc_objectptr_t objc_unretainedPointer(id object); 73*67e74705SXin Li 74*67e74705SXin Li #define dispatch_retain(object) ({ dispatch_object_t _o = (object); _dispatch_object_validate(_o); (void)[_o retain]; }) 75*67e74705SXin Li #define dispatch_release(object) ({ dispatch_object_t _o = (object); _dispatch_object_validate(_o); [_o release]; }) 76*67e74705SXin Li #define xpc_retain(object) ({ xpc_object_t _o = (object); _xpc_object_validate(_o); [_o retain]; }) 77*67e74705SXin Li #define xpc_release(object) ({ xpc_object_t _o = (object); _xpc_object_validate(_o); [_o release]; }) 78*67e74705SXin Li 79*67e74705SXin Li typedef id dispatch_object_t; 80*67e74705SXin Li typedef id xpc_object_t; 81*67e74705SXin Li 82*67e74705SXin Li void _dispatch_object_validate(dispatch_object_t object); 83*67e74705SXin Li void _xpc_object_validate(xpc_object_t object); 84*67e74705SXin Li 85*67e74705SXin Li #if __has_feature(objc_arc) 86*67e74705SXin Li CFBridgingRetain(id X)87*67e74705SXin LiNS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetain(id X) { 88*67e74705SXin Li return (__bridge_retained CFTypeRef)X; 89*67e74705SXin Li } 90*67e74705SXin Li CFBridgingRelease(CFTypeRef CF_CONSUMED X)91*67e74705SXin LiNS_INLINE id CFBridgingRelease(CFTypeRef CF_CONSUMED X) { 92*67e74705SXin Li return (__bridge_transfer id)X; 93*67e74705SXin Li } 94*67e74705SXin Li 95*67e74705SXin Li #else 96*67e74705SXin Li CFBridgingRetain(id X)97*67e74705SXin LiNS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetain(id X) { 98*67e74705SXin Li return X ? CFRetain((CFTypeRef)X) : NULL; 99*67e74705SXin Li } 100*67e74705SXin Li CFBridgingRelease(CFTypeRef CF_CONSUMED X)101*67e74705SXin LiNS_INLINE id CFBridgingRelease(CFTypeRef CF_CONSUMED X) { 102*67e74705SXin Li return [(id)CFMakeCollectable(X) autorelease]; 103*67e74705SXin Li } 104*67e74705SXin Li 105*67e74705SXin Li #endif 106*67e74705SXin Li 107*67e74705SXin Li void *_Block_copy(const void *aBlock); 108*67e74705SXin Li void _Block_release(const void *aBlock); 109*67e74705SXin Li #define Block_copy(...) ((__typeof(__VA_ARGS__))_Block_copy((const void *)(__VA_ARGS__))) 110*67e74705SXin Li #define Block_release(...) _Block_release((const void *)(__VA_ARGS__)) 111