@@ -479,10 +479,34 @@ return objc_msg_lookup(self, selector); #else return class_getMethodImplementation(isa, selector); #endif } + +- (id)performSelector: (SEL)selector +{ + id (*imp)() = (id(*)())[self methodForSelector: selector]; + + return imp(); +} + +- (id)performSelector: (SEL)selector + withObject: (id)obj +{ + id (*imp)(id) = (id(*)(id))[self methodForSelector: selector]; + + return imp(obj); +} + +- (id)performSelector: (SEL)selector + withObject: (id)obj1 + withObject: (id)obj2 +{ + id (*imp)(id, id) = (id(*)(id, id))[self methodForSelector: selector]; + + return imp(obj1, obj2); +} - (const char*)typeEncodingForSelector: (SEL)selector { #if defined(OF_OBJFW_RUNTIME) const char *ret;