changeset 360:d8190f815254

*** empty log message ***
author kono
date Mon, 05 Jul 2004 11:26:03 +0900
parents 7ab4434ad869
children 93652cda75c7
files Changes mc-parse.c
diffstat 2 files changed, 21 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Mon Jul 05 10:42:25 2004 +0900
+++ b/Changes	Mon Jul 05 11:26:03 2004 +0900
@@ -5492,3 +5492,13 @@
 ぐらいではぜんぜんだめ。
 
 別に問題なくできるじゃん。なにやってんだ?
+
+LDECL の中間 nlist って本当にいるの? こんなのがあるから、中
+間の nptr を一つ無駄にしているんだよね。make_local_scope だ
+けで良いんじゃないかな。macro は、それで動いているわけだし。
+
+なんか、struct が、ちょっとだめなみたいだな。type名がlocal
+になってしまうから?
+
+なんか、type と tag をglobalにするので通ったけど... scope
+に関しては、もう少しテストを書かないとだめだな。
--- a/mc-parse.c	Mon Jul 05 10:42:25 2004 +0900
+++ b/mc-parse.c	Mon Jul 05 11:26:03 2004 +0900
@@ -1034,6 +1034,9 @@
     unsigned int hash = 0;
     struct cheap scheap;
     NMTBL *n;
+#if 1
+    NMTBL *nlist;
+#endif
 
     while((ch = *name++)) {
 	hash_value(hash,*cheap->ptr = ch);
@@ -1054,8 +1057,7 @@
     *cheap->ptr = 0;
     increment_cheap(cheap,&p);
     save_cheap(&scheap,cheap);
-    n = name_space_search(
-	name_space_search(hash_search(delimit=='_'?p:q,&scheap,len,hash,DEF),LDECL),0);
+    n = name_space_search(nlist=hash_search(delimit=='_'?p:q,&scheap,len,hash,DEF),0);
     n->nm = p;
     return n;
 }
@@ -3233,7 +3235,7 @@
 extern int
 getsym(int sc)
 {
-    NMTBL *nlist,*nptr0,*nptr1,*nptrm;
+    NMTBL *nlist,*nptr0,*nptrm;
     char c;
 
     if (alpha(skipspc())) {
@@ -3266,19 +3268,14 @@
 	    mode==GTDECL || mode==TOP || mode==GEDECL) {
 	    return sym;
 	}
-
-        /* local variable name table */
-	nptr1 = name_space_search(nlist=name_space_search(nlist,LDECL),sc);
+	if (nptr->sc == TYPE) return sym;
+	if (nptr->sc == TAG) return sym;
 	if (mode==STAT) {
 	    /* can be undeclared global variable */
-	    if (nptr1->sc == EMPTY) return sym;
-	    else {
-		nptr=nptr1;
-		return sym;
-	    }
+	    return sym;
 	}
 	/* define case */
-	nptr = make_local_scope(nlist,nptr1,sc);
+	nptr = make_local_scope(nlist,nptr,sc);
 	return sym;
 
     } else if (digit(ch)||ch=='.') {
@@ -3484,8 +3481,7 @@
 lsearch(char *name,int sc)
 {
     NMTBL *nlist,*nptr1;
-    nptr1 = name_space_search(
-		nlist = name_space_search(get_name(name,0,DEF),LDECL),sc);
+    nptr1 = name_space_search(nlist=get_name(name,0,DEF),sc);
     return make_local_scope(nlist,nptr1,sc);
 }
 
@@ -3494,8 +3490,7 @@
 l_top_search(char *name,int sc)
 {
     NMTBL *nlist,*nptr1;
-    nptr1 = name_space_search(
-		nlist = name_space_search(get_name(name,0,DEF),LDECL),sc);
+    nptr1 = name_space_search(nlist=get_name(name,0,DEF),sc);
     return make_top_scope(nlist,nptr1,sc);
 }