Mercurial > hg > CbC > old > device
changeset 188:4303255fc3cf
minor fix
author | kono |
---|---|
date | Mon, 01 Dec 2003 20:07:57 +0900 |
parents | dffcccf8b1cb |
children | f53d70110377 |
files | Changes mc-parse.c mc.h |
diffstat | 3 files changed, 43 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Mon Dec 01 19:06:30 2003 +0900 +++ b/Changes Mon Dec 01 20:07:57 2003 +0900 @@ -993,7 +993,7 @@ 容易だろう。 やればできるけど、この修正の量だと1日じゃ終らないかなぁ。 -不動小数点も入れるのでしょう? +浮動小数点も入れるのでしょう? Mon Jan 10 09:00:12 JST 2000 @@ -3700,3 +3700,24 @@ なんだけど、t のcregが、ia32 ではvirtual register なので、変更される ことがある。(こまったもんだね) +CONDには type をいれた方がいいみたいね。a?b:c type でlist5か。 + + + void (*signal ()) (int); + +これだと signal が二回 function だと思われる。 + + recursive macro +#define stdout stdout + +main() +{ + register double d; + int i = stdout; + d *= i; register float への assop + return (int)d; +} + +というわけで、nkf は system の/usr/include/stdio.h で動きました。 +なんか、うれしい。 +
--- a/mc-parse.c Mon Dec 01 19:06:30 2003 +0900 +++ b/mc-parse.c Mon Dec 01 20:07:57 2003 +0900 @@ -772,7 +772,7 @@ while(type!=t1) { t3=cadr(type); - rplacad(type,t2); + cadr(type) = t2; t2=type; type=t3; } @@ -787,7 +787,7 @@ t2=0; while(t1) { t3=cadr(t1); - rplacad(t1,t2); + cadr(t1) = t2; t2=t1; t1=t3; } @@ -1115,7 +1115,7 @@ } else if (sym==RC) { conv->decl_data_end_(); if (caddr(t)==0) { /* size not defined */ - heap[t+2]=i+1; /* define array size */ + caddr(t)=i+1; /* define array size */ } else if (0 && caddr(t)!=i+1) { /* size match? */ error(TYERR); } @@ -1133,7 +1133,7 @@ error(TYERR); offset=assign_data(e,list3(ARRAY,CHAR,size(type)),n,offset); if (caddr(t)==0) { /* size not defined */ - heap[t+2]=size(type); /* define array size */ + caddr(t)=size(type); /* define array size */ } else if (caddr(t)!=size(type)) { /* size match? */ error(TYERR); } @@ -1223,8 +1223,8 @@ nptr0->sc = TAG; nptr0->ty = list4(s,-1,0,(int)nptr0); sdecl_field(); - heap[nptr0->ty+2]=fields; - rplacad(type0 = nptr0->ty,disp); + caddr(nptr0->ty)=fields; + cadr((type0 = nptr0->ty))=disp; /* type0 = list4(s,disp,fields,0); now ... */ } else { /* struct tag name */ @@ -1380,6 +1380,9 @@ int i,j,sz; int dsp = 0; NMTBL *n,*n1; + + /* f(a,b,c) { int c; short a; char* b;} case */ + // fprintf(stderr,"arg_reorder old:\n"); for(j=new_arg;j;j=cadr(j)) { n=(NMTBL *)caddr(j); @@ -1430,6 +1433,8 @@ stmode=0; decl(); getsym(0); } + // This order can be different from proto type. Proto type is correct. + // Recalculate offset using prototype list. // arglist is set by adecl() and is reversed. fnptr->dsp = arg_reorder(arglist,fnptr->dsp); } @@ -1440,6 +1445,7 @@ typedefed=0; conv->function_(fnptr,sd); conv->lc_(); init_vars=0; + /* local variable declaration */ local_decl(); control=1; @@ -1902,7 +1908,7 @@ int e = caddr(func); /* arg lists */ while(cadr(e)) e=cadr(e); /* find first arg */ e = car(e); /* return_struct arg */ - rplacad(e,left); + cadr(e) = left; } static void @@ -4239,7 +4245,9 @@ { NMTBL *nptr0; nptr0 = msearch0(macro); + /* save nptr previous contents in a list */ nptr0->ty=list3(nptr0->sc,nptr0->ty,nptr0->dsp); + /* set new value */ nptr0->sc=LMACRO; nptr0->dsp=list2((int)value,0); } @@ -4468,6 +4476,7 @@ } } +/* we can use cadr(e) = n; now. int rplacad(int e, int n) { @@ -4481,6 +4490,7 @@ heap[e+2]=n; return e; } + */ int append4(int p,int a1,int a2,int a3) @@ -4489,7 +4499,7 @@ if(!p) return list4(a1,0,a2,a3); p1=p; while(cadr(p)) p = cadr(p); - rplacad(p,list4(a1,0,a2,a3)); + cadr(p) = list4(a1,0,a2,a3); return p1; } @@ -4500,7 +4510,7 @@ if(!p) return list3(a1,0,a2); p1=p; while(cadr(p)) p = cadr(p); - rplacad(p,list3(a1,0,a2)); + cadr(p) = list3(a1,0,a2); return p1; }
--- a/mc.h Mon Dec 01 19:06:30 2003 +0900 +++ b/mc.h Mon Dec 01 20:07:57 2003 +0900 @@ -435,8 +435,10 @@ EXTERN int list3(int e1, int e2, int e3); EXTERN int list4(int e1, int e2, int e3, int e4); EXTERN int reverse0(int t1); +/* EXTERN int rplacad(int e, int n); EXTERN int rplacadd(int e, int n); + */ EXTERN int rvalue_t(int e,int type); EXTERN int scalar(int t); EXTERN void bexpr(int e1, char cond, int l1);