diff --git a/Test/objc_msgSend.m b/Test/objc_msgSend.m index 7cb7eca..1d4f372 100644 --- a/Test/objc_msgSend.m +++ b/Test/objc_msgSend.m @@ -97,58 +97,71 @@ __attribute__((objc_root_class)) @end int forwardcalls; -void fwd(int a0, - int a1, - int a2, - int a3, - int a4, - int a5, - int a6, - int a7, - int a8, - int a9, - int a10, - float f0, - float f1, - float f2, - float f3, - float f4, - float f5, - float f6, - float f7, - float f8, - float f9, - float f10) +void fwdMany(id self, + SEL _cmd, + int a0, + int a1, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8, + int a9, + int a10, + float f0, + float f1, + float f2, + float f3, + float f4, + float f5, + float f6, + float f7, + float f8, + float f9, + float f10) { forwardcalls++; + assert(self == objc_getClass("Test")); + if (sel_isEqual(_cmd, sel_registerName("manyArgs:::::::::::::::::::::"))) assert(a0 == 0); - assert(a1 == 0); - assert(a2 == 0); - assert(a3 == 0); - assert(a4 == 0); - assert(a5 == 0); - assert(a6 == 0); - assert(a7 == 0); - assert(a8 == 0); - assert(a9 == 0); + assert(a1 == 1); + assert(a2 == 2); + assert(a3 == 3); + assert(a4 == 4); + assert(a5 == 5); + assert(a6 == 6); + assert(a7 == 7); + assert(a8 == 8); + assert(a9 == 9); assert(a10 == 10); assert(f0 == 0); - assert(f1 == 0); - assert(f2 == 0); - assert(f3 == 0); - assert(f4 == 0); - assert(f5 == 0); - assert(f6 == 0); - assert(f7 == 0); - assert(f8 == 0); - assert(f9 == 0); + assert(f1 == 1); + assert(f2 == 2); + assert(f3 == 3); + assert(f4 == 4); + assert(f5 == 5); + assert(f6 == 6); + assert(f7 == 7); + assert(f8 == 8); + assert(f9 == 9); assert(f10 == 10); } +void fwd(void) +{ + forwardcalls++; +} + IMP forward(id o, SEL s) { assert(o == objc_getClass("Test")); - return (IMP)fwd; + if (sel_isEqual(s, sel_registerName("missing"))) + { + return (IMP)fwd; + } + return (IMP)fwdMany; } int main(void) @@ -167,6 +180,7 @@ int main(void) assert((id)0x42 == objc_msgSend(TestCls, @selector(foo))); objc_msgSend(TestCls, @selector(nothing)); objc_msgSend(TestCls, @selector(missing)); + assert(forwardcalls == 1); assert(0 == objc_msgSend(0, @selector(nothing))); id a = objc_msgSend(objc_getClass("Test"), @selector(foo)); assert((id)0x42 == a); @@ -197,6 +211,7 @@ int main(void) assert(0 == [f ldzero]); assert(0 == [f fzero]); [TestCls manyArgs: 0 : 1 : 2 : 3: 4: 5: 6: 7: 8: 9: 10 : 0 : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10]; + assert(forwardcalls == 2); #ifdef BENCHMARK const int iterations = 1000000000; double times[3];