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 }