comparison test/ret_check.c @ 599:df04bc5fd5fe

*** empty log message ***
author kono
date Thu, 26 Jan 2006 15:19:55 +0900
parents
children 682c8ec38d45
comparison
equal deleted inserted replaced
598:e29ae2dab3c0 599:df04bc5fd5fe
1 extern int printf(char *,...);
2
3 #ifdef __micro_c__
4
5 code(*f_incl_ret)(int);
6 void *f_incl_env;
7
8 code
9 f_incl2(int a0)
10 { // 正しいのはコッチ
11 printf("#0010:%d\n",a0);
12 goto f_incl_ret(a0),f_incl_env;
13 }
14
15 code
16 f_incl2_test(float a0)
17 { // ret先のinterface型が異なる
18 printf("#0017:%g\n",a0);
19 goto f_incl_ret(a0),f_incl_env;
20 }
21
22 code
23 f_incl1(int a0,code(*ret)(int))
24 {
25 printf("#0024:%d\n",a0);
26 goto ret(a0*a0);
27 }
28
29 int
30 f_incl0(int a0)
31 {
32 f_incl_ret=return;
33 f_incl_env=environment;
34 printf("#0033:%d\n",a0);
35 goto f_incl1(a0,f_incl2);
36 }
37
38 int
39 f_incl0_test(int a0)
40 {
41 f_incl_ret=return;
42 f_incl_env=environment;
43 printf("#0033:%d\n",a0);
44 goto f_incl1(a0,f_incl2_test);
45 }
46
47 #else
48
49 int
50 f_incl0(int a0)
51 {
52 printf("#0042:%d\n",a0);
53 return a0;
54 }
55
56 int
57 f_incl0_test(int a0)
58 {
59 printf("#0042:%d\n",a0);
60 return a0;
61 }
62
63 #endif
64
65 int
66 g_incl2(int a0)
67 {
68 printf("#0051:%d\n",a0);
69 return a0;
70 }
71
72 int
73 g_incl2_test(float a0)
74 {
75 printf("#0058:%g\n",a0);
76 return (int) a0;
77 }
78
79 int
80 g_incl1(int a0,int (*ret)(int))
81 {
82 return ret(a0);
83 }
84
85 int
86 main()
87 {
88 int f0=f_incl0(10);
89 printf("#0066:%d\n",f0);
90 printf("#0066:%d\n",f_incl0_test(11));
91 printf("#0067:%d\n",g_incl1(12,g_incl2));
92 printf("#0068:%d\n",g_incl1(13,g_incl2_test));
93 return 0;
94 }
95
96 /* end */