You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
701 B
Objective-C
47 lines
701 B
Objective-C
#include "Test.h"
|
|
#include "objc/hooks.h"
|
|
#include <stdio.h>
|
|
|
|
@interface Test (DoesNotExist)
|
|
- (void)run;
|
|
@end
|
|
|
|
@interface Foo : Test
|
|
@end
|
|
|
|
@implementation Foo
|
|
- (void)run
|
|
{
|
|
[super run];
|
|
}
|
|
@end
|
|
|
|
static int missing_methods;
|
|
|
|
id forward(id self, SEL cmd, ...)
|
|
{
|
|
Class cls = object_getClass(self);
|
|
missing_methods++;
|
|
fprintf(stderr, "Missing method: %c[%s %s]\n", class_isMetaClass(cls) ? '+' : '-', class_getName(cls),sel_getName(cmd));
|
|
return nil;
|
|
}
|
|
|
|
IMP no_method(id self, SEL cmd)
|
|
{
|
|
return forward;
|
|
}
|
|
|
|
|
|
int
|
|
main()
|
|
{
|
|
__objc_msg_forward2 = no_method;
|
|
Test *t = [Test new];
|
|
[t run];
|
|
assert(missing_methods == 1);
|
|
Foo *f = [Foo new];
|
|
[f run];
|
|
assert(missing_methods == 2);
|
|
//[Test run];
|
|
}
|