Mercurial > hg > CbC > CbC_gcc
comparison CbC-examples/goto.c @ 78:365b84b6fe04
more examples
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 20 Sep 2011 17:32:20 +0900 |
parents | |
children | 5d30d517ebed |
comparison
equal
deleted
inserted
replaced
77:65b2ea5f1266 | 78:365b84b6fe04 |
---|---|
1 #define __environment _CbC_environment | |
2 #define __return _CbC_return | |
3 | |
4 extern int printf(const char *,...); | |
5 | |
6 __code (*conv)(int,__code (*)()); | |
7 __code a2(int i,__code conv()); | |
8 __code a3(int i,__code conv()); | |
9 __code a4(int i,__code conv()); | |
10 __code a5(int i,__code conv()); | |
11 __code a6(); | |
12 __code a7(); | |
13 __code a8(); | |
14 __code a9(); | |
15 | |
16 char* print_conv(__code conv()); | |
17 | |
18 __code (*exit0)(int,void*); | |
19 void *env; | |
20 | |
21 __code | |
22 a2(int i,__code conv()) | |
23 { | |
24 printf("#0023:a2 %d %s\n",i,print_conv(conv)); | |
25 goto conv(i+1,a4); | |
26 } | |
27 | |
28 __code | |
29 a3(int i,__code (*conv)()) | |
30 { | |
31 printf("#0030:a3 %d %s\n",i,print_conv(conv)); | |
32 goto conv(i+1,a5); | |
33 } | |
34 | |
35 __code | |
36 a4(int i,__code conv()) | |
37 { | |
38 printf("#0037:a4 %d %s\n",i,print_conv(conv)); | |
39 goto (*conv)(i+1,a6); | |
40 } | |
41 | |
42 __code | |
43 a5(int i,__code (*conv)()) | |
44 { | |
45 printf("#0044:a5 %d %s\n",i,print_conv(conv)); | |
46 goto (*conv)(i+1,i+2,i+3,a7); | |
47 } | |
48 | |
49 __code | |
50 a6(int i,int j,int k,__code conv()) | |
51 { | |
52 printf("#0051:a6 %d %s\n",i,print_conv(conv)); | |
53 goto conv(i+1,j,k,a8); | |
54 } | |
55 | |
56 __code | |
57 a7(int i,int j,int k,__code (*conv)()) | |
58 { | |
59 printf("#0058:a7 %d %s\n",i,print_conv(conv)); | |
60 goto conv(i+1,j,k,a9); | |
61 } | |
62 | |
63 __code | |
64 a8(int i,int j,int k,__code conv()) | |
65 { | |
66 printf("#0065:a8 %d %s\n",i,print_conv(conv)); | |
67 goto (*conv)(i+1,j,k,exit0); | |
68 } | |
69 | |
70 __code | |
71 a9(int i,int j,int k,__code (*conv)()) | |
72 { | |
73 printf("#0072:a9 %d %s\n",i,print_conv(conv)); | |
74 goto (*conv)(0,env); | |
75 } | |
76 | |
77 main(int ac,char *av[]) { | |
78 exit0 = __return; | |
79 env = __environment; | |
80 conv = a2; | |
81 goto conv(1,a3); | |
82 } | |
83 | |
84 char* | |
85 print_conv(__code conv()) | |
86 { | |
87 if(conv==a2) return "a2"; | |
88 if(conv==a3) return "a3"; | |
89 if(conv==a4) return "a4"; | |
90 if(conv==a5) return "a5"; | |
91 if(conv==a6) return "a6"; | |
92 if(conv==a7) return "a7"; | |
93 if(conv==a8) return "a8"; | |
94 if(conv==a9) return "a9"; | |
95 else return "xx"; | |
96 } |