Index: src/OFObject.m ================================================================== --- src/OFObject.m +++ src/OFObject.m @@ -103,20 +103,16 @@ uint32_t of_hash_seed; static const char * typeEncodingForSelector(Class class, SEL selector) { -#if defined(OF_OBJFW_RUNTIME) - return class_getMethodTypeEncoding(class, selector); -#elif defined(OF_APPLE_RUNTIME) - Method m; + Method method; - if ((m = class_getInstanceMethod(class, selector)) == NULL) + if ((method = class_getInstanceMethod(class, selector)) == NULL) return NULL; - return method_getTypeEncoding(m); -#endif + return method_getTypeEncoding(method); } #if !defined(OF_APPLE_RUNTIME) || defined(__OBJC2__) static void uncaughtExceptionHandler(id exception) Index: src/runtime/ObjFWRT.h ================================================================== --- src/runtime/ObjFWRT.h +++ src/runtime/ObjFWRT.h @@ -108,11 +108,11 @@ Protocol *_Nonnull protocol); extern IMP _Nullable class_getMethodImplementation(Class _Nullable class_, SEL _Nonnull selector); extern IMP _Nullable class_getMethodImplementation_stret(Class _Nullable class_, SEL _Nonnull selector); -extern const char *_Nullable class_getMethodTypeEncoding(Class _Nullable class_, +extern Method _Nullable class_getInstanceMethod(Class _Nullable class_, SEL _Nonnull selector); extern bool class_addMethod(Class _Nonnull class_, SEL _Nonnull selector, IMP _Nonnull implementation, const char *_Nullable typeEncoding); extern IMP _Nullable class_replaceMethod(Class _Nonnull class_, SEL _Nonnull selector, IMP _Nonnull implementation, Index: src/runtime/amiga-glue.m ================================================================== --- src/runtime/amiga-glue.m +++ src/runtime/amiga-glue.m @@ -505,17 +505,17 @@ M68K_ARG(SEL, selector, a1) return class_getMethodImplementation_stret(class, selector); } -const char *__saveds -glue_class_getMethodTypeEncoding PPC_PARAMS(Class class, SEL selector) +Method __saveds +glue_class_getInstanceMethod PPC_PARAMS(Class class, SEL selector) { M68K_ARG(Class, class, a0) M68K_ARG(SEL, selector, a1) - return class_getMethodTypeEncoding(class, selector); + return class_getInstanceMethod(class, selector); } bool __saveds glue_class_addMethod PPC_PARAMS(Class class, SEL selector, IMP implementation, const char *typeEncoding) Index: src/runtime/amiga-library.m ================================================================== --- src/runtime/amiga-library.m +++ src/runtime/amiga-library.m @@ -62,69 +62,69 @@ extern void *_EH_FRAME_OBJECTS__; #endif extern bool glue_objc_init(void); extern void glue___objc_exec_class(void); -extern IMP _Nonnull glue_objc_msg_lookup(void); -extern IMP _Nonnull glue_objc_msg_lookup_stret(void); -extern IMP _Nonnull glue_objc_msg_lookup_super(void); -extern IMP _Nonnull glue_objc_msg_lookup_super_stret(void); -extern Class _Nullable glue_objc_lookUpClass(void); -extern Class _Nullable glue_objc_getClass(void); -extern Class _Nonnull glue_objc_getRequiredClass(void); -extern Class _Nullable glue_objc_lookup_class(void); -extern Class _Nonnull glue_objc_get_class(void); +extern IMP glue_objc_msg_lookup(void); +extern IMP glue_objc_msg_lookup_stret(void); +extern IMP glue_objc_msg_lookup_super(void); +extern IMP glue_objc_msg_lookup_super_stret(void); +extern Class glue_objc_lookUpClass(void); +extern Class glue_objc_getClass(void); +extern Class glue_objc_getRequiredClass(void); +extern Class glue_objc_lookup_class(void); +extern Class glue_objc_get_class(void); extern void glue_objc_exception_throw(void); extern int glue_objc_sync_enter(void); extern int glue_objc_sync_exit(void); -extern id _Nullable glue_objc_getProperty(void); +extern id glue_objc_getProperty(void); extern void glue_objc_setProperty(void); extern void glue_objc_getPropertyStruct(void); extern void glue_objc_setPropertyStruct(void); extern void glue_objc_enumerationMutation(void); extern int glue___gnu_objc_personality(void); -extern id _Nullable glue_objc_retain(void); -extern id _Nullable glue_objc_retainBlock(void); -extern id _Nullable glue_objc_retainAutorelease(void); +extern id glue_objc_retain(void); +extern id glue_objc_retainBlock(void); +extern id glue_objc_retainAutorelease(void); extern void glue_objc_release(void); -extern id _Nullable glue_objc_autorelease(void); -extern id _Nullable glue_objc_autoreleaseReturnValue(void); -extern id _Nullable glue_objc_retainAutoreleaseReturnValue(void); -extern id _Nullable glue_objc_retainAutoreleasedReturnValue(void); -extern id _Nullable glue_objc_storeStrong(void); -extern id _Nullable glue_objc_storeWeak(void); -extern id _Nullable glue_objc_loadWeakRetained(void); -extern id _Nullable glue_objc_initWeak(void); +extern id glue_objc_autorelease(void); +extern id glue_objc_autoreleaseReturnValue(void); +extern id glue_objc_retainAutoreleaseReturnValue(void); +extern id glue_objc_retainAutoreleasedReturnValue(void); +extern id glue_objc_storeStrong(void); +extern id glue_objc_storeWeak(void); +extern id glue_objc_loadWeakRetained(void); +extern id glue_objc_initWeak(void); extern void glue_objc_destroyWeak(void); -extern id _Nullable glue_objc_loadWeak(void); +extern id glue_objc_loadWeak(void); extern void glue_objc_copyWeak(void); extern void glue_objc_moveWeak(void); -extern SEL _Nonnull glue_sel_registerName(void); -extern const char *_Nonnull glue_sel_getName(void); +extern SEL glue_sel_registerName(void); +extern const char *glue_sel_getName(void); extern bool glue_sel_isEqual(void); -extern Class _Nonnull glue_objc_allocateClassPair(void); +extern Class glue_objc_allocateClassPair(void); extern void glue_objc_registerClassPair(void); extern unsigned int glue_objc_getClassList(void); -extern Class _Nonnull *_Nonnull glue_objc_copyClassList(void); +extern Class *glue_objc_copyClassList(void); extern bool glue_class_isMetaClass(void); -extern const char *_Nullable glue_class_getName(void); -extern Class _Nullable glue_class_getSuperclass(void); +extern const char *glue_class_getName(void); +extern Class glue_class_getSuperclass(void); extern unsigned long glue_class_getInstanceSize(void); extern bool glue_class_respondsToSelector(void); extern bool glue_class_conformsToProtocol(void); -extern IMP _Nullable glue_class_getMethodImplementation(void); -extern IMP _Nullable glue_class_getMethodImplementation_stret(void); -extern const char *_Nullable glue_class_getMethodTypeEncoding(void); +extern IMP glue_class_getMethodImplementation(void); +extern IMP glue_class_getMethodImplementation_stret(void); +extern Method glue_class_getInstanceMethod(void); extern bool glue_class_addMethod(void); -extern IMP _Nullable glue_class_replaceMethod(void); -extern Class _Nullable glue_object_getClass(void); -extern Class _Nullable glue_object_setClass(void); -extern const char *_Nullable glue_object_getClassName(void); -extern const char *_Nonnull glue_protocol_getName(void); +extern IMP glue_class_replaceMethod(void); +extern Class glue_object_getClass(void); +extern Class glue_object_setClass(void); +extern const char *glue_object_getClassName(void); +extern const char *glue_protocol_getName(void); extern bool glue_protocol_isEqual(void); extern bool glue_protocol_conformsToProtocol(void); -extern _Nullable objc_uncaught_exception_handler_t +extern objc_uncaught_exception_handler_t glue_objc_setUncaughtExceptionHandler(void); extern void glue_objc_setForwardHandler(void); extern void glue_objc_setEnumerationMutationHandler(void); extern void glue_objc_zero_weak_references(void); extern void glue_objc_exit(void); @@ -629,11 +629,11 @@ (CONST_APTR)glue_class_getInstanceSize, (CONST_APTR)glue_class_respondsToSelector, (CONST_APTR)glue_class_conformsToProtocol, (CONST_APTR)glue_class_getMethodImplementation, (CONST_APTR)glue_class_getMethodImplementation_stret, - (CONST_APTR)glue_class_getMethodTypeEncoding, + (CONST_APTR)glue_class_getInstanceMethod, (CONST_APTR)glue_class_addMethod, (CONST_APTR)glue_class_replaceMethod, (CONST_APTR)glue_object_getClass, (CONST_APTR)glue_object_setClass, (CONST_APTR)glue_object_getClassName, Index: src/runtime/amigaos3.sfd ================================================================== --- src/runtime/amigaos3.sfd +++ src/runtime/amigaos3.sfd @@ -55,11 +55,11 @@ unsigned long glue_class_getInstanceSize(Class _Nullable class_)(a0) bool glue_class_respondsToSelector(Class _Nullable class_, SEL _Nonnull selector)(a0,a1) bool glue_class_conformsToProtocol(Class _Nullable class_, Protocol *_Nonnull p)(a0,a1) IMP _Nullable glue_class_getMethodImplementation(Class _Nullable class_, SEL _Nonnull selector)(a0,a1) IMP _Nullable glue_class_getMethodImplementation_stret(Class _Nullable class_, SEL _Nonnull selector)(a0,a1) -const char *_Nullable glue_class_getMethodTypeEncoding(Class _Nullable class_, SEL _Nonnull selector)(a0,a1) +Method _Nullable glue_class_getInstanceMethod(Class _Nullable class_, SEL _Nonnull selector)(a0,a1) bool glue_class_addMethod(Class _Nonnull class_, SEL _Nonnull selector, IMP _Nonnull implementation, const char *_Nullable typeEncoding)(a0,a1,a2,a3) IMP _Nullable glue_class_replaceMethod(Class _Nonnull class_, SEL _Nonnull selector, IMP _Nonnull implementation, const char *_Nullable typeEncoding)(a0,a1,a2,a3) Class _Nullable glue_object_getClass(id _Nullable object)(a0) Class _Nullable glue_object_setClass(id _Nullable object, Class _Nonnull class_)(a0,a1) const char *_Nullable glue_object_getClassName(id _Nullable object)(a0) Index: src/runtime/class.m ================================================================== --- src/runtime/class.m +++ src/runtime/class.m @@ -768,30 +768,32 @@ class->methodList = methodList; objc_update_dtable(class); } -const char * -class_getMethodTypeEncoding(Class class, SEL selector) +Method +class_getInstanceMethod(Class class, SEL selector) { - struct objc_method *method; + Method method; + Class superclass; if (class == Nil) return NULL; objc_global_mutex_lock(); if ((method = getMethod(class, selector)) != NULL) { - const char *ret = method->selector.typeEncoding; objc_global_mutex_unlock(); - return ret; + return method; } + + superclass = class->superclass; objc_global_mutex_unlock(); - if (class->superclass != Nil) - return class_getMethodTypeEncoding(class->superclass, selector); + if (superclass != Nil) + return class_getInstanceMethod(superclass, selector); return NULL; } bool Index: src/runtime/linklib/linklib.m ================================================================== --- src/runtime/linklib/linklib.m +++ src/runtime/linklib/linklib.m @@ -502,14 +502,14 @@ class_getMethodImplementation_stret(Class class, SEL selector) { return glue_class_getMethodImplementation_stret(class, selector); } -const char * -class_getMethodTypeEncoding(Class class, SEL selector) +Method +class_getInstanceMethod(Class class, SEL selector) { - return glue_class_getMethodTypeEncoding(class, selector); + return glue_class_getInstanceMethod(class, selector); } bool class_addMethod(Class class, SEL selector, IMP implementation, const char *typeEncoding) Index: src/runtime/morphos-clib.h ================================================================== --- src/runtime/morphos-clib.h +++ src/runtime/morphos-clib.h @@ -49,11 +49,11 @@ unsigned long glue_class_getInstanceSize(Class); bool glue_class_respondsToSelector(Class, SEL); bool glue_class_conformsToProtocol(Class, Protocol *); IMP glue_class_getMethodImplementation(Class, SEL); IMP glue_class_getMethodImplementation_stret(Class, SEL); -const char *glue_class_getMethodTypeEncoding(Class, SEL); +Method glue_class_getInstanceMethod(Class, SEL); bool glue_class_addMethod(Class class_, SEL selector, IMP, const char *); IMP glue_class_replaceMethod(Class, SEL, IMP, const char *); Class glue_object_getClass(id); Class glue_object_setClass(id, Class); const char *glue_object_getClassName(id); Index: src/runtime/morphos.fd ================================================================== --- src/runtime/morphos.fd +++ src/runtime/morphos.fd @@ -51,11 +51,11 @@ glue_class_getInstanceSize(class_)(sysv,r12base) glue_class_respondsToSelector(class_,selector)(sysv,r12base) glue_class_conformsToProtocol(class_,p)(sysv,r12base) glue_class_getMethodImplementation(class_,selector)(sysv,r12base) glue_class_getMethodImplementation_stret(class_,selector)(sysv,r12base) -glue_class_getMethodTypeEncoding(class_,selector)(sysv,r12base) +glue_class_getInstanceMethod(class_,selector)(sysv,r12base) glue_class_addMethod(class_,selector,implementation,typeEncoding)(sysv,r12base) glue_class_replaceMethod(class_,selector,implementation,typeEncoding)(sysv,r12base) glue_object_getClass(object)(sysv,r12base) glue_object_setClass(object,class_)(sysv,r12base) glue_object_getClassName(object)(sysv,r12base)