Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -254,10 +254,13 @@ AS_IF([test x"$enable_seluid16" = x"yes"], [ AC_DEFINE(OF_SELUID16, 1, [Whether to use 16 bit selector UIDs]) ]) + + AX_CHECK_COMPILER_FLAGS(-Wno-deprecated-objc-isa-usage, + [OBJCFLAGS="$OBJCFLAGS -Wno-deprecated-objc-isa-usage"]) ;; "Apple runtime") AC_DEFINE(OF_APPLE_RUNTIME, 1, [Whether we use the Apple ObjC runtime]) Index: src/runtime/class.m ================================================================== --- src/runtime/class.m +++ src/runtime/class.m @@ -403,10 +403,16 @@ Class objc_get_class(const char *name) { return objc_getRequiredClass(name); } + +BOOL +class_isMetaClass(Class cls) +{ + return (cls->info & OBJC_CLASS_INFO_METACLASS); +} const char* class_getName(Class cls) { return cls->name; @@ -552,10 +558,32 @@ objc_global_mutex_unlock(); return (IMP)nil; } + +Class +object_getClass(id obj) +{ + return obj->isa; +} + +Class +object_setClass(id obj, Class cls) +{ + Class old = obj->isa; + + obj->isa = cls; + + return old; +} + +const char* +object_getClassName(id obj) +{ + return obj->isa->name; +} static void free_class(Class rcls) { struct objc_abi_class *cls = (struct objc_abi_class*)rcls; Index: src/runtime/runtime.h ================================================================== --- src/runtime/runtime.h +++ src/runtime/runtime.h @@ -22,14 +22,12 @@ # define __has_feature(x) 0 #endif #if __has_feature(objc_arc) # define OBJC_UNSAFE_UNRETAINED __unsafe_unretained -# define OBJC_BRIDGE __bridge #else # define OBJC_UNSAFE_UNRETAINED -# define OBJC_BRIDGE #endif typedef struct objc_class *Class; typedef struct objc_object *id; typedef const struct objc_selector *SEL; @@ -170,19 +168,23 @@ extern const char* sel_getName(SEL); extern BOOL sel_isEqual(SEL, SEL); extern id objc_lookUpClass(const char*); extern id objc_getClass(const char*); extern id objc_getRequiredClass(const char*); +extern BOOL class_isMetaClass(Class); extern const char* class_getName(Class); extern Class class_getSuperclass(Class); extern BOOL class_isKindOfClass(Class, Class); extern unsigned long class_getInstanceSize(Class); extern BOOL class_respondsToSelector(Class, SEL); extern BOOL class_conformsToProtocol(Class, Protocol*); extern IMP class_getMethodImplementation(Class, SEL); extern IMP class_replaceMethod(Class, SEL, IMP, const char*); extern const char* objc_get_type_encoding(Class, SEL); +extern Class object_getClass(id); +extern Class object_setClass(id, Class); +extern const char* object_getClassName(id); extern IMP objc_msg_lookup(id, SEL); extern IMP objc_msg_lookup_super(struct objc_super*, SEL); extern const char* protocol_getName(Protocol*); extern BOOL protocol_isEqual(Protocol*, Protocol*); extern BOOL protocol_conformsToProtocol(Protocol*, Protocol*); @@ -193,42 +195,8 @@ extern id objc_autorelease(id); extern void* objc_autoreleasePoolPush(void); extern void objc_autoreleasePoolPop(void*); extern id _objc_rootAutorelease(id); -static inline Class -object_getClass(id obj_) -{ - struct objc_object *obj = (OBJC_BRIDGE struct objc_object*)obj_; - - return obj->isa; -} - -static inline Class -object_setClass(id obj_, Class cls) -{ - struct objc_object *obj = (OBJC_BRIDGE struct objc_object*)obj_; - Class old = obj->isa; - - obj->isa = cls; - - return old; -} - -static inline const char* -object_getClassName(id obj) -{ - return class_getName(object_getClass(obj)); -} - -static inline BOOL -class_isMetaClass(Class cls_) -{ - struct objc_class *cls = (OBJC_BRIDGE struct objc_class*)cls_; - - return (cls->info & OBJC_CLASS_INFO_METACLASS); -} - #undef OBJC_UNSAFE_UNRETAINED -#undef OBJC_BRIDGE #endif