Mercurial > hg > CbC > old > device
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];