Mercurial > hg > CbC > old > device
changeset 505:5d4112735c5c
*** empty log message ***
author | kono |
---|---|
date | Sat, 24 Dec 2005 12:58:20 +0900 |
parents | 48e4f6e6178c |
children | 96af6754acd3 |
files | Changes mc-inline.c |
diffstat | 2 files changed, 13 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Fri Dec 23 20:14:15 2005 +0900 +++ b/Changes Sat Dec 24 12:58:20 2005 +0900 @@ -7483,4 +7483,11 @@ ST_* 系列は、先に、cadr(e) を評価しちゃうのでif とかswitchとかの スコープが狂ってしまう。 - +st_* のcadr(e)の評価は g_expr0 でやっているのでst_*側でやる +必要はないらしい。pexpr のネストが深いのは気になるが、直し方が +わからず。大域変数を使うのが良いらしいが。 + pwhile(int in) { + out = list2(out,pexpr(in)); + return cadr(in); + } +みたいな感じ?
--- a/mc-inline.c Fri Dec 23 20:14:15 2005 +0900 +++ b/mc-inline.c Sat Dec 24 12:58:20 2005 +0900 @@ -20,7 +20,6 @@ st_decl(int e1){ // NMTBL *n = (NMTBL *)caddr(e1); // int stmode = cadddr(e1); - g_expr_u(cadr(e1)); } extern void @@ -46,7 +45,6 @@ fwddef(l1); } // conv->if_endif_(); - g_expr_u(cadr(e1)); } @@ -70,7 +68,6 @@ fwddef(blabel); clabel=scontinue; blabel=sbreak; - g_expr_u(cadr(e1)); } @@ -100,7 +97,6 @@ fwddef(blabel); clabel=scontinue; blabel=sbreak; - g_expr_u(cadr(e1)); } @@ -145,7 +141,6 @@ fwddef(blabel); clabel=scontinue; blabel=sbreak; - g_expr_u(cadr(e1)); } @@ -184,14 +179,12 @@ fwddef(blabel); blabel=sbreak; cslist = slist; - g_expr_u(cadr(e1)); } extern void st_comp(int e1){ g_expr_u(caddr(e1)); - g_expr_u(cadr(e1)); } @@ -201,7 +194,6 @@ // conv->break_(); if (control) gen_jmp(blabel); - g_expr_u(cadr(e1)); } @@ -210,7 +202,6 @@ checkret(); // conv->continue_(); if (control) gen_jmp(clabel); - g_expr_u(cadr(e1)); } @@ -261,7 +252,6 @@ cmpdimm(car(c),csvalue1,cslabel=fwdlabel(),1); if (l) fwddef(l); #endif - g_expr_u(cadr(e1)); } @@ -272,7 +262,6 @@ if (dlabel) error(STERR); // double default: dlabel = backdef(); // conv->case_(0,1); - g_expr_u(cadr(e1)); } @@ -313,7 +302,6 @@ } // conv->return_end_(); retpending = 1; - g_expr_u(cadr(e1)); } @@ -327,8 +315,7 @@ e1 = caddr(e); if (car(e1)==RINDIRECT) { gen_indirect_goto(cadr(e1)); - g_expr_u(cadr(e1)); - return; + return ; } else if (car(e1)==FLABEL) { nlist = (NMTBL *)cadr(e1); nptr0 = name_space_search(nlist,0); @@ -344,8 +331,7 @@ control=0; // conv->sm_(); // conv->goto_label_(nptr0); - g_expr_u(cadr(e1)); - return; + return ; } else { /* CbC continuation */ // conv->jump_(env); @@ -363,8 +349,7 @@ gexpr(list3(CODE,e1,env),0); control=0; // conv->sm_(); - g_expr_u(cadr(e1)); - return; + return ; } } @@ -374,7 +359,6 @@ st_asm(int e1){ checkret(); g_expr_u(list3(ASM,caddr(e1),cadddr(e1))); - g_expr_u(cadr(e1)); } #endif @@ -397,13 +381,11 @@ nptr->dsp = backdef(); } // conv->label_(); - g_expr_u(cadr(e1)); } extern void st_comment(int e1){ gen_comment((char *)caddr(e1)); - g_expr_u(cadr(e1)); } /* @@ -414,12 +396,12 @@ p_vartable(int e,int adisp,int ldisp) { int i; - pvartable = getfree(adisp-ldisp); // have to be local heap + int pvartable = getfree(adisp-ldisp); // have to be local heap pdisp = pvartable+adisp; for(i=adisp-ldisp;i>=0;i--) { heap[pvartable+i] = 0; } - return 0; + return pvartable; } static int