Mercurial > hg > CbC > CbC_gcc
comparison CbC-examples/tmp1.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 /* easy test */ | |
2 #define __environment _CbC_environment | |
3 #define __return _CbC_return | |
4 | |
5 | |
6 extern int printf(const char *,...); | |
7 | |
8 __code (*ret)(); | |
9 void *env; | |
10 __code exit1(int ac,void *); | |
11 | |
12 main0(ac,av) | |
13 int ac; | |
14 char *av[]; | |
15 { | |
16 ret = __return; | |
17 env = __environment; | |
18 printf("#0017:main0 %d start.\n",ac); | |
19 if (ac>=1) | |
20 goto code0(ac,av,__return); | |
21 goto code1(ac,av,exit1); | |
22 // not reached. (warning?) | |
23 printf("#0022:main0 %d end.\n",ac); | |
24 } | |
25 | |
26 __code exit1(int ac) | |
27 { | |
28 // exit(0); | |
29 goto code3(0,1,2,3,4,5); | |
30 } | |
31 | |
32 __code code3(a,b,c,d,e,f) | |
33 char a,b; | |
34 int c,d,e,f; | |
35 { | |
36 printf("#0035:code3: %d %d %d %d %d %d\n",a,b,c,d,e,f); | |
37 if(a<10) | |
38 goto code3(a+1,b,c,d,e,f); | |
39 else | |
40 goto code4(a+3,b+3,c+3,d+3,e+3,f+3); | |
41 } | |
42 | |
43 __code code4(a,b,c,d,e,f) | |
44 char a,b; | |
45 int c,d,e,f; | |
46 { | |
47 int i=1,j=2; | |
48 printf("#0047:code4: %d %d %d %d %d %d\n",a,b,c,d,e,f); | |
49 if(a<20) // cyclic binary dependency | |
50 goto code3(a+b,b+c,c+d,d+e,e+f,f+a); | |
51 else if(a<30) | |
52 goto code3(a,b,c,d,e,f); | |
53 else if(a<40) // cyclic dependency | |
54 goto code3(b,c,a,e,f,d); | |
55 else if(a<50) | |
56 goto code4(a+i,b+j,c+i,d+3,e+3,f+3); | |
57 else goto ret(0,env); | |
58 } | |
59 | |
60 __code code0(ac,av,ret) | |
61 int ac; | |
62 char *av[]; | |
63 __code (*ret)(int); | |
64 { | |
65 goto code1(ac,av,ret); | |
66 } | |
67 | |
68 __code code1(ac,av,exit) | |
69 int ac; | |
70 __code (*exit)(int,void*); | |
71 char *av[]; | |
72 { | |
73 __code (*f)(int,void *); | |
74 printf("#0073:code1: %d\n",ac); | |
75 f = exit; | |
76 if (ac>3) | |
77 goto code1(ac,av,f); | |
78 else if (ac>2) | |
79 goto code1(av,ac,f); | |
80 else | |
81 goto (*f)(ac,env); | |
82 } | |
83 | |
84 int | |
85 main(int ac,char *av[]) | |
86 { | |
87 main0(1,av); | |
88 printf("#0087:main continue.\n"); | |
89 main0(0,av); | |
90 printf("#0089:main end.\n"); | |
91 return 0; | |
92 } | |
93 | |
94 /* end */ |