# HG changeset patch # User Shinji KONO # Date 1316507540 -32400 # Node ID 365b84b6fe049ff5b0f9514f86aad9f42d5eb381 # Parent 65b2ea5f12664bf18c42bf8012a52f4dd4740c23 more examples diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/arg.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/arg.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,104 @@ +#include "stdio.h" + +#define __environment _CbC_environment +#define __return _CbC_return + + +struct arg { + int a0;int a1;int a2;int a3;int a4; +}; + +extern void exit(int); + +void *exit_env; +__code (*exit___code)(); + +__code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(),void *env) +{ + printf("#0017:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env); + goto carg2(arg1,arg2,arg3,arg4,arg0,exit1,env); +} + +__code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(),void *env) +{ + struct arg args0; + printf("#0024:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env ); + args0.a0 = arg0; + args0.a1 = arg1; + args0.a2 = arg2; + args0.a3 = arg3; + args0.a4 = arg4; + goto cargs(args0,exit1,env); +} + +__code cargs(struct arg args0,__code exit1(),void *env) +{ + printf("#0035:args: %d %d %d %d %d : %x %x\n", + args0.a0,args0.a1,args0.a2,args0.a3,args0.a4, + exit1==exit___code,env==exit_env); + // goto exit1(321),env; + goto (*exit1)(0,env); +} + + +__code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l) +{ + printf("#0045:args3: %d %d %d %d %d : %x %x %x %x\n", + args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l); + printf("#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\n", + args0.a0,args0.a1,args0.a2,args0.a3,args0.a4, + args1.a0,args1.a1,args1.a2,args1.a3,args1.a4, + i,j,k,l); + if (args0.a0==args1.a0) exit(0); + goto carg4(args0,args1,j,k,l,i); +} + +__code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l) +{ + printf("#0057:args4: %d %d %d %d %d : %x %x %x %x\n", + args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l); + goto carg5(args1,args0,j,k,l,i); +} + +__code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l) +{ + printf("#0064:args5: %d %d %d %d %d : %x %x %x %x\n", + args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l); + goto carg6(i,j,k,l,args0); +} + +__code carg6(int i, int j,int k,int l,struct arg args0) +{ + printf("#0071:args6: %d %d %d %d %d : %x %x %x %x\n", + args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l); + goto carg3(args0,args0,i,j,k,l); +} + +int main1(int n) +{ + goto carg1(0,1,2,3,4,exit___code=__return,exit_env=__environment); + return n; +} + +struct arg a00; +struct arg a01; + +int main( int ac, char *av[]) +{ + int n; + n = main1(123); + printf("#0089:321=%d\n",n); + + a00.a0 = 11; + a00.a1 = 22; + a00.a2 = 33; + a00.a3 = 44; + a00.a4 = 55; + a01.a0 = 66; + a01.a1 = 77; + a01.a2 = 88; + a01.a3 = 99; + a01.a4 = 10; + goto carg3(a00,a01,1,2,3,4); +} + diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/fact-a.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/fact-a.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,36 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +#include "stdio.h" + +__code factorial(int n,int result,int orig,__code(*print)(),__code(*exit1)(), void *exit1env) +{ + if (n<0) { + printf("#0008:err %d!\n",n); + goto (*exit1)(0,exit1env); + } + if (n==0) + goto (*print)(n,result,orig,print,exit1,exit1env); + else { + result *= n; + n--; + goto factorial(n,result,orig,print,exit1,exit1env); + } +} + +__code print(int n,int result,int orig,__code(*print)(),__code (*exit1)(),void*exit1env); + +int main( int ac, char *av[]) +{ + int n; + // n = atoi(av[1]); + n = 10; + goto factorial(n,1,n,print,__return,__environment); +} + +__code print(int n,int result,int orig,__code(*print)(),__code (*exit1)(),void*exit1env) +{ + printf("#0032:%d! = %d\n",orig, result); + goto (*exit1)(0,exit1env); +} + diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/goto.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/goto.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,96 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +extern int printf(const char *,...); + +__code (*conv)(int,__code (*)()); +__code a2(int i,__code conv()); +__code a3(int i,__code conv()); +__code a4(int i,__code conv()); +__code a5(int i,__code conv()); +__code a6(); +__code a7(); +__code a8(); +__code a9(); + +char* print_conv(__code conv()); + +__code (*exit0)(int,void*); +void *env; + +__code +a2(int i,__code conv()) +{ + printf("#0023:a2 %d %s\n",i,print_conv(conv)); + goto conv(i+1,a4); +} + +__code +a3(int i,__code (*conv)()) +{ + printf("#0030:a3 %d %s\n",i,print_conv(conv)); + goto conv(i+1,a5); +} + +__code +a4(int i,__code conv()) +{ + printf("#0037:a4 %d %s\n",i,print_conv(conv)); + goto (*conv)(i+1,a6); +} + +__code +a5(int i,__code (*conv)()) +{ + printf("#0044:a5 %d %s\n",i,print_conv(conv)); + goto (*conv)(i+1,i+2,i+3,a7); +} + +__code +a6(int i,int j,int k,__code conv()) +{ + printf("#0051:a6 %d %s\n",i,print_conv(conv)); + goto conv(i+1,j,k,a8); +} + +__code +a7(int i,int j,int k,__code (*conv)()) +{ + printf("#0058:a7 %d %s\n",i,print_conv(conv)); + goto conv(i+1,j,k,a9); +} + +__code +a8(int i,int j,int k,__code conv()) +{ + printf("#0065:a8 %d %s\n",i,print_conv(conv)); + goto (*conv)(i+1,j,k,exit0); +} + +__code +a9(int i,int j,int k,__code (*conv)()) +{ + printf("#0072:a9 %d %s\n",i,print_conv(conv)); + goto (*conv)(0,env); +} + +main(int ac,char *av[]) { + exit0 = __return; + env = __environment; + conv = a2; + goto conv(1,a3); +} + +char* +print_conv(__code conv()) +{ + if(conv==a2) return "a2"; + if(conv==a3) return "a3"; + if(conv==a4) return "a4"; + if(conv==a5) return "a5"; + if(conv==a6) return "a6"; + if(conv==a7) return "a7"; + if(conv==a8) return "a8"; + if(conv==a9) return "a9"; + else return "xx"; +} diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/test1.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/test1.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,125 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +/* + test for CbC converted __code from C + */ + +#include + +extern void *malloc(int); + +typedef void *stack; + +void *stack0; /* size of void* == 1 */ + +struct cont_save { /* General Return Continuation */ + __code (*ret)(); +}; + +/* + __code g(int,void *); + __code f_g0(int ,int ,void *); + __code f_g1(int,void *); +*/ + +struct f_g0_save { /* Specialized Return Continuation */ + __code (*ret)(); + int ii,kk,jj; +}; + +__code g(int i,void *sp) { + goto (* ((struct cont_save *)sp)->ret)(i+4,sp); +} + +__code f_g1(int j,void *sp) { /* Continuation */ + int k; + struct f_g0_save *c; + + c = sp; + k = c->kk; + sp += sizeof(struct f_g0_save); + goto (* ((struct cont_save *)sp)->ret)(k+4+j,sp); +} + +__code f(int i,void *sp) { + int k,j; + struct f_g0_save *c; +printf("#0047:f 0 sp: %x\n",sp-stack0); + + k = 3+i; + +printf("#0051:f 1 sp: %x\n",sp-stack0); + sp -= sizeof(struct f_g0_save); +printf("#0053:f 2 sp: %x\n",sp-stack0); + c = sp; + c->kk = k; + c->ii = i; + c->jj = j; + c->ret = f_g1; + goto g(i,sp); +} + + + +struct f0_save { /* Specialized Return Continuation */ + __code (*ret)(); + __code (*exit1)(); + void *exit1env; + int jj; +}; + +__code f1(int i,void *sp) ; +__code f0(int i,int j,__code(*exit2)(), void *exit2env,void *sp) +{ + struct f0_save *c; + printf("#0075:f0 1 sp: %x\n",sp-stack0); + sp -= sizeof(struct f0_save); + printf("#0077:f0 2 sp: %x\n",sp-stack0); + c = sp; + c->jj = j; + c->exit1 = exit2; + c->exit1env = exit2env; + c->ret = f1; + printf("#0083:f0 3 sp: %x\n",sp-stack0); + goto f(i,sp); +} + +__code print(int i,int j,__code (*exit1)(),void*exit1env); + +__code f1(int i,void *sp) { + int j; + int *exit2env; + __code (*exit2)(); + struct f0_save *c; + + c = sp; + j = c->jj; + exit2 = c->exit1; + exit2env = c->exit1env; + + sp += sizeof(struct f0_save); + goto print(i,j,exit2,exit2env); +} + +int main( int ac, char *av[]) +{ + int i,j; + int *sp; + + // i = atoi(av[1]); + i = 1; + stack0 = ((char *)malloc(1024)+1024); + sp = stack0; + j = i; + + printf("#0115:sp: %x %x\n",sp-(int*)stack0,sizeof(*stack0)); + goto f0(i,j,__return,__environment,sp); +} + +__code print(int i,int j,__code (*exit1)(),void*exit1env) +{ + printf("#0121:%d %d\n",i,j); + goto (*exit1)(0,exit1env); +} + diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/test2.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/test2.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,45 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +#include +int sender_bit; + +__code (*ret)(int,void *); +void *env; + +struct packet { + int bit; + char *msg; + __code (*next)(); +}; + +__code print_struct(struct packet pkt) +{ + printf("#0017:bit: %d\n", pkt.bit); + printf("#0018:message: %s\n", pkt.msg); + goto ret(0, env); +} + +__code initSender(int init_bit, struct packet pkt) +{ + sender_bit = init_bit; + pkt.next = print_struct; + printf("#0026:initSender bit: %d\n", pkt.bit); + printf("#0027:initSender message: %s\n", pkt.msg); + printf("#0028:sender_bit: %d\n", sender_bit); + goto print_struct(pkt); +} + +int main(void) +{ + struct packet pkt; + pkt.bit = 1; + pkt.msg = "hogehoge"; + pkt.next = initSender; + ret = __return; + env = __environment; + printf("#0040:main bit: %d\n", pkt.bit); + printf("#0041:main message: %s\n", pkt.msg); + goto initSender(0, pkt); +} + diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/tmp1.c --- /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 */ diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/tmp2.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/tmp2.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,44 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +#include "stdio.h" + +int +main(ac,av) +int ac; +char *av[]; +{ + int i; + i=main0(ac,av); + fprintf(stdout,"#0012:1: %s %d\n",av[0],i); + return 0; +} + +int +main0(ac,av) +int ac; +char *av[]; +{ + fprintf(stdout,"#0021:2: %s\n",av[0]); + goto code0(av,__return,__environment); +} + +__code code0(av,ret,retenv) +char *av[]; +__code (*ret)(); +void *retenv; +{ + char *p; + p = av[0]; + fprintf(stdout,"#0032:3: %s\n",p); + goto code1(av,ret,retenv); +} + +__code code1(av,ret,retenv) +char *av[]; +__code (*ret)(); +void *retenv; +{ + fprintf(stdout,"#0041:4: %s\n",av[0]); + goto (*ret)(1234,retenv); +} diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/tmp4.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/tmp4.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,61 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +#include "stdio.h" + +int +main(ac,av) +int ac; +char *av[]; +{ + int i; + i=main0(ac,av); + fprintf(stdout,"#0012:1: %s %d\n",av[0]+2,i); + return 0; +} + +int +main0(ac,av) +int ac; +char *av[]; +{ + int i,j,k; + i=123; + j=456; + k=789; + fprintf(stdout,"#0025:2: %s\n",av[0]+2); + goto code0(i,j,k,av,__return,__environment); +} + +__code code0(i,j,k,av,ret,retenv) +int i,j,k; +char *av[]; +__code (*ret)(); +void *retenv; +{ + char *p; + p = av[0]+2; + fprintf(stdout,"#0037:3: i=%d j=%d k=%d av[0]=%s p=%s\n",i,j,k,av[0]+2,p); + goto code1(i,j,k,av,ret,retenv); +} + +__code code1(i,j,k,av,ret,retenv) +int i,j,k; +char *av[]; +__code (*ret)(); +void *retenv; +{ + fprintf(stdout,"#0047:4: %s\n",av[0]+2); + goto code2(i,j,k,av,ret,retenv); +} + +__code code2(i,j,k,av,ret,retenv) +int i,j,k; +char *av[]; +__code (*ret)(); +void *retenv; +{ + fprintf(stdout,"#0057:5: %s\n",av[0]+2); + fprintf(stdout,"#0058:5: i=%d j=%d k=%d\n",i,j,k); + goto (*ret)(1234,retenv); +} diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/tmpa.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/tmpa.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,49 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +#include + +struct enemy{ + int charno; // image number + float x; // x location + float y; // y location + int ap; // armor point +}; +void +print_param(struct enemy *e) +{ + printf("#0014:charno:%d x,y:%f,%f hp:%d\n", + e->charno,e->x,e->y,e->ap); +} + +typedef struct{ + char dest; + int VF01[4]; + __code (*ret)(); + void *env; +} interface; + +__code a0(interface a) { + printf("#0026:%d\n",a.dest); + goto a.ret(0,a.env); +} + + +int main(int argc,char *argv[]) +{ + struct enemy e; +#if 0 + interface args = {15,{0,0,0,0},return,environment}; +#else + interface args = {15,{0,0,0,0},0,0}; + args.ret = __return; + args.env = __environment; +#endif + + e.charno=5; e.x=50.0; e.y=30.0; e.ap=100; + print_param(&e); + + printf("#0045:%d %d\n",args.VF01[2],args.VF01[1]); + goto a0(args); +} + diff -r 65b2ea5f1266 -r 365b84b6fe04 CbC-examples/too-long-argument.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CbC-examples/too-long-argument.c Tue Sep 20 17:32:20 2011 +0900 @@ -0,0 +1,104 @@ +#define __environment _CbC_environment +#define __return _CbC_return + +#include + +#undef WRONGNUMBER + +typedef __code +(*CCC)( int f1,int f2,int f3,int f4,int f5,int f6,int f7,int f8,int f9,int fa,int fb,int fc,int fd,int fe,int ff, + __code(*ret)(int,void *), + void *env); + +__code +tcode2( int f1,int f2,int f3,int f4,int f5,int f6,int f7,int f8,int f9,int fa,int fb,int fc,int fd,int fe,int ff, + __code(*ret)(int,void *), + void *env) +{ +fprintf(stdout,"#0017:tcode2: f1=%d,f2=%d,f3=%d,f4=%d,f5=%d,f6=%d,f7=%d,f8=%d,f9=%d,fa=%d,fb=%d,fc=%d,fd=%d,fe=%d,ff=%d\n", +f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff); + goto ret(0,env); +} + +__code +tcode1(f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff,ret,env) + int f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff; + __code(*ret)(int,void *); + void *env; +{ +fprintf(stdout,"#0028:tcode1: f1=%d,f2=%d,f3=%d,f4=%d,f5=%d,f6=%d,f7=%d,f8=%d,f9=%d,fa=%d,fb=%d,fc=%d,fd=%d,fe=%d,ff=%d\n", +f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff); + goto ret(0,env); +} + +__code +tcode4(int x,int y,CCC junction,__code(*ret)(int),void *env) +{ +#ifdef WRONGNUMBER + goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,ret,env); +#else + goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,ret,env); +#endif +} + +__code +tcode0(int x,int y,__code(*junction)(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,__code(*)(int),void *),__code(*ret)(int),void *env) +{ +#ifdef WRONGNUMBER + goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,ret,env); +#else + goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,ret,env); +#endif +} + +int +main0() +{ +#ifdef WRONGNUMBER + goto tcode2(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, + __return,__environment); +#else + goto tcode2(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, + __return,__environment); +#endif +} + +int +main1() +{ +#ifdef WRONGNUMBER + goto tcode1(0,1,2,3,4,5,6,7,8,9,10,11,12,13, + __return,__environment); +#else + goto tcode1(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, + __return,__environment); +#endif +} + +int +main2() +{ + goto tcode0(0,1,tcode1,__return,__environment); +} + +int +main4() +{ + goto tcode4(0,1,tcode2,__return,__environment); +} + +int +main() +{ + printf("#0092:main4\n"); + main4(); + printf("#0094:main2\n"); + main2(); + printf("#0096:main0\n"); + main0(); + printf("#0098:main1\n"); + main1(); +return 0; +} + +//