changeset 25:b7a94557bf92

*** empty log message ***
author kono
date Wed, 05 Feb 2003 02:34:28 +0900
parents 1df0bf7eb5da
children 85b8648de04f
files Idea mc-parse.c mc.h
diffstat 3 files changed, 57 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/Idea	Tue Feb 04 14:39:01 2003 +0900
+++ b/Idea	Wed Feb 05 02:34:28 2003 +0900
@@ -1234,6 +1234,7 @@
 Fri Jan 31 20:30:36 JST 2003
 
 なんか #ifdef / #if がないとだめだな。実装する?
+しました。
 
 Tue Feb  4 01:04:12 JST 2003
 
@@ -1268,3 +1269,48 @@
 
 use_pointer って、なにもしなくていいんだよね? eax,ebx を避ける
 ってことらしいけど。
+
+inline/引数付き #define 欲しくない? 置き換えは、local name stack に積んじゃう。
+展開は function  で行う。
+
+getch を工夫する必要はあるが。置き換えスタックが必要。
+
+
+Wed Feb  5 01:16:00 JST 2003
+
+大域で定義された struct field が大域変数と重なっていると落ちる。
+そりゃそうだけど。どうするの? (直した記憶があるんだけどなぁ...)
+struct 毎に field 名とoffset/type の組を持てばい良いんだよね。
+
+なんだけど、タグ無しの構造体もあるから、型名の方に付ける必要
+もある。というのは、型名のない構造体もあるから。タグ名には、
+一応、リストがついている。なんかに使う必要があったんでしょう
+ね。あ、めんどう。無条件にやっても大域変数名を汚すのを直すの
+が難しい。
+
+ちょっと、あれだけど、「型名.フィールド名」で登録してしまうのはどう?
+型名が後で出て来るところが気まずいが...
+
+def で登録するときに、nptrにdispを代入せずに、struct field list
+(大域変数) に入れて、type の方に、field list (list3(nptr,offset,
+type)) を入れれば良い。
+
+あとは、strop の方でtypeのlistを見るようにすれば良いわけだ。
+
+これなら、簡単に直せるはず。LUSTR/GUSTRなどの区別もなくなるし。
+
+Wed Feb  5 02:10:14 JST 2003
+
+浮動小数点ねぇ。完全なANSI Cにするのは大変。でも、
+浮動小数点ぐらいないと。
+
+code generation part を、さらに分割して、
+複数のコード対応にしやすいようにする。
+おそらく、それほど共有する部分はないけどね。
+
+Sample C code をコンパイルして、その結果から(半分手動で)
+Micro CbC code generation part を生成する方法を用意する。
+
+
+
+
--- a/mc-parse.c	Tue Feb 04 14:39:01 2003 +0900
+++ b/mc-parse.c	Wed Feb 05 02:34:28 2003 +0900
@@ -194,7 +194,7 @@
 	    exit(0);
 	}
     }
-    fprintf(stderr,"%5d:%s.\n",lineno,
+    fprintf(stderr,"%s:%d:%s\n",filep->name0,lineno,
 	(n==FILERR) ? "Can't open specified file" :
 	(n==DCERR) ? "Declaration syntax" :
 	(n==STERR) ? "Statement syntax" :
@@ -302,10 +302,14 @@
 void
 newfile(void)
 {
+    char *s;
     lineno=0;
     /* fprintf(stderr,"%s:\n",av[ac2]); */
     opening(av[ac2]);
     if ( (filep->fcb = fopen(av[ac2++],"r")) == NULL ) error(FILERR);
+    s = av[ac2-1];
+    filep->name0 = cheapp;
+    while((*cheapp++ = *s++));
 }
 
 void
@@ -2481,7 +2485,7 @@
 getfname(void)
 {
     int i;
-    char name[LBUFSIZE];
+    char *s,name[LBUFSIZE];
     FILE *fp;
 
     getch();
@@ -2492,6 +2496,9 @@
     if(ch=='\n') error(INCERR);
     name[i]=0;
     fp = fopen(name,"r") ;
+    s = name;
+    (filep+1)->name0 = cheapp;
+    while((*cheapp++ = *s++));
     return ( (filep+1)->fcb = fp );
 }
 
@@ -2510,15 +2517,7 @@
 	glineno++;
 	chptr=linebuf;
 	i=0;
-#if 1
 	while ((*chptr++ = c = getc(filep->fcb)) != '\n') {
-#else
-	while ((c=getc(filep->fcb)),(*chptr++=c)!='\n') {
-#endif
-	 /* we cannot handle unsaved register in library call
-	    so make it easy for the compiler
-            \  line  continuation?
-	 */
 	    if (++i > LBUFSIZE-2) error(LNERR);
 	    if (c==EOF) {	
 		    error(EOFERR);
--- a/mc.h	Tue Feb 04 14:39:01 2003 +0900
+++ b/mc.h	Wed Feb 05 02:34:28 2003 +0900
@@ -171,7 +171,7 @@
 #define CHEAPSIZE	256000
 #define LBUFSIZE	4096
 
-#define FILES 3
+#define FILES 10
 #define OUTPUT_FILE_NAME "mcout.s"
 
 EXTERN int sym,ch,chsave,type,mode,stmode,gfree,lfree,mflag,lineno,glineno;
@@ -197,6 +197,6 @@
 EXTERN NMTBL ntable[GSYMS+LSYMS],*nptr,*gnptr,*decl0(void),*decl1(void),*lsearch(char *name),*gsearch(void);
 EXTERN NMTBL *fnptr;
 
-EXTERN struct {int fd,ln;/*char fcb[320]*/FILE *fcb;} *filep,filestack[FILES];
+EXTERN struct {int fd,ln;char *name0;FILE *fcb;} *filep,filestack[FILES];
 EXTERN char cheap[CHEAPSIZE];