Mercurial > hg > CbC > old > device
changeset 613:3b9e0e59ab97
*** empty log message ***
author | kono |
---|---|
date | Wed, 19 Apr 2006 14:32:36 +0900 |
parents | 26daeeef30a0 |
children | e4e007f4026d |
files | Changes mc-codegen.c |
diffstat | 2 files changed, 46 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Sat Apr 15 22:21:52 2006 +0900 +++ b/Changes Wed Apr 19 14:32:36 2006 +0900 @@ -8714,3 +8714,18 @@ nptr->dsp = i; 再利用を考えると、これじゃないか? (また、時間があったら、直そう...) + +Sun Apr 16 17:41:36 JST 2006 + +やっぱり、list の実装が見えるのは良くない。GC を入れても良いし。 +そういう意味では、そろそろ捨ててもいいし、作り直しても良いんだよな。 + +list のタグで要素の型がわかる方がいいけどね。ということは、 +Object で構成するってこと? Java で書き直してもいいけど。 +まぁ、いいろいろイキヅマリガあるよな。 + + + + + +
--- a/mc-codegen.c Sat Apr 15 22:21:52 2006 +0900 +++ b/mc-codegen.c Wed Apr 19 14:32:36 2006 +0900 @@ -290,6 +290,12 @@ jump(e2,caddr(e1)); return VOID; case ARRAY: + if (chk==2) { + g_expr0(e2); + g_expr0(caddr(e1)); + code_gexpr(e1); + return t; + } e1=binop(ADD,e2,caddr(e1),cadddr(e1),caddddr(e1)); e1 = indop(e1); t = type; g_expr0(e1); @@ -2925,13 +2931,17 @@ if (car(e)<0) { mode = GDECL; switch (car(e)){ - case CONST: e=list2(car(e),cadr(e)); + case CONST: e=list2(car(e),cadr(e)); break; case FCONST: - case DCONST: e=dlist2(car(e),dcadr(e)); - case LCONST: e=llist2(car(e),lcadr(e)); - case STRING: e=list3(car(e),cadr(e),caddr(e)); + case DCONST: e=dlist2(car(e),dcadr(e)); break; + case LCONST: e=llist2(car(e),lcadr(e)); break; + case STRING: e=list3(car(e),cadr(e),caddr(e)); break; case STRUCT: // for udpcl - e=glist3(car(e),copy_expr(cadr(e)),copy_expr(caddr(e))); + e=glist3(car(e),copy_expr(cadr(e)),copy_expr(caddr(e))); break; + case ARRAY: + e= glist5(car(e),copy_expr(cadr(e)), + copy_expr(caddr(e)),cadddr(e),caddddr(e)); + break; } mode = smode; return e; @@ -2941,8 +2951,6 @@ case ARROW: case PERIOD: return glist4(car(e),copy_expr(cadr(e)),caddr(e),cadddr(e)); - case ARRAY: - return glist5(car(e),copy_expr(cadr(e)),copy_expr(caddr(e)),cadddr(e),caddddr(e)); case LVAR: case RLVAR: case GVAR: case RGVAR: return (e>=lfree)?glist3(car(e),cadr(e),caddr(e)):e; @@ -3047,24 +3055,26 @@ // printf("## asm\n"); e = reverse0(e); + for(i=out;i;i=cadr(i)) { - p = ((NMTBL*)cadr(car(i)))->nm; - e1 = car(e); e = cadr(e); - repl = code_asm_operand(p,e1,ASM_OUTPUT,repl,0,0); - if (car(car(repl))==REGISTER) { - assign = list2(assign_expr0(e1,car(repl),INT,INT),assign); - } + p = ((NMTBL*)cadr(car(i)))->nm; + e1 = car(e); e = cadr(e); + repl = code_asm_operand(p,e1,ASM_OUTPUT,repl,0,0); + if (!chk && car(car(repl))==REGISTER) { + assign = list2(assign_expr0(e1,car(repl),INT,INT),assign); + } } repl0 = repl; n = length(repl0); for(i=in;i;i=cadr(i)) { - p = ((NMTBL*)cadr(car(i)))->nm; - e1 = car(e); e = cadr(e); - repl = code_asm_operand(p,e1,ASM_INPUT,repl,n,repl0); - if (car(car(repl))==REGISTER) { - g_expr_u(assign_expr0(car(repl),e1,INT,INT)); - } + p = ((NMTBL*)cadr(car(i)))->nm; + e1 = car(e); e = cadr(e); + repl = code_asm_operand(p,e1,ASM_INPUT,repl,n,repl0); + if (!chk && car(car(repl))==REGISTER) { + g_expr_u(assign_expr0(car(repl),e1,INT,INT)); + } } + repl = reverse0(repl); p = ((NMTBL*)cadr(asm0))->nm; code_asm(p,repl); @@ -4530,7 +4540,8 @@ } if ((t1=type_value(type))>0 && car(type_value(type))==ARRAY && car(e)==GVAR) { - e=list2(ADDRESS,e); + if (!chk) + e=list2(ADDRESS,e); } if (t>0) { switch(car(t)) {