Mercurial > hg > CbC > old > device
changeset 75:92dcf107a837 c-code-output
c code output
author | kono |
---|---|
date | Mon, 24 Feb 2003 19:50:20 +0900 |
parents | 6de658ae384c |
children | fb3fb9e9a462 |
files | Changes conv/c.c mc-parse.c mc-tree.c |
diffstat | 4 files changed, 32 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Mon Feb 24 17:18:48 2003 +0900 +++ b/Changes Mon Feb 24 19:50:20 2003 +0900 @@ -1619,7 +1619,7 @@ みたいな時に自分自身を壊してしまう。なので、emit_copy が、ちゃんと方向を見て壊さないように処理する必要がある。 -call bcop でいいじゃん。まね。 +call bcopy でいいじゃん。まね。 Wed Feb 19 20:42:07 JST 2003 @@ -1747,3 +1747,20 @@ 合に表示を行ってはいけない。 なんか関数の引数の型の値が微妙に変わるんですけど... やだなぁ... + +まだ、関数定義のtypedefがstructに変わってしまう。gtypedefed +がうまく動いていない? + +Mon Feb 24 17:24:31 JST 2003 + +まぁねぇ。やっぱり完全に構文木から再構成した方が +便利ではあるよね。特に getsym (空白など)と conv->x_() +との総合作用はめんどくさい。 + +そのためには、局所変数名をtree上で持ち歩く必要がある。 +まぁ、そうすれば良いだけだけど。 + +実際、今のセットで出来るかどうかは、ちょっと怪しい。 +たぶん、buffer に出力するってのをいれればおそらくは +変換できるだろう。 +
--- a/conv/c.c Mon Feb 24 17:18:48 2003 +0900 +++ b/conv/c.c Mon Feb 24 19:50:20 2003 +0900 @@ -192,8 +192,8 @@ } void -function_(NMTBL *n,int args){ - type_print(n->ty,0,vout); +function_(NMTBL *n,int args,int cont){ + type_print1(n->ty,0,vout,cont); fprintf(vout,"%s(",n->nm); args=reverse0(args); while(args) {
--- a/mc-parse.c Mon Feb 24 17:18:48 2003 +0900 +++ b/mc-parse.c Mon Feb 24 19:50:20 2003 +0900 @@ -356,7 +356,7 @@ decl(void) { NMTBL *n; - int t; + int t; int sd; if (mode==GDECL) typedefed=0; if(sym==STATIC) { @@ -398,7 +398,7 @@ conv->return_type_(t,0,stypedecl); conv->sm_(); return; } - type=t; + type=t; sd=stypedecl; n=decl0(); reverse(t); if (n == &null_nptr) { @@ -406,13 +406,14 @@ return; } if(sym==LC || ( sym!=SM && sym!=COMMA && sym!=ASS )) { + stypedecl=sd; if (car(type)==CODE) { code_decl(n); return; } else if (car(type)==FUNCTION) { fdecl(n); return; } else error(TYERR); } - conv->return_type_(type,n,stypedecl); + conv->return_type_(type,n,sd); def(n); while(sym==COMMA) { conv->comma_(); @@ -474,8 +475,6 @@ getsym(); break; } else if(nptr->sc==EMPTY && gnptr->sc==TYPE) { - t=gnptr->ty; - gtypedefed=glist2((int)gnptr,gtypedefed); getsym(); break; } @@ -746,6 +745,8 @@ break; case GTDECL: nsc = TYPE; + if (gnptr!=n) error(-1); + gtypedefed=glist2((int)gnptr,gtypedefed); break; case ADECL: arglist = list3((int)n,arglist,0); @@ -1050,6 +1051,7 @@ control=0; conv->code_end_(); if(!chk) code_leave(n->nm); + arglist=0; } static NMTBL *tmp_struct; @@ -1057,6 +1059,7 @@ static void fdecl(NMTBL *n) { + int sd = stypedecl; if(!chk) enter(n->nm); fnptr=n; retlabel=fwdlabel(); @@ -1076,7 +1079,7 @@ } fdecl_struct(fnptr->ty); typedefed=0; - conv->function_(fnptr,arglist); conv->lc_(); + conv->function_(fnptr,arglist,sd); conv->lc_(); disp=0; init_vars=0; /* local variable declaration */ @@ -1098,6 +1101,7 @@ if(!chk) leave(control,n->nm); retpending = 0; control=0; + arglist=0; } static NMTBL str_ret;
--- a/mc-tree.c Mon Feb 24 17:18:48 2003 +0900 +++ b/mc-tree.c Mon Feb 24 19:50:20 2003 +0900 @@ -308,10 +308,10 @@ NMTBL *td; int args; - if((td=typedef_search(typedefed,type))) { + if(type>0&&(td=typedef_search(typedefed,type))) { if (!cont) fprintf(out,"%s ",td->nm); - } else if((td=typedef_search(gtypedefed,type))) { + } else if(type>0&&(td=typedef_search(gtypedefed,type))) { if (!cont) fprintf(out,"%s ",td->nm); } else if (type<0) {