Index: src/OFArray.m ================================================================== --- src/OFArray.m +++ src/OFArray.m @@ -620,23 +620,22 @@ { id *objects = [self objects]; size_t i, count = [self count]; for (i = 0; i < count; i++) - ((void(*)(id, SEL))[objects[i] - methodForSelector: selector])(objects[i], selector); + [objects[i] performSelector: selector]; } - (void)makeObjectsPerformSelector: (SEL)selector withObject: (id)object { id *objects = [self objects]; size_t i, count = [self count]; for (i = 0; i < count; i++) - ((void(*)(id, SEL, id))[objects[i] - methodForSelector: selector])(objects[i], selector, object); + [objects[i] performSelector: selector + withObject: object]; } - (OFArray*)sortedArray { OFMutableArray *new = [[self mutableCopy] autorelease]; Index: src/OFObject.h ================================================================== --- src/OFObject.h +++ src/OFObject.h @@ -34,10 +34,11 @@ # import #endif #ifdef OF_APPLE_RUNTIME # import +# import #endif #if defined(__GNUC__) # define restrict __restrict__ #elif __STDC_VERSION__ < 199901L Index: src/OFObject.m ================================================================== --- src/OFObject.m +++ src/OFObject.m @@ -586,47 +586,44 @@ return class_getMethodImplementation(object_getClass(self), selector); } - (id)performSelector: (SEL)selector { - id (*imp)(id, SEL) = (id(*)(id, SEL))[self methodForSelector: selector]; - - if OF_UNLIKELY (imp == NULL) { - [self doesNotRecognizeSelector: selector]; - abort(); - } +#if defined(OF_OBJFW_RUNTIME) + id (*imp)(id, SEL) = (id(*)(id, SEL))objc_msg_lookup(self, selector); return imp(self, selector); +#elif defined(OF_APPLE_RUNTIME) + return objc_msgSend(self, selector); +#endif } - (id)performSelector: (SEL)selector withObject: (id)object { +#if defined(OF_OBJFW_RUNTIME) id (*imp)(id, SEL, id) = - (id(*)(id, SEL, id))[self methodForSelector: selector]; - - if OF_UNLIKELY (imp == NULL) { - [self doesNotRecognizeSelector: selector]; - abort(); - } + (id(*)(id, SEL, id))objc_msg_lookup(self, selector); return imp(self, selector, object); +#elif defined(OF_APPLE_RUNTIME) + return objc_msgSend(self, selector, object); +#endif } - (id)performSelector: (SEL)selector withObject: (id)object1 withObject: (id)object2 { +#if defined(OF_OBJFW_RUNTIME) id (*imp)(id, SEL, id, id) = - (id(*)(id, SEL, id, id))[self methodForSelector: selector]; - - if OF_UNLIKELY (imp == NULL) { - [self doesNotRecognizeSelector: selector]; - abort(); - } + (id(*)(id, SEL, id, id))objc_msg_lookup(self, selector); return imp(self, selector, object1, object2); +#elif defined(OF_APPLE_RUNTIME) + return objc_msgSend(self, selector, object1, object2); +#endif } - (void)performSelector: (SEL)selector afterDelay: (double)delay {