- MethodListIMP *m = (MethodListIMP *)
- class_getInstanceMethod(cls, @selector(retain));
- testassert(m[2] == imp); // verify Method struct is as we expect
-
- m = (MethodListIMP *)class_getInstanceMethod(cls, @selector(retain));
- m[2] = (IMP)HackRetain;
- m = (MethodListIMP *)class_getInstanceMethod(cls, @selector(release));
- m[2] = (IMP)HackRelease;
- m = (MethodListIMP *)class_getInstanceMethod(cls, @selector(autorelease));
- m[2] = (IMP)HackAutorelease;
- m = (MethodListIMP *)class_getInstanceMethod(cls, @selector(retainCount));
- m[2] = (IMP)HackRetainCount;
- m = (MethodListIMP *)class_getClassMethod(cls, @selector(retain));
- m[2] = (IMP)HackPlusRetain;
- m = (MethodListIMP *)class_getClassMethod(cls, @selector(release));
- m[2] = (IMP)HackPlusRelease;
- m = (MethodListIMP *)class_getClassMethod(cls, @selector(autorelease));
- m[2] = (IMP)HackPlusAutorelease;
- m = (MethodListIMP *)class_getClassMethod(cls, @selector(retainCount));
- m[2] = (IMP)HackPlusRetainCount;
- m = (MethodListIMP *)class_getClassMethod(cls, @selector(alloc));
- m[2] = (IMP)HackAlloc;
- m = (MethodListIMP *)class_getClassMethod(cls, @selector(allocWithZone:));
- m[2] = (IMP)HackAllocWithZone;
+ Method m = class_getInstanceMethod(cls, @selector(retain));
+ testassert(method_getImplementation(m) == imp); // verify Method struct is as we expect
+
+ m = class_getInstanceMethod(cls, @selector(retain));
+ _method_setImplementationRawUnsafe(m, (IMP)HackRetain);
+ m = class_getInstanceMethod(cls, @selector(release));
+ _method_setImplementationRawUnsafe(m, (IMP)HackRelease);
+ m = class_getInstanceMethod(cls, @selector(autorelease));
+ _method_setImplementationRawUnsafe(m, (IMP)HackAutorelease);
+ m = class_getInstanceMethod(cls, @selector(retainCount));
+ _method_setImplementationRawUnsafe(m, (IMP)HackRetainCount);
+ m = class_getClassMethod(cls, @selector(retain));
+ _method_setImplementationRawUnsafe(m, (IMP)HackPlusRetain);
+ m = class_getClassMethod(cls, @selector(release));
+ _method_setImplementationRawUnsafe(m, (IMP)HackPlusRelease);
+ m = class_getClassMethod(cls, @selector(autorelease));
+ _method_setImplementationRawUnsafe(m, (IMP)HackPlusAutorelease);
+ m = class_getClassMethod(cls, @selector(retainCount));
+ _method_setImplementationRawUnsafe(m, (IMP)HackPlusRetainCount);
+ m = class_getClassMethod(cls, @selector(alloc));
+ _method_setImplementationRawUnsafe(m, (IMP)HackAlloc);
+ m = class_getClassMethod(cls, @selector(allocWithZone:));
+ _method_setImplementationRawUnsafe(m, (IMP)HackAllocWithZone);