Hi Fred,

> You should have a look at GSProtocolGetMethodDescriptionRecursive in 
> Additions/GSObjCRuntime.m. I think this should be able to provide the 
> required functionality.

Thanks a lot. I do

         NSMethodSignature *objcSignature = nil;
         #ifdef __APPLE__
           {
            struct objc_method_description *methodDescription = NULL;
            methodDescription = [_protocol 
descriptionForInstanceMethod:aSelector];
            if (methodDescription == NULL) methodDescription = [_protocol 
descriptionForClassMethod:aSelector];
            if (methodDescription != NULL) types = methodDescription->types;
           }
         #else
           {
            struct objc_method_description desc;
            desc = GSProtocolGetMethodDescriptionRecursive(_protocol, 
aSelector, YES, YES);
            if (desc.name == NULL && desc.types == NULL)
              {
               desc = GSProtocolGetMethodDescriptionRecursive(_protocol, 
aSelector, YES, NO);
              }
            types = desc.types;
           }
         #endif 
         if (types) objcSignature = [NSMethodSignature 
signatureWithObjCTypes:types];

now. The Apple part works on Macs and with my ancient GNUstep tree. I do not 
know yet, whether the non-Apple part works on Ubuntu (current GNUstep) but will 
try once the SIGSEGV problem is figured out. :-)

It's a little surprising to me why

> Protocol * _protocol = @protocol(TestProtocol);
> SEL aSelector = @selector(doIt);
> struct objc_method_description _methodDescription = 
> protocol_getMethodDescription(_protocol, aSelector, NO, YES);
> if (_methodDescription.name == NULL) _methodDescription = 
> protocol_getMethodDescription(_protocol, aSelector, NO, NO);
> NSLog(@"_methodDescription.name %@", 
> NSStringFromSelector(_methodDescription.name));

does not work on Apple as I understood this was the recommended way to do it 
now!? But it simply does not work, therefore reverting back back to the 
deprecated approach (deprecated descriptionForInstanceMethod: method of 
Protocol).

Thanks so much,

 Andreas




_______________________________________________
Discuss-gnustep mailing list
Discuss-gnustep@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to