diff options
author | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-29 17:23:00 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-29 17:23:00 +0200 |
commit | 976f74bcc09e8e4725c428bed5b3b899e6be6ef1 (patch) | |
tree | 9ea629ac8a5ecd303dd4315669e77a457a1bac52 | |
parent | 5c87cf0c61aaf71f4380457d84416b82575e7f04 (diff) |
SEND-BY-NAME: Cosmetic changes.
-rw-r--r-- | MLKRoot.m | 49 |
1 files changed, 28 insertions, 21 deletions
@@ -499,6 +499,7 @@ static id truify (BOOL value) NSInvocation *invocation; SEL selector; NSMethodSignature *signature; + const char *returnType; int i; selector = NSSelectorFromString (methodName); @@ -528,33 +529,39 @@ static id truify (BOOL value) [invocation invoke]; - -#define IF_TYPE_RETURN(TYPE, VALUE_NAME, VALUE) \ - if (strcmp ([signature methodReturnType], @encode(TYPE)) == 0) \ - { \ - TYPE VALUE_NAME; \ - [invocation getReturnValue:&VALUE_NAME]; \ - RETURN_VALUE (VALUE); \ - } - - if (strcmp ([signature methodReturnType], @encode(void)) == 0) + returnType = [signature methodReturnType]; + if (strcmp (returnType, @encode(void)) == 0) { return [NSArray array]; } - else IF_TYPE_RETURN (BOOL, retval, truify (retval)) - else IF_TYPE_RETURN (id, retval, retval) - else IF_TYPE_RETURN (Class, retval, retval) - else IF_TYPE_RETURN (NSException *, retval, retval) - else IF_TYPE_RETURN (int, retval, [MLKInteger integerWithInt:retval]) - else IF_TYPE_RETURN (unsigned int, retval, [MLKInteger integerWithInt:retval]) //FIXME - else IF_TYPE_RETURN (unichar, retval, [MLKCharacter characterWithUnichar:retval]) else { - [NSException raise:@"MLKInvalidReturnTypeError" - format:@"Cannot handle an Objective-C return type of \"%s\" \ + char retbuf[[signature methodReturnLength]]; + + [invocation getReturnValue:&retbuf]; + +#define IF_TYPE_RETURN(TYPE, VALUE_NAME, VALUE) \ + if (strcmp (returnType, @encode(TYPE)) == 0) \ + { \ + TYPE VALUE_NAME = *(TYPE*)retbuf; \ + RETURN_VALUE (VALUE); \ + } + + IF_TYPE_RETURN(BOOL, retval, truify (retval)) + else IF_TYPE_RETURN(id, retval, retval) + else IF_TYPE_RETURN(Class, retval, retval) + else IF_TYPE_RETURN(NSException *, retval, retval) + else IF_TYPE_RETURN(int, retval, [MLKInteger integerWithInt:retval]) + else IF_TYPE_RETURN(unsigned int, retval, [MLKInteger integerWithInt:retval]) //FIXME + else IF_TYPE_RETURN(unichar, retval, [MLKCharacter characterWithUnichar:retval]) + else + { + [NSException raise:@"MLKInvalidReturnTypeError" + format:@"Cannot handle an Objective-C return type of \"%s\" \ as provided by method %@ of object %@", - methodName, object, [signature methodReturnType]]; - return nil; + methodName, object, returnType]; + return nil; + } } } @end |