Last active
July 1, 2016 09:41
-
-
Save phnessu4/f8db7804719630f36ea179265e09af09 to your computer and use it in GitHub Desktop.
clang rewrite-objc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef __OBJC2__ | |
#define __OBJC2__ | |
#endif | |
struct objc_selector; struct objc_class; | |
struct __rw_objc_super { | |
struct objc_object *object; | |
struct objc_object *superClass; | |
__rw_objc_super(struct objc_object *o, struct objc_object *s) : object(o), superClass(s) {} | |
}; | |
#ifndef _REWRITER_typedef_Protocol | |
typedef struct objc_object Protocol; | |
#define _REWRITER_typedef_Protocol | |
#endif | |
#define __OBJC_RW_DLLIMPORT extern | |
__OBJC_RW_DLLIMPORT void objc_msgSend(void); | |
__OBJC_RW_DLLIMPORT void objc_msgSendSuper(void); | |
__OBJC_RW_DLLIMPORT void objc_msgSend_stret(void); | |
__OBJC_RW_DLLIMPORT void objc_msgSendSuper_stret(void); | |
__OBJC_RW_DLLIMPORT void objc_msgSend_fpret(void); | |
__OBJC_RW_DLLIMPORT struct objc_class *objc_getClass(const char *); | |
__OBJC_RW_DLLIMPORT struct objc_class *class_getSuperclass(struct objc_class *); | |
__OBJC_RW_DLLIMPORT struct objc_class *objc_getMetaClass(const char *); | |
__OBJC_RW_DLLIMPORT void objc_exception_throw( struct objc_object *); | |
__OBJC_RW_DLLIMPORT int objc_sync_enter( struct objc_object *); | |
__OBJC_RW_DLLIMPORT int objc_sync_exit( struct objc_object *); | |
__OBJC_RW_DLLIMPORT Protocol *objc_getProtocol(const char *); | |
#ifdef _WIN64 | |
typedef unsigned long long _WIN_NSUInteger; | |
#else | |
typedef unsigned int _WIN_NSUInteger; | |
#endif | |
#ifndef __FASTENUMERATIONSTATE | |
struct __objcFastEnumerationState { | |
unsigned long state; | |
void **itemsPtr; | |
unsigned long *mutationsPtr; | |
unsigned long extra[5]; | |
}; | |
__OBJC_RW_DLLIMPORT void objc_enumerationMutation(struct objc_object *); | |
#define __FASTENUMERATIONSTATE | |
#endif | |
#ifndef __NSCONSTANTSTRINGIMPL | |
struct __NSConstantStringImpl { | |
int *isa; | |
int flags; | |
char *str; | |
#if _WIN64 | |
long long length; | |
#else | |
long length; | |
#endif | |
}; | |
#ifdef CF_EXPORT_CONSTANT_STRING | |
extern "C" __declspec(dllexport) int __CFConstantStringClassReference[]; | |
#else | |
__OBJC_RW_DLLIMPORT int __CFConstantStringClassReference[]; | |
#endif | |
#define __NSCONSTANTSTRINGIMPL | |
#endif | |
#ifndef BLOCK_IMPL | |
#define BLOCK_IMPL | |
struct __block_impl { | |
void *isa; | |
int Flags; | |
int Reserved; | |
void *FuncPtr; | |
}; | |
// Runtime copy/destroy helper functions (from Block_private.h) | |
#ifdef __OBJC_EXPORT_BLOCKS | |
extern "C" __declspec(dllexport) void _Block_object_assign(void *, const void *, const int); | |
extern "C" __declspec(dllexport) void _Block_object_dispose(const void *, const int); | |
extern "C" __declspec(dllexport) void *_NSConcreteGlobalBlock[32]; | |
extern "C" __declspec(dllexport) void *_NSConcreteStackBlock[32]; | |
#else | |
__OBJC_RW_DLLIMPORT void _Block_object_assign(void *, const void *, const int); | |
__OBJC_RW_DLLIMPORT void _Block_object_dispose(const void *, const int); | |
__OBJC_RW_DLLIMPORT void *_NSConcreteGlobalBlock[32]; | |
__OBJC_RW_DLLIMPORT void *_NSConcreteStackBlock[32]; | |
#endif | |
#endif | |
#define __block | |
#define __weak | |
#include <stdarg.h> | |
struct __NSContainer_literal { | |
void * *arr; | |
__NSContainer_literal (unsigned int count, ...) { | |
va_list marker; | |
va_start(marker, count); | |
arr = new void *[count]; | |
for (unsigned i = 0; i < count; i++) | |
arr[i] = va_arg(marker, void *); | |
va_end( marker ); | |
}; | |
~__NSContainer_literal() { | |
delete[] arr; | |
} | |
}; | |
extern "C" __declspec(dllimport) void * objc_autoreleasePoolPush(void); | |
extern "C" __declspec(dllimport) void objc_autoreleasePoolPop(void *); | |
struct __AtAutoreleasePool { | |
__AtAutoreleasePool() {atautoreleasepoolobj = objc_autoreleasePoolPush();} | |
~__AtAutoreleasePool() {objc_autoreleasePoolPop(atautoreleasepoolobj);} | |
void * atautoreleasepoolobj; | |
}; | |
#define __OFFSETOFIVAR__(TYPE, MEMBER) ((long long) &((TYPE *)0)->MEMBER) | |
typedef signed char __int8_t; | |
typedef unsigned char __uint8_t; | |
typedef short __int16_t; | |
typedef unsigned short __uint16_t; | |
typedef int __int32_t; | |
typedef unsigned int __uint32_t; | |
typedef long long __int64_t; | |
typedef unsigned long long __uint64_t; | |
typedef long __darwin_intptr_t; | |
typedef unsigned int __darwin_natural_t; | |
typedef int __darwin_ct_rune_t; | |
typedef union { | |
char __mbstate8[128]; | |
long long _mbstateL; | |
} __mbstate_t; | |
typedef __mbstate_t __darwin_mbstate_t; | |
typedef long int __darwin_ptrdiff_t; | |
typedef long unsigned int __darwin_size_t; | |
typedef __builtin_va_list __darwin_va_list; | |
typedef int __darwin_wchar_t; | |
typedef __darwin_wchar_t __darwin_rune_t; | |
typedef int __darwin_wint_t; | |
typedef unsigned long __darwin_clock_t; | |
typedef __uint32_t __darwin_socklen_t; | |
typedef long __darwin_ssize_t; | |
typedef long __darwin_time_t; | |
typedef signed char int8_t; | |
typedef short int16_t; | |
typedef int int32_t; | |
typedef long long int64_t; | |
typedef unsigned char u_int8_t; | |
typedef unsigned short u_int16_t; | |
typedef unsigned int u_int32_t; | |
typedef unsigned long long u_int64_t; | |
typedef int64_t register_t; | |
typedef __darwin_intptr_t intptr_t; | |
typedef unsigned long uintptr_t; | |
typedef u_int64_t user_addr_t; | |
typedef u_int64_t user_size_t; | |
typedef int64_t user_ssize_t; | |
typedef int64_t user_long_t; | |
typedef u_int64_t user_ulong_t; | |
typedef int64_t user_time_t; | |
typedef int64_t user_off_t; | |
typedef u_int64_t syscall_arg_t; | |
typedef __int64_t __darwin_blkcnt_t; | |
typedef __int32_t __darwin_blksize_t; | |
typedef __int32_t __darwin_dev_t; | |
typedef unsigned int __darwin_fsblkcnt_t; | |
typedef unsigned int __darwin_fsfilcnt_t; | |
typedef __uint32_t __darwin_gid_t; | |
typedef __uint32_t __darwin_id_t; | |
typedef __uint64_t __darwin_ino64_t; | |
typedef __darwin_ino64_t __darwin_ino_t; | |
typedef __darwin_natural_t __darwin_mach_port_name_t; | |
typedef __darwin_mach_port_name_t __darwin_mach_port_t; | |
typedef __uint16_t __darwin_mode_t; | |
typedef __int64_t __darwin_off_t; | |
typedef __int32_t __darwin_pid_t; | |
typedef __uint32_t __darwin_sigset_t; | |
typedef __int32_t __darwin_suseconds_t; | |
typedef __uint32_t __darwin_uid_t; | |
typedef __uint32_t __darwin_useconds_t; | |
typedef unsigned char __darwin_uuid_t[16]; | |
typedef char __darwin_uuid_string_t[37]; | |
struct __darwin_pthread_handler_rec { | |
void (*__routine)(void *); | |
void *__arg; | |
struct __darwin_pthread_handler_rec *__next; | |
}; | |
struct _opaque_pthread_attr_t { | |
long __sig; | |
char __opaque[56]; | |
}; | |
struct _opaque_pthread_cond_t { | |
long __sig; | |
char __opaque[40]; | |
}; | |
struct _opaque_pthread_condattr_t { | |
long __sig; | |
char __opaque[8]; | |
}; | |
struct _opaque_pthread_mutex_t { | |
long __sig; | |
char __opaque[56]; | |
}; | |
struct _opaque_pthread_mutexattr_t { | |
long __sig; | |
char __opaque[8]; | |
}; | |
struct _opaque_pthread_once_t { | |
long __sig; | |
char __opaque[8]; | |
}; | |
struct _opaque_pthread_rwlock_t { | |
long __sig; | |
char __opaque[192]; | |
}; | |
struct _opaque_pthread_rwlockattr_t { | |
long __sig; | |
char __opaque[16]; | |
}; | |
struct _opaque_pthread_t { | |
long __sig; | |
struct __darwin_pthread_handler_rec *__cleanup_stack; | |
char __opaque[8176]; | |
}; | |
typedef struct _opaque_pthread_attr_t __darwin_pthread_attr_t; | |
typedef struct _opaque_pthread_cond_t __darwin_pthread_cond_t; | |
typedef struct _opaque_pthread_condattr_t __darwin_pthread_condattr_t; | |
typedef unsigned long __darwin_pthread_key_t; | |
typedef struct _opaque_pthread_mutex_t __darwin_pthread_mutex_t; | |
typedef struct _opaque_pthread_mutexattr_t __darwin_pthread_mutexattr_t; | |
typedef struct _opaque_pthread_once_t __darwin_pthread_once_t; | |
typedef struct _opaque_pthread_rwlock_t __darwin_pthread_rwlock_t; | |
typedef struct _opaque_pthread_rwlockattr_t __darwin_pthread_rwlockattr_t; | |
typedef struct _opaque_pthread_t *__darwin_pthread_t; | |
static inline | |
__uint16_t | |
_OSSwapInt16( | |
__uint16_t _data | |
) | |
{ | |
return ((__uint16_t)((_data << 8) | (_data >> 8))); | |
} | |
static inline | |
__uint32_t | |
_OSSwapInt32( | |
__uint32_t _data | |
) | |
{ | |
return __builtin_bswap32(_data); | |
} | |
static inline | |
__uint64_t | |
_OSSwapInt64( | |
__uint64_t _data | |
) | |
{ | |
return __builtin_bswap64(_data); | |
} | |
typedef unsigned char u_char; | |
typedef unsigned short u_short; | |
typedef unsigned int u_int; | |
typedef unsigned long u_long; | |
typedef unsigned short ushort; | |
typedef unsigned int uint; | |
typedef u_int64_t u_quad_t; | |
typedef int64_t quad_t; | |
typedef quad_t * qaddr_t; | |
typedef char * caddr_t; | |
typedef int32_t daddr_t; | |
typedef __darwin_dev_t dev_t; | |
typedef u_int32_t fixpt_t; | |
typedef __darwin_blkcnt_t blkcnt_t; | |
typedef __darwin_blksize_t blksize_t; | |
typedef __darwin_gid_t gid_t; | |
typedef __uint32_t in_addr_t; | |
typedef __uint16_t in_port_t; | |
typedef __darwin_ino_t ino_t; | |
typedef __darwin_ino64_t ino64_t; | |
typedef __int32_t key_t; | |
typedef __darwin_mode_t mode_t; | |
typedef __uint16_t nlink_t; | |
typedef __darwin_id_t id_t; | |
typedef __darwin_pid_t pid_t; | |
typedef __darwin_off_t off_t; | |
typedef int32_t segsz_t; | |
typedef int32_t swblk_t; | |
typedef __darwin_uid_t uid_t; | |
static inline __int32_t major(__uint32_t _x) | |
{ | |
return (__int32_t)(((__uint32_t)_x >> 24) & 0xff); | |
} | |
static inline __int32_t minor(__uint32_t _x) | |
{ | |
return (__int32_t)((_x) & 0xffffff); | |
} | |
static inline dev_t makedev(__uint32_t _major, __uint32_t _minor) | |
{ | |
return (dev_t)(((_major) << 24) | (_minor)); | |
} | |
typedef __darwin_clock_t clock_t; | |
typedef __darwin_size_t size_t; | |
typedef __darwin_ssize_t ssize_t; | |
typedef __darwin_time_t time_t; | |
typedef __darwin_useconds_t useconds_t; | |
typedef __darwin_suseconds_t suseconds_t; | |
typedef __darwin_size_t rsize_t; | |
typedef int errno_t; | |
extern "C" { | |
typedef struct fd_set { | |
__int32_t fds_bits[((((1024) % ((sizeof(__int32_t) * 8))) == 0) ? ((1024) / ((sizeof(__int32_t) * 8))) : (((1024) / ((sizeof(__int32_t) * 8))) + 1))]; | |
} fd_set; | |
} | |
static inline int | |
__darwin_fd_isset(int _n, const struct fd_set *_p) | |
{ | |
return (_p->fds_bits[(unsigned long)_n/(sizeof(__int32_t) * 8)] & ((__int32_t)(1<<((unsigned long)_n % (sizeof(__int32_t) * 8))))); | |
} | |
typedef __int32_t fd_mask; | |
typedef __darwin_pthread_attr_t pthread_attr_t; | |
typedef __darwin_pthread_cond_t pthread_cond_t; | |
typedef __darwin_pthread_condattr_t pthread_condattr_t; | |
typedef __darwin_pthread_mutex_t pthread_mutex_t; | |
typedef __darwin_pthread_mutexattr_t pthread_mutexattr_t; | |
typedef __darwin_pthread_once_t pthread_once_t; | |
typedef __darwin_pthread_rwlock_t pthread_rwlock_t; | |
typedef __darwin_pthread_rwlockattr_t pthread_rwlockattr_t; | |
typedef __darwin_pthread_t pthread_t; | |
typedef __darwin_pthread_key_t pthread_key_t; | |
typedef __darwin_fsblkcnt_t fsblkcnt_t; | |
typedef __darwin_fsfilcnt_t fsfilcnt_t; | |
typedef struct objc_class *Class; | |
struct objc_object { | |
Class isa __attribute__((deprecated)); | |
}; | |
typedef struct objc_object *id; | |
typedef struct objc_selector *SEL; | |
typedef id (*IMP)(id, SEL, ...); | |
typedef signed char BOOL; | |
extern "C" __attribute__((visibility("default"))) const char *sel_getName(SEL sel) | |
__attribute__((availability(macosx,introduced=10.0))); | |
extern "C" __attribute__((visibility("default"))) SEL sel_registerName(const char *str) | |
__attribute__((availability(macosx,introduced=10.0))); | |
extern "C" __attribute__((visibility("default"))) const char *object_getClassName(id obj) | |
__attribute__((availability(macosx,introduced=10.0))); | |
extern "C" __attribute__((visibility("default"))) void *object_getIndexedIvars(id obj) | |
__attribute__((availability(macosx,introduced=10.0))); | |
extern "C" __attribute__((visibility("default"))) BOOL sel_isMapped(SEL sel) | |
__attribute__((availability(macosx,introduced=10.0))); | |
extern "C" __attribute__((visibility("default"))) SEL sel_getUid(const char *str) | |
__attribute__((availability(macosx,introduced=10.0))); | |
typedef const void* objc_objectptr_t; | |
typedef long NSInteger; | |
typedef unsigned long NSUInteger; | |
// @class NSString; | |
#ifndef _REWRITER_typedef_NSString | |
#define _REWRITER_typedef_NSString | |
typedef struct objc_object NSString; | |
typedef struct {} _objc_exc_NSString; | |
#endif | |
#ifndef _REWRITER_typedef_NSMethodSignature | |
#define _REWRITER_typedef_NSMethodSignature | |
typedef struct objc_object NSMethodSignature; | |
typedef struct {} _objc_exc_NSMethodSignature; | |
#endif | |
#ifndef _REWRITER_typedef_NSInvocation | |
#define _REWRITER_typedef_NSInvocation | |
typedef struct objc_object NSInvocation; | |
typedef struct {} _objc_exc_NSInvocation; | |
#endif | |
// @protocol NSObject | |
// - (BOOL)isEqual:(id)object; | |
// @property (readonly) NSUInteger hash; | |
// @property (readonly) Class superclass; | |
// - (Class)class __attribute__((availability(swift, unavailable, message="use 'anObject.dynamicType' instead"))); | |
// - (instancetype)self; | |
// - (id)performSelector:(SEL)aSelector; | |
// - (id)performSelector:(SEL)aSelector withObject:(id)object; | |
// - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2; | |
// - (BOOL)isProxy; | |
// - (BOOL)isKindOfClass:(Class)aClass; | |
// - (BOOL)isMemberOfClass:(Class)aClass; | |
// - (BOOL)conformsToProtocol:(Protocol *)aProtocol; | |
// - (BOOL)respondsToSelector:(SEL)aSelector; | |
// - (instancetype)retain ; | |
// - (oneway void)release ; | |
// - (instancetype)autorelease ; | |
// - (NSUInteger)retainCount ; | |
// - (struct _NSZone *)zone ; | |
// @property (readonly, copy) NSString *description; | |
/* @optional */ | |
// @property (readonly, copy) NSString *debugDescription; | |
/* @end */ | |
__attribute__((availability(macosx,introduced=10.0))) | |
__attribute__((objc_root_class)) | |
extern "C" __attribute__((visibility("default"))) | |
#ifndef _REWRITER_typedef_NSObject | |
#define _REWRITER_typedef_NSObject | |
typedef struct objc_object NSObject; | |
typedef struct {} _objc_exc_NSObject; | |
#endif | |
struct NSObject_IMPL { | |
Class isa; | |
}; | |
// + (void)load; | |
// + (void)initialize; | |
#if 0 | |
- (instancetype)init | |
__attribute__((objc_designated_initializer)) | |
; | |
#endif | |
// + (instancetype)new __attribute__((availability(swift, unavailable, message="use object initializers instead"))); | |
// + (instancetype)allocWithZone:(struct _NSZone *)zone __attribute__((availability(swift, unavailable, message="use object initializers instead"))); | |
// + (instancetype)alloc __attribute__((availability(swift, unavailable, message="use object initializers instead"))); | |
// - (void)dealloc __attribute__((availability(swift, unavailable, message="use 'deinit' to define a de-initializer"))); | |
// - (void)finalize; | |
// - (id)copy; | |
// - (id)mutableCopy; | |
// + (id)copyWithZone:(struct _NSZone *)zone ; | |
// + (id)mutableCopyWithZone:(struct _NSZone *)zone ; | |
// + (BOOL)instancesRespondToSelector:(SEL)aSelector; | |
// + (BOOL)conformsToProtocol:(Protocol *)protocol; | |
// - (IMP)methodForSelector:(SEL)aSelector; | |
// + (IMP)instanceMethodForSelector:(SEL)aSelector; | |
// - (void)doesNotRecognizeSelector:(SEL)aSelector; | |
// - (id)forwardingTargetForSelector:(SEL)aSelector __attribute__((availability(macosx,introduced=10.5))); | |
// - (void)forwardInvocation:(NSInvocation *)anInvocation __attribute__((availability(swift, unavailable, message=""))); | |
// - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector __attribute__((availability(swift, unavailable, message=""))); | |
// + (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector __attribute__((availability(swift, unavailable, message=""))); | |
// - (BOOL)allowsWeakReference __attribute__((unavailable)); | |
// - (BOOL)retainWeakReference __attribute__((unavailable)); | |
// + (BOOL)isSubclassOfClass:(Class)aClass; | |
// + (BOOL)resolveClassMethod:(SEL)sel __attribute__((availability(macosx,introduced=10.5))); | |
// + (BOOL)resolveInstanceMethod:(SEL)sel __attribute__((availability(macosx,introduced=10.5))); | |
// + (NSUInteger)hash; | |
// + (Class)superclass; | |
// + (Class)class __attribute__((availability(swift, unavailable, message="use 'aClass.self' instead"))); | |
// + (NSString *)description; | |
// + (NSString *)debugDescription; | |
/* @end */ | |
#ifndef _REWRITER_typedef_OCObject | |
#define _REWRITER_typedef_OCObject | |
typedef struct objc_object OCObject; | |
typedef struct {} _objc_exc_OCObject; | |
#endif | |
struct OCObject_IMPL { | |
struct NSObject_IMPL NSObject_IVARS; | |
}; | |
/* @end */ | |
// @implementation OCObject // @end | |
struct _prop_t { | |
const char *name; | |
const char *attributes; | |
}; | |
struct _protocol_t; | |
struct _objc_method { | |
struct objc_selector * _cmd; | |
const char *method_type; | |
void *_imp; | |
}; | |
struct _protocol_t { | |
void * isa; // NULL | |
const char *protocol_name; | |
const struct _protocol_list_t * protocol_list; // super protocols | |
const struct method_list_t *instance_methods; | |
const struct method_list_t *class_methods; | |
const struct method_list_t *optionalInstanceMethods; | |
const struct method_list_t *optionalClassMethods; | |
const struct _prop_list_t * properties; | |
const unsigned int size; // sizeof(struct _protocol_t) | |
const unsigned int flags; // = 0 | |
const char ** extendedMethodTypes; | |
}; | |
struct _ivar_t { | |
unsigned long int *offset; // pointer to ivar offset location | |
const char *name; | |
const char *type; | |
unsigned int alignment; | |
unsigned int size; | |
}; | |
struct _class_ro_t { | |
unsigned int flags; | |
unsigned int instanceStart; | |
unsigned int instanceSize; | |
unsigned int reserved; | |
const unsigned char *ivarLayout; | |
const char *name; | |
const struct _method_list_t *baseMethods; | |
const struct _objc_protocol_list *baseProtocols; | |
const struct _ivar_list_t *ivars; | |
const unsigned char *weakIvarLayout; | |
const struct _prop_list_t *properties; | |
}; | |
struct _class_t { | |
struct _class_t *isa; | |
struct _class_t *superclass; | |
void *cache; | |
void *vtable; | |
struct _class_ro_t *ro; | |
}; | |
struct _category_t { | |
const char *name; | |
struct _class_t *cls; | |
const struct _method_list_t *instance_methods; | |
const struct _method_list_t *class_methods; | |
const struct _protocol_list_t *protocols; | |
const struct _prop_list_t *properties; | |
}; | |
extern "C" __declspec(dllimport) struct objc_cache _objc_empty_cache; | |
#pragma warning(disable:4273) | |
static struct _class_ro_t _OBJC_METACLASS_RO_$_OCObject __attribute__ ((used, section ("__DATA,__objc_const"))) = { | |
1, sizeof(struct _class_t), sizeof(struct _class_t), | |
(unsigned int)0, | |
0, | |
"OCObject", | |
0, | |
0, | |
0, | |
0, | |
0, | |
}; | |
static struct _class_ro_t _OBJC_CLASS_RO_$_OCObject __attribute__ ((used, section ("__DATA,__objc_const"))) = { | |
0, sizeof(struct OCObject_IMPL), sizeof(struct OCObject_IMPL), | |
(unsigned int)0, | |
0, | |
"OCObject", | |
0, | |
0, | |
0, | |
0, | |
0, | |
}; | |
extern "C" __declspec(dllimport) struct _class_t OBJC_METACLASS_$_NSObject; | |
extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_OCObject __attribute__ ((used, section ("__DATA,__objc_data"))) = { | |
0, // &OBJC_METACLASS_$_NSObject, | |
0, // &OBJC_METACLASS_$_NSObject, | |
0, // (void *)&_objc_empty_cache, | |
0, // unused, was (void *)&_objc_empty_vtable, | |
&_OBJC_METACLASS_RO_$_OCObject, | |
}; | |
extern "C" __declspec(dllimport) struct _class_t OBJC_CLASS_$_NSObject; | |
extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_OCObject __attribute__ ((used, section ("__DATA,__objc_data"))) = { | |
0, // &OBJC_METACLASS_$_OCObject, | |
0, // &OBJC_CLASS_$_NSObject, | |
0, // (void *)&_objc_empty_cache, | |
0, // unused, was (void *)&_objc_empty_vtable, | |
&_OBJC_CLASS_RO_$_OCObject, | |
}; | |
static void OBJC_CLASS_SETUP_$_OCObject(void ) { | |
OBJC_METACLASS_$_OCObject.isa = &OBJC_METACLASS_$_NSObject; | |
OBJC_METACLASS_$_OCObject.superclass = &OBJC_METACLASS_$_NSObject; | |
OBJC_METACLASS_$_OCObject.cache = &_objc_empty_cache; | |
OBJC_CLASS_$_OCObject.isa = &OBJC_METACLASS_$_OCObject; | |
OBJC_CLASS_$_OCObject.superclass = &OBJC_CLASS_$_NSObject; | |
OBJC_CLASS_$_OCObject.cache = &_objc_empty_cache; | |
} | |
#pragma section(".objc_inithooks$B", long, read, write) | |
__declspec(allocate(".objc_inithooks$B")) static void *OBJC_CLASS_SETUP[] = { | |
(void *)&OBJC_CLASS_SETUP_$_OCObject, | |
}; | |
static struct _class_t *L_OBJC_LABEL_CLASS_$ [1] __attribute__((used, section ("__DATA, __objc_classlist,regular,no_dead_strip")))= { | |
&OBJC_CLASS_$_OCObject, | |
}; | |
static struct IMAGE_INFO { unsigned version; unsigned flag; } _OBJC_IMAGE_INFO = { 0, 2 }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <objc/NSObject.h> | |
@interface OCObject : NSObject @end | |
@implementation OCObject @end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment