xref: /aosp_15_r20/external/clang/test/ARCMT/Common.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li NS_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 Li NS_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 Li NS_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 Li NS_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