[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
methodSignatureForSelector:
From: |
Manuel Guesdon |
Subject: |
methodSignatureForSelector: |
Date: |
Wed, 7 Mar 2001 21:00:41 +0100 (CET) |
A nice problem: methodSignatureForSelector: seems to be broken (under
GNU/Linux).
When I ask for method signature for selector named "name:" (method
"-(NSString*)name"), I get the good selector but calling
methodSignatureForSelector: to retrieve signature and next calling
methodReturnType on this signature doesn't return
the good type: it return *8@0:4 instead of @8@0:4. I think it takes the return
type of the method "-(char*)name" (well
known method of classes objects).
In NSObject.m:
- (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector
{
const char *types;
#ifdef __FreeBSD__
types = NULL;
#else
types = aSelector->sel_types;
#endif
if (types == 0)
{
struct objc_method *mth;
mth = (GSObjCIsInstance(self)
? class_get_instance_method(GSObjCClass(self), aSelector)
: class_get_class_method(GSObjCClass(self), aSelector));
if (mth == 0)
{
return nil;
}
types = mth->method_types;
}
return [NSMethodSignature signatureWithObjCTypes: types];
}
I've made tests and using the mth instead of aSelector->sel_types works.
As far as I can see, the problem come when two methods (which have the same
selector) return different things (in this case
an id and a char*).
What do you think ?
What is the best method to handle this ? Removing aSelector->sel_types use in
methodSignatureForSelector: ?
May be the sel_types of SEL structure should be removed to prevent this kind of
bug ?
Manuel
--
______________________________________________________________________
Manuel Guesdon - Software Builders <mguesdon@sbuilders.com>
14 rue Jean-Baptiste Clement - 93200 Saint-Denis - France
Tel: +33 1 4940 0999 - Fax: +33 1 4940 0998
- methodSignatureForSelector:,
Manuel Guesdon <=