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);