-#if __OBJC2__
- // forward:: not supported
-#else
- // Test default forward handler
-
- state = 1;
- sp1 = getSP();
- idval = [Super idret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 2);
- testassert(idval == ID_RESULT);
-
- state = 3;
- sp1 = getSP();
- llval = [Super llret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 4);
- testassert(llval == LL_RESULT);
-
- state = 5;
- sp1 = getSP();
- fpval = [Super fpret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 6);
- testassert(fpval == FP_RESULT);
-
- state = 7;
- sp1 = getSP();
- stval = [Super stret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
-
-#if __x86_64__
- // check stret return register
- state = 7;
- sp1 = getSP();
- stptr = ((fake_st_fn_t)objc_msgSend_stret)(&stval, [Super class], @selector(stret::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
- testassert(stptr == &stval);
-#endif
-
-
- // Test default forward handler, cached
-
- state = 1;
- sp1 = getSP();
- idval = [Super idret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 2);
- testassert(idval == ID_RESULT);
-
- state = 3;
- sp1 = getSP();
- llval = [Super llret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 4);
- testassert(llval == LL_RESULT);
-
- state = 5;
- sp1 = getSP();
- fpval = [Super fpret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 6);
- testassert(fpval == FP_RESULT);
-
- state = 7;
- sp1 = getSP();
- stval = [Super stret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
-
-#if __x86_64__
- // check stret return register
- state = 7;
- sp1 = getSP();
- stptr = ((fake_st_fn_t)objc_msgSend_stret)(&stval, [Super class], @selector(stret::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
- testassert(stptr == &stval);
-#endif
-
-
- // Test default forward handler, uncached but fixed-up
-
- _objc_flush_caches(nil);
-
- state = 1;
- sp1 = getSP();
- idval = [Super idret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 2);
- testassert(idval == ID_RESULT);
-
- state = 3;
- sp1 = getSP();
- llval = [Super llret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 4);
- testassert(llval == LL_RESULT);
-
- state = 5;
- sp1 = getSP();
- fpval = [Super fpret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 6);
- testassert(fpval == FP_RESULT);
-
- state = 7;
- sp1 = getSP();
- stval = [Super stret:1:2:3:4:5:6:7:8:9:10:11:12:13:1.0:2.0:3.0:4.0:5.0:6.0:7.0:8.0:9.0:10.0:11.0:12.0:13.0:14.0:15.0];
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
-
-#if __x86_64__
- // check stret return register
- state = 7;
- sp1 = getSP();
- stptr = ((fake_st_fn_t)objc_msgSend_stret)(&stval, [Super class], @selector(stret::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
- testassert(stptr == &stval);
-#endif
-
-
- // Test manual forwarding
-
- state = 1;
- sp1 = getSP();
- idval = ((id_fn_t)_objc_msgForward)(receiver, @selector(idre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 2);
- testassert(idval == ID_RESULT);
-
- state = 3;
- sp1 = getSP();
- llval = ((ll_fn_t)_objc_msgForward)(receiver, @selector(llre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 4);
- testassert(llval == LL_RESULT);
-
- state = 5;
- sp1 = getSP();
- fpval = ((fp_fn_t)_objc_msgForward)(receiver, @selector(fpre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 6);
- testassert(fpval == FP_RESULT);
-
- state = 7;
- sp1 = getSP();
- stval = stret_fwd(receiver, @selector(stre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
-
-#if __x86_64__
- // check stret return register
- state = 7;
- sp1 = getSP();
- stptr = ((fake_st_fn_t)_objc_msgForward_stret)(&stval, receiver, @selector(stre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
- testassert(stptr == &stval);
-#endif
-
-
- // Test manual forwarding, cached
-
- state = 1;
- sp1 = getSP();
- idval = ((id_fn_t)_objc_msgForward)(receiver, @selector(idre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 2);
- testassert(idval == ID_RESULT);
-
- state = 3;
- sp1 = getSP();
- llval = ((ll_fn_t)_objc_msgForward)(receiver, @selector(llre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 4);
- testassert(llval == LL_RESULT);
-
- state = 5;
- sp1 = getSP();
- fpval = ((fp_fn_t)_objc_msgForward)(receiver, @selector(fpre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 6);
- testassert(fpval == FP_RESULT);
-
- state = 7;
- sp1 = getSP();
- stval = stret_fwd(receiver, @selector(stre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
-
-#if __x86_64__
- // check stret return register
- state = 7;
- sp1 = getSP();
- stptr = ((fake_st_fn_t)_objc_msgForward_stret)(&stval, receiver, @selector(stre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
- testassert(stptr == &stval);
-#endif
-
-
- // Test manual forwarding, uncached but fixed-up
-
- _objc_flush_caches(nil);
-
- state = 1;
- sp1 = getSP();
- idval = ((id_fn_t)_objc_msgForward)(receiver, @selector(idre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 2);
- testassert(idval == ID_RESULT);
-
- state = 3;
- sp1 = getSP();
- llval = ((ll_fn_t)_objc_msgForward)(receiver, @selector(llre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 4);
- testassert(llval == LL_RESULT);
-
- state = 5;
- sp1 = getSP();
- fpval = ((fp_fn_t)_objc_msgForward)(receiver, @selector(fpre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 6);
- testassert(fpval == FP_RESULT);
-
- state = 7;
- sp1 = getSP();
- stval = stret_fwd(receiver, @selector(stre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
-
-#if __x86_64__
- // check stret return register
- state = 7;
- sp1 = getSP();
- stptr = ((fake_st_fn_t)_objc_msgForward_stret)(&stval, receiver, @selector(stre2::::::::::::::::::::::::::::), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0);
- sp2 = getSP();
- testassert(sp1 == sp2);
- testassert(state == 8);
- testassert(stret_equal(stval, STRET_RESULT));
- testassert(stptr == &stval);
-#endif
-
-// !__OBJC2__
-#endif
-
-