]> git.saurik.com Git - apple/objc4.git/blob - runtime/runtime.h
1979deef0db794cf4ce16c53d8ed82bba0a53f55
[apple/objc4.git] / runtime / runtime.h
1 /*
2 * Copyright (c) 1999-2007 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 #ifndef _OBJC_RUNTIME_H
25 #define _OBJC_RUNTIME_H
26
27 #include <objc/objc.h>
28 #include <stdarg.h>
29 #include <stdint.h>
30 #include <stddef.h>
31 #include <Availability.h>
32 #include <AvailabilityMacros.h>
33 #include <TargetConditionals.h>
34
35 #if TARGET_OS_MAC
36 #include <sys/types.h>
37 #endif
38
39
40 /* Types */
41
42 typedef struct objc_method *Method;
43 typedef struct objc_ivar *Ivar;
44 typedef struct objc_category *Category;
45 typedef struct objc_property *objc_property_t;
46
47 struct objc_class {
48 Class isa;
49
50 #if !__OBJC2__
51 Class super_class OBJC2_UNAVAILABLE;
52 const char *name OBJC2_UNAVAILABLE;
53 long version OBJC2_UNAVAILABLE;
54 long info OBJC2_UNAVAILABLE;
55 long instance_size OBJC2_UNAVAILABLE;
56 struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
57 struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
58 struct objc_cache *cache OBJC2_UNAVAILABLE;
59 struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
60 #endif
61
62 } OBJC2_UNAVAILABLE;
63 /* Use `Class` instead of `struct objc_class *` */
64
65 #ifdef __OBJC__
66 @class Protocol;
67 #else
68 typedef struct objc_object Protocol;
69 #endif
70
71 struct objc_method_description {
72 SEL name;
73 char *types;
74 };
75
76 typedef struct {
77 const char *name;
78 const char *value;
79 } objc_property_attribute_t;
80
81
82 /* Functions */
83
84 OBJC_EXPORT id object_copy(id obj, size_t size)
85 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0)
86 OBJC_ARC_UNAVAILABLE;
87 OBJC_EXPORT id object_dispose(id obj)
88 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0)
89 OBJC_ARC_UNAVAILABLE;
90
91 OBJC_EXPORT Class object_getClass(id obj)
92 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
93 OBJC_EXPORT Class object_setClass(id obj, Class cls)
94 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
95
96 OBJC_EXPORT const char *object_getClassName(id obj)
97 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
98 OBJC_EXPORT void *object_getIndexedIvars(id obj)
99 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0)
100 OBJC_ARC_UNAVAILABLE;
101
102 OBJC_EXPORT id object_getIvar(id obj, Ivar ivar)
103 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
104 OBJC_EXPORT void object_setIvar(id obj, Ivar ivar, id value)
105 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
106
107 OBJC_EXPORT Ivar object_setInstanceVariable(id obj, const char *name, void *value)
108 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0)
109 OBJC_ARC_UNAVAILABLE;
110 OBJC_EXPORT Ivar object_getInstanceVariable(id obj, const char *name, void **outValue)
111 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0)
112 OBJC_ARC_UNAVAILABLE;
113
114 OBJC_EXPORT id objc_getClass(const char *name)
115 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
116 OBJC_EXPORT id objc_getMetaClass(const char *name)
117 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
118 OBJC_EXPORT id objc_lookUpClass(const char *name)
119 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
120 OBJC_EXPORT id objc_getRequiredClass(const char *name)
121 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
122 OBJC_EXPORT Class objc_getFutureClass(const char *name)
123 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0)
124 OBJC_ARC_UNAVAILABLE;
125 OBJC_EXPORT void objc_setFutureClass(Class cls, const char *name)
126 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0)
127 OBJC_ARC_UNAVAILABLE;
128 OBJC_EXPORT int objc_getClassList(Class *buffer, int bufferCount)
129 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
130 OBJC_EXPORT Class *objc_copyClassList(unsigned int *outCount)
131 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_3_1);
132
133 OBJC_EXPORT Protocol *objc_getProtocol(const char *name)
134 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
135 OBJC_EXPORT Protocol * __unsafe_unretained *objc_copyProtocolList(unsigned int *outCount)
136 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
137
138 OBJC_EXPORT const char *class_getName(Class cls)
139 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
140 OBJC_EXPORT BOOL class_isMetaClass(Class cls)
141 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
142 OBJC_EXPORT Class class_getSuperclass(Class cls)
143 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
144 OBJC_EXPORT Class class_setSuperclass(Class cls, Class newSuper)
145 AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER_BUT_DEPRECATED;
146
147 OBJC_EXPORT int class_getVersion(Class cls)
148 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
149 OBJC_EXPORT void class_setVersion(Class cls, int version)
150 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
151
152 OBJC_EXPORT size_t class_getInstanceSize(Class cls)
153 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
154
155 OBJC_EXPORT Ivar class_getInstanceVariable(Class cls, const char *name)
156 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
157 OBJC_EXPORT Ivar class_getClassVariable(Class cls, const char *name)
158 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
159 OBJC_EXPORT Ivar *class_copyIvarList(Class cls, unsigned int *outCount)
160 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
161
162 OBJC_EXPORT Method class_getInstanceMethod(Class cls, SEL name)
163 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
164 OBJC_EXPORT Method class_getClassMethod(Class cls, SEL name)
165 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
166 OBJC_EXPORT IMP class_getMethodImplementation(Class cls, SEL name)
167 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
168 OBJC_EXPORT IMP class_getMethodImplementation_stret(Class cls, SEL name)
169 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
170 OBJC_EXPORT BOOL class_respondsToSelector(Class cls, SEL sel)
171 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
172 OBJC_EXPORT Method *class_copyMethodList(Class cls, unsigned int *outCount)
173 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
174
175 OBJC_EXPORT BOOL class_conformsToProtocol(Class cls, Protocol *protocol)
176 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
177 OBJC_EXPORT Protocol * __unsafe_unretained *class_copyProtocolList(Class cls, unsigned int *outCount)
178 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
179
180 OBJC_EXPORT objc_property_t class_getProperty(Class cls, const char *name)
181 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
182 OBJC_EXPORT objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
183 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
184
185 OBJC_EXPORT const uint8_t *class_getIvarLayout(Class cls)
186 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
187 OBJC_EXPORT const uint8_t *class_getWeakIvarLayout(Class cls)
188 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
189
190 OBJC_EXPORT id class_createInstance(Class cls, size_t extraBytes)
191 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0)
192 OBJC_ARC_UNAVAILABLE;
193 OBJC_EXPORT id objc_constructInstance(Class cls, void *bytes)
194 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0)
195 OBJC_ARC_UNAVAILABLE;
196 OBJC_EXPORT void *objc_destructInstance(id obj)
197 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0)
198 OBJC_ARC_UNAVAILABLE;
199
200 OBJC_EXPORT Class objc_allocateClassPair(Class superclass, const char *name,
201 size_t extraBytes)
202 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
203 OBJC_EXPORT void objc_registerClassPair(Class cls)
204 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
205 OBJC_EXPORT Class objc_duplicateClass(Class original, const char *name,
206 size_t extraBytes)
207 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
208 OBJC_EXPORT void objc_disposeClassPair(Class cls)
209 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
210
211 OBJC_EXPORT BOOL class_addMethod(Class cls, SEL name, IMP imp,
212 const char *types)
213 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
214 OBJC_EXPORT IMP class_replaceMethod(Class cls, SEL name, IMP imp,
215 const char *types)
216 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
217 OBJC_EXPORT BOOL class_addIvar(Class cls, const char *name, size_t size,
218 uint8_t alignment, const char *types)
219 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
220 OBJC_EXPORT BOOL class_addProtocol(Class cls, Protocol *protocol)
221 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
222 OBJC_EXPORT BOOL class_addProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount)
223 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
224 OBJC_EXPORT void class_replaceProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount)
225 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
226 OBJC_EXPORT void class_setIvarLayout(Class cls, const uint8_t *layout)
227 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
228 OBJC_EXPORT void class_setWeakIvarLayout(Class cls, const uint8_t *layout)
229 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
230
231
232 OBJC_EXPORT SEL method_getName(Method m)
233 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
234 OBJC_EXPORT IMP method_getImplementation(Method m)
235 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
236 OBJC_EXPORT const char *method_getTypeEncoding(Method m)
237 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
238
239 OBJC_EXPORT unsigned int method_getNumberOfArguments(Method m)
240 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
241 OBJC_EXPORT char *method_copyReturnType(Method m)
242 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
243 OBJC_EXPORT char *method_copyArgumentType(Method m, unsigned int index)
244 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
245 OBJC_EXPORT void method_getReturnType(Method m, char *dst, size_t dst_len)
246 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
247 OBJC_EXPORT void method_getArgumentType(Method m, unsigned int index,
248 char *dst, size_t dst_len)
249 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
250 OBJC_EXPORT struct objc_method_description *method_getDescription(Method m)
251 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
252
253 OBJC_EXPORT IMP method_setImplementation(Method m, IMP imp)
254 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
255 OBJC_EXPORT void method_exchangeImplementations(Method m1, Method m2)
256 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
257
258 OBJC_EXPORT const char *ivar_getName(Ivar v)
259 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
260 OBJC_EXPORT const char *ivar_getTypeEncoding(Ivar v)
261 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
262 OBJC_EXPORT ptrdiff_t ivar_getOffset(Ivar v)
263 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
264
265 OBJC_EXPORT const char *property_getName(objc_property_t property)
266 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
267 OBJC_EXPORT const char *property_getAttributes(objc_property_t property)
268 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
269 OBJC_EXPORT objc_property_attribute_t *property_copyAttributeList(objc_property_t property, unsigned int *outCount)
270 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
271 OBJC_EXPORT char *property_copyAttributeValue(objc_property_t property, const char *attributeName)
272 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
273
274 OBJC_EXPORT BOOL protocol_conformsToProtocol(Protocol *proto, Protocol *other)
275 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
276 OBJC_EXPORT BOOL protocol_isEqual(Protocol *proto, Protocol *other)
277 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
278 OBJC_EXPORT const char *protocol_getName(Protocol *p)
279 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
280 OBJC_EXPORT struct objc_method_description protocol_getMethodDescription(Protocol *p, SEL aSel, BOOL isRequiredMethod, BOOL isInstanceMethod)
281 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
282 OBJC_EXPORT struct objc_method_description *protocol_copyMethodDescriptionList(Protocol *p, BOOL isRequiredMethod, BOOL isInstanceMethod, unsigned int *outCount)
283 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
284 OBJC_EXPORT objc_property_t protocol_getProperty(Protocol *proto, const char *name, BOOL isRequiredProperty, BOOL isInstanceProperty)
285 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
286 OBJC_EXPORT objc_property_t *protocol_copyPropertyList(Protocol *proto, unsigned int *outCount)
287 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
288 OBJC_EXPORT Protocol * __unsafe_unretained *protocol_copyProtocolList(Protocol *proto, unsigned int *outCount)
289 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
290
291 OBJC_EXPORT Protocol *objc_allocateProtocol(const char *name)
292 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
293 OBJC_EXPORT void objc_registerProtocol(Protocol *proto)
294 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
295 OBJC_EXPORT void protocol_addMethodDescription(Protocol *proto, SEL name, const char *types, BOOL isRequiredMethod, BOOL isInstanceMethod)
296 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
297 OBJC_EXPORT void protocol_addProtocol(Protocol *proto, Protocol *addition)
298 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
299 OBJC_EXPORT void protocol_addProperty(Protocol *proto, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount, BOOL isRequiredProperty, BOOL isInstanceProperty)
300 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
301
302 OBJC_EXPORT const char **objc_copyImageNames(unsigned int *outCount)
303 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
304 OBJC_EXPORT const char *class_getImageName(Class cls)
305 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
306 OBJC_EXPORT const char **objc_copyClassNamesForImage(const char *image,
307 unsigned int *outCount)
308 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
309
310 OBJC_EXPORT const char *sel_getName(SEL sel)
311 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
312 OBJC_EXPORT SEL sel_getUid(const char *str)
313 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
314 OBJC_EXPORT SEL sel_registerName(const char *str)
315 __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
316 OBJC_EXPORT BOOL sel_isEqual(SEL lhs, SEL rhs)
317 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
318
319 OBJC_EXPORT void objc_enumerationMutation(id)
320 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
321 OBJC_EXPORT void objc_setEnumerationMutationHandler(void (*handler)(id))
322 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
323
324 OBJC_EXPORT void objc_setForwardHandler(void *fwd, void *fwd_stret)
325 __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
326
327 OBJC_EXPORT IMP imp_implementationWithBlock(id block)
328 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
329 OBJC_EXPORT id imp_getBlock(IMP anImp)
330 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
331 OBJC_EXPORT BOOL imp_removeBlock(IMP anImp)
332 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
333
334
335 /* Associated Object support. */
336
337 /* objc_setAssociatedObject() options */
338 enum {
339 OBJC_ASSOCIATION_ASSIGN = 0,
340 OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
341 OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
342 OBJC_ASSOCIATION_RETAIN = 01401,
343 OBJC_ASSOCIATION_COPY = 01403
344 };
345 typedef uintptr_t objc_AssociationPolicy;
346
347 OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
348 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);
349 OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)
350 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);
351 OBJC_EXPORT void objc_removeAssociatedObjects(id object)
352 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);
353
354
355 // API to be called by clients of objects
356
357 OBJC_EXPORT id objc_loadWeak(id *location)
358 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0);
359 // returns value stored (either obj or NULL)
360 OBJC_EXPORT id objc_storeWeak(id *location, id obj)
361 __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0);
362
363
364 #define _C_ID '@'
365 #define _C_CLASS '#'
366 #define _C_SEL ':'
367 #define _C_CHR 'c'
368 #define _C_UCHR 'C'
369 #define _C_SHT 's'
370 #define _C_USHT 'S'
371 #define _C_INT 'i'
372 #define _C_UINT 'I'
373 #define _C_LNG 'l'
374 #define _C_ULNG 'L'
375 #define _C_LNG_LNG 'q'
376 #define _C_ULNG_LNG 'Q'
377 #define _C_FLT 'f'
378 #define _C_DBL 'd'
379 #define _C_BFLD 'b'
380 #define _C_BOOL 'B'
381 #define _C_VOID 'v'
382 #define _C_UNDEF '?'
383 #define _C_PTR '^'
384 #define _C_CHARPTR '*'
385 #define _C_ATOM '%'
386 #define _C_ARY_B '['
387 #define _C_ARY_E ']'
388 #define _C_UNION_B '('
389 #define _C_UNION_E ')'
390 #define _C_STRUCT_B '{'
391 #define _C_STRUCT_E '}'
392 #define _C_VECTOR '!'
393 #define _C_CONST 'r'
394
395
396 /* Obsolete types */
397
398 #if !__OBJC2__
399
400 #define CLS_GETINFO(cls,infomask) ((cls)->info & (infomask))
401 #define CLS_SETINFO(cls,infomask) ((cls)->info |= (infomask))
402
403 // class is not a metaclass
404 #define CLS_CLASS 0x1
405 // class is a metaclass
406 #define CLS_META 0x2
407 // class's +initialize method has completed
408 #define CLS_INITIALIZED 0x4
409 // class is posing
410 #define CLS_POSING 0x8
411 // unused
412 #define CLS_MAPPED 0x10
413 // class and subclasses need cache flush during image loading
414 #define CLS_FLUSH_CACHE 0x20
415 // method cache should grow when full
416 #define CLS_GROW_CACHE 0x40
417 // unused
418 #define CLS_NEED_BIND 0x80
419 // methodLists is array of method lists
420 #define CLS_METHOD_ARRAY 0x100
421 // the JavaBridge constructs classes with these markers
422 #define CLS_JAVA_HYBRID 0x200
423 #define CLS_JAVA_CLASS 0x400
424 // thread-safe +initialize
425 #define CLS_INITIALIZING 0x800
426 // bundle unloading
427 #define CLS_FROM_BUNDLE 0x1000
428 // C++ ivar support
429 #define CLS_HAS_CXX_STRUCTORS 0x2000
430 // Lazy method list arrays
431 #define CLS_NO_METHOD_ARRAY 0x4000
432 // +load implementation
433 #define CLS_HAS_LOAD_METHOD 0x8000
434 // objc_allocateClassPair API
435 #define CLS_CONSTRUCTING 0x10000
436 // class compiled with bigger class structure
437 #define CLS_EXT 0x20000
438
439
440 struct objc_method_description_list {
441 int count;
442 struct objc_method_description list[1];
443 };
444
445
446 struct objc_protocol_list {
447 struct objc_protocol_list *next;
448 long count;
449 Protocol *list[1];
450 };
451
452
453 struct objc_category {
454 char *category_name OBJC2_UNAVAILABLE;
455 char *class_name OBJC2_UNAVAILABLE;
456 struct objc_method_list *instance_methods OBJC2_UNAVAILABLE;
457 struct objc_method_list *class_methods OBJC2_UNAVAILABLE;
458 struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
459 } OBJC2_UNAVAILABLE;
460
461
462 struct objc_ivar {
463 char *ivar_name OBJC2_UNAVAILABLE;
464 char *ivar_type OBJC2_UNAVAILABLE;
465 int ivar_offset OBJC2_UNAVAILABLE;
466 #ifdef __LP64__
467 int space OBJC2_UNAVAILABLE;
468 #endif
469 } OBJC2_UNAVAILABLE;
470
471 struct objc_ivar_list {
472 int ivar_count OBJC2_UNAVAILABLE;
473 #ifdef __LP64__
474 int space OBJC2_UNAVAILABLE;
475 #endif
476 /* variable length structure */
477 struct objc_ivar ivar_list[1] OBJC2_UNAVAILABLE;
478 } OBJC2_UNAVAILABLE;
479
480
481 struct objc_method {
482 SEL method_name OBJC2_UNAVAILABLE;
483 char *method_types OBJC2_UNAVAILABLE;
484 IMP method_imp OBJC2_UNAVAILABLE;
485 } OBJC2_UNAVAILABLE;
486
487 struct objc_method_list {
488 struct objc_method_list *obsolete OBJC2_UNAVAILABLE;
489
490 int method_count OBJC2_UNAVAILABLE;
491 #ifdef __LP64__
492 int space OBJC2_UNAVAILABLE;
493 #endif
494 /* variable length structure */
495 struct objc_method method_list[1] OBJC2_UNAVAILABLE;
496 } OBJC2_UNAVAILABLE;
497
498
499 typedef struct objc_symtab *Symtab OBJC2_UNAVAILABLE;
500
501 struct objc_symtab {
502 unsigned long sel_ref_cnt OBJC2_UNAVAILABLE;
503 SEL *refs OBJC2_UNAVAILABLE;
504 unsigned short cls_def_cnt OBJC2_UNAVAILABLE;
505 unsigned short cat_def_cnt OBJC2_UNAVAILABLE;
506 void *defs[1] /* variable size */ OBJC2_UNAVAILABLE;
507 } OBJC2_UNAVAILABLE;
508
509
510 typedef struct objc_cache *Cache OBJC2_UNAVAILABLE;
511
512 #define CACHE_BUCKET_NAME(B) ((B)->method_name)
513 #define CACHE_BUCKET_IMP(B) ((B)->method_imp)
514 #define CACHE_BUCKET_VALID(B) (B)
515 #ifndef __LP64__
516 #define CACHE_HASH(sel, mask) (((uintptr_t)(sel)>>2) & (mask))
517 #else
518 #define CACHE_HASH(sel, mask) (((unsigned int)((uintptr_t)(sel)>>3)) & (mask))
519 #endif
520 struct objc_cache {
521 unsigned int mask /* total = mask + 1 */ OBJC2_UNAVAILABLE;
522 unsigned int occupied OBJC2_UNAVAILABLE;
523 Method buckets[1] OBJC2_UNAVAILABLE;
524 };
525
526
527 typedef struct objc_module *Module OBJC2_UNAVAILABLE;
528
529 struct objc_module {
530 unsigned long version OBJC2_UNAVAILABLE;
531 unsigned long size OBJC2_UNAVAILABLE;
532 const char *name OBJC2_UNAVAILABLE;
533 Symtab symtab OBJC2_UNAVAILABLE;
534 } OBJC2_UNAVAILABLE;
535
536 #else
537
538 struct objc_method_list;
539
540 #endif
541
542
543 /* Obsolete functions */
544
545 OBJC_EXPORT IMP class_lookupMethod(Class cls, SEL sel)
546 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5, __IPHONE_2_0,__IPHONE_2_0);
547 OBJC_EXPORT BOOL class_respondsToMethod(Class cls, SEL sel)
548 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5, __IPHONE_2_0,__IPHONE_2_0);
549 OBJC_EXPORT void _objc_flush_caches(Class cls)
550 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5, __IPHONE_2_0,__IPHONE_2_0);
551
552 OBJC_EXPORT id object_copyFromZone(id anObject, size_t nBytes, void *z)
553 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5, __IPHONE_NA,__IPHONE_NA)
554 OBJC_ARC_UNAVAILABLE;
555 OBJC_EXPORT id object_realloc(id anObject, size_t nBytes) OBJC2_UNAVAILABLE;
556 OBJC_EXPORT id object_reallocFromZone(id anObject, size_t nBytes, void *z) OBJC2_UNAVAILABLE;
557
558 #define OBSOLETE_OBJC_GETCLASSES 1
559 OBJC_EXPORT void *objc_getClasses(void) OBJC2_UNAVAILABLE;
560 OBJC_EXPORT void objc_addClass(Class myClass) OBJC2_UNAVAILABLE;
561 OBJC_EXPORT void objc_setClassHandler(int (*)(const char *)) OBJC2_UNAVAILABLE;
562 OBJC_EXPORT void objc_setMultithreaded (BOOL flag) OBJC2_UNAVAILABLE;
563
564 OBJC_EXPORT id class_createInstanceFromZone(Class, size_t idxIvars, void *z)
565 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5, __IPHONE_NA,__IPHONE_NA)
566 OBJC_ARC_UNAVAILABLE;
567
568 OBJC_EXPORT void class_addMethods(Class, struct objc_method_list *) OBJC2_UNAVAILABLE;
569 OBJC_EXPORT void class_removeMethods(Class, struct objc_method_list *) OBJC2_UNAVAILABLE;
570 OBJC_EXPORT void _objc_resolve_categories_for_class(Class cls) OBJC2_UNAVAILABLE;
571
572 OBJC_EXPORT Class class_poseAs(Class imposter, Class original) OBJC2_UNAVAILABLE;
573
574 OBJC_EXPORT unsigned int method_getSizeOfArguments(Method m) OBJC2_UNAVAILABLE;
575 OBJC_EXPORT unsigned method_getArgumentInfo(struct objc_method *m, int arg, const char **type, int *offset) OBJC2_UNAVAILABLE;
576
577 OBJC_EXPORT BOOL class_respondsToMethod(Class, SEL) OBJC2_UNAVAILABLE;
578 OBJC_EXPORT IMP class_lookupMethod(Class, SEL) OBJC2_UNAVAILABLE;
579 OBJC_EXPORT Class objc_getOrigClass(const char *name) OBJC2_UNAVAILABLE;
580 #define OBJC_NEXT_METHOD_LIST 1
581 OBJC_EXPORT struct objc_method_list *class_nextMethodList(Class, void **) OBJC2_UNAVAILABLE;
582 // usage for nextMethodList
583 //
584 // void *iterator = 0;
585 // struct objc_method_list *mlist;
586 // while ( mlist = class_nextMethodList( cls, &iterator ) )
587 // ;
588
589 OBJC_EXPORT id (*_alloc)(Class, size_t) OBJC2_UNAVAILABLE;
590 OBJC_EXPORT id (*_copy)(id, size_t) OBJC2_UNAVAILABLE;
591 OBJC_EXPORT id (*_realloc)(id, size_t) OBJC2_UNAVAILABLE;
592 OBJC_EXPORT id (*_dealloc)(id) OBJC2_UNAVAILABLE;
593 OBJC_EXPORT id (*_zoneAlloc)(Class, size_t, void *) OBJC2_UNAVAILABLE;
594 OBJC_EXPORT id (*_zoneRealloc)(id, size_t, void *) OBJC2_UNAVAILABLE;
595 OBJC_EXPORT id (*_zoneCopy)(id, size_t, void *) OBJC2_UNAVAILABLE;
596 OBJC_EXPORT void (*_error)(id, const char *, va_list) OBJC2_UNAVAILABLE;
597
598 #endif