This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: RFC: Enhancing ObjC message lookup in the presence of protocols
- From: Ziemowit Laski <zlaski at apple dot com>
- To: David Ayers <d dot ayers at inode dot at>
- Cc: gcc List <gcc at gcc dot gnu dot org>, objc-language at lists dot apple dot com
- Date: Tue, 12 Oct 2004 12:38:39 -0700
- Subject: Re: RFC: Enhancing ObjC message lookup in the presence of protocols
- References: <728118AE-1BD1-11D9-9ABE-000D9330C50E@apple.com> <416C0319.3090808@inode.at>
On 12 Oct 2004, at 9.15, David Ayers wrote:
@protocol Proto1
- (const char *)name;
- (void)set;
- (int)compare:(id)obj;
- (int)host
@end
@protocol Proto2
- (NSString *)name;
- (NSSet *)set;
- (BOOL)compare:(id)obj;
- (NSString *)host
@end
If we have
Class <Proto1, Proto2> cls;
:
[cls host];
then, with the patch I just posted to gcc-patches, the compiler
will warn "found `-host' instead of `+host' in protocol(s)", and
then use the `- (int)host' out of Proto1 (i.e., as if we were
messaging 'id <Proto1, Proto2>').
Arguably, both the 'id <Proto1, Proto2>' and 'Class <Proto1, Proto2>'
cases should result in an additional warning about multiple '-host'
methods being
found. This can be addressed by a separate patch. (A more general
problem is when messaging, e.g., 'NSObject <Proto1, Proto2>', where a
method
declared by NSObject itself clashes with what Proto1 and/or Proto2
provide.)
@interface MyRoot1 <Proto1>
@end
@interface MyRoot2 <Proto2>
@end
void
foo(void)
{
Class <MyProto1> cls1 = bar();
Class <MyProto2> cls2 = baz();
const char *name1 = [cls1 name];
NSString *name2 = [cls2 name];
[cls1 set];
NSSet *set = [cls2 set];
int comp1 = [cls1 compare: cls2];
BOOL comp2 = [cls2 compare: cls1];
int host1 = [cls1 host];
NSHost *host2 = [cls2 host];
...
}
I'll double-check, but I believe my current patch will perform correct
method selections for this test case.
I think I'll collect the code fragments in this e-mail and make a
class-protocol-2.m out of it. :-)
--Zem
--------------------------------------------------------------
Ziemowit Laski 1 Infinite Loop, MS 301-2K
Mac OS X Compiler Group Cupertino, CA USA 95014-2083
Apple Computer, Inc. +1.408.974.6229 Fax .5477