Mercurial > hg > CbC > CbC_gcc
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/tmp1.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,94 @@ +/* easy test */ +#define __environment _CbC_environment +#define __return _CbC_return + + +extern int printf(const char *,...); + +__code (*ret)(); +void *env; +__code exit1(int ac,void *); + +main0(ac,av) +int ac; +char *av[]; +{ + ret = __return; + env = __environment; + printf("#0017:main0 %d start.\n",ac); + if (ac>=1) + goto code0(ac,av,__return); + goto code1(ac,av,exit1); + // not reached. (warning?) + printf("#0022:main0 %d end.\n",ac); +} + +__code exit1(int ac) +{ + // exit(0); + goto code3(0,1,2,3,4,5); +} + +__code code3(a,b,c,d,e,f) +char a,b; +int c,d,e,f; +{ + printf("#0035:code3: %d %d %d %d %d %d\n",a,b,c,d,e,f); + if(a<10) + goto code3(a+1,b,c,d,e,f); + else + goto code4(a+3,b+3,c+3,d+3,e+3,f+3); +} + +__code code4(a,b,c,d,e,f) +char a,b; +int c,d,e,f; +{ + int i=1,j=2; + printf("#0047:code4: %d %d %d %d %d %d\n",a,b,c,d,e,f); + if(a<20) // cyclic binary dependency + goto code3(a+b,b+c,c+d,d+e,e+f,f+a); + else if(a<30) + goto code3(a,b,c,d,e,f); + else if(a<40) // cyclic dependency + goto code3(b,c,a,e,f,d); + else if(a<50) + goto code4(a+i,b+j,c+i,d+3,e+3,f+3); + else goto ret(0,env); +} + +__code code0(ac,av,ret) +int ac; +char *av[]; +__code (*ret)(int); +{ + goto code1(ac,av,ret); +} + +__code code1(ac,av,exit) +int ac; +__code (*exit)(int,void*); +char *av[]; +{ + __code (*f)(int,void *); + printf("#0073:code1: %d\n",ac); + f = exit; + if (ac>3) + goto code1(ac,av,f); + else if (ac>2) + goto code1(av,ac,f); + else + goto (*f)(ac,env); +} + +int +main(int ac,char *av[]) +{ + main0(1,av); + printf("#0087:main continue.\n"); + main0(0,av); + printf("#0089:main end.\n"); +return 0; +} + +/* end */