Steve Naroff 1d2538cb4d Improve how we find private method decls. This involved:
- Changed Sema::ObjcActOnStartOfMethodDef() to register the methods with the global pools.
- Changed Sema::ActOnInstanceMessage() to look in global pools (should be much less error prone).
- Added a test case to message.m (for lookup that was broken).

Misc changes while I was investigating this...

- Changed Sema::ActOnAtEnd() to call AddFactoryMethodToGlobalPool (this looked like a cut/paste error).
- Added a comment and tweaked another where I was using the first person.

llvm-svn: 45142
2007-12-18 01:30:32 +00:00

64 lines
1.0 KiB
Objective-C

// RUN: clang -fsyntax-only -verify %s
@interface foo
- (void)meth;
@end
@implementation foo
- (void) contents {} // No declaration in @interface!
- (void) meth { [self contents]; }
@end
typedef struct _NSPoint {
float x;
float y;
} NSPoint;
typedef struct _NSSize {
float width;
float height;
} NSSize;
typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;
@interface AnyClass
- (NSRect)rect;
@end
@class Helicopter;
static void func(Helicopter *obj) {
// Note that the proto for "rect" is found in the global pool even when
// a statically typed object's class interface isn't in scope! This
// behavior isn't very desirable, however wee need it for GCC compatibility.
NSRect r = [obj rect];
}
@interface NSObject @end
extern Class NSClassFromObject(id object);
@interface XX : NSObject
@end
@implementation XX
+ _privateMethod {
return self;
}
- (void) xx {
[NSClassFromObject(self) _privateMethod];
}
@end
@implementation XX (Private)
- (void) yy {
[NSClassFromObject(self) _privateMethod];
}
@end