changeset 194:114e9d64b5cc

*** empty log message ***
author kono
date Sat, 10 Jan 2004 17:13:49 +0900
parents ce0c38b6c85e
children c193120ee2a6
files Changes mc-codegen.c mc-parse.c mc.h stdio.h
diffstat 5 files changed, 146 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Sun Dec 14 16:53:42 2003 +0900
+++ b/Changes	Sat Jan 10 17:13:49 2004 +0900
@@ -3750,3 +3750,65 @@
 かぁ。(めんどくさいだけどさ)
 
 (本気? どれくらいかかる? 2-3日かなぁ...)
+
+getsym の数字の扱いはunsingedでするべきだよね。
+で、- があった時にoverflow を検出するのが良いよな。
+
+あと、strol とかのoverflowの検出をさぼってるな。
+
+Fri Jan  2 09:53:53 JST 2004
+
+     goto hoge(...,next);
+     fuagua....;
+
+みたいな構文をいれる? Fortran みたい....
+(簡単か?)
+
+Sat Jan  3 17:12:46 JST 2004
+
+FEATURE_LONGLONG 
+FEATURE_FLOAT
+
+みたいな感じで feature を落せる方が良い? 機能を増やす方向 
+とは相性が良くない言語だから。
+
+LEとかLTは、GE,GTで置き換えられるんだけど、片方が定数のときには
+dual_op で入れ換えられちゃうので、やっぱり必要なみたい。
+
+Mon Jan  5 15:55:37 JST 2004
+
+byte code format というよりは、やっぱりbyte code encode
+された構文木が欲しいんだよね。
+
+ついでに interpreter も作るか。byte code interpreter ではなくて、
+(ではなくて?) code 生成が速いんだから、code生成しながら実行する
+方が良いね。やっぱり、incore compiler か。
+
+inline なんだけど... #define に置き換えられる?
+    inline int hoge(int hoga1) { hoge2 }
+は、
+    #define hoge(hoga1_0) { 
+    #define hoga1 ((int) hoga1_0)
+    int hoga1 = hoga1_0; hoge2 }
+でいいわけだよね。で、問題は return だけど...
+
+うーん、いま6ですな。
+
+inline は、そのままstringバッファにしこんで、関数呼び出し時に
+処理する方が正しいか。
+
+    引数は、#define hoga1 ((int) hoga1_0) していく。
+    展開終了時に元に戻す
+
+あぁ、でも、大域変数がまずいか。
+
+ということは、やっぱり、その場で構文解析してしまうのが良い。
+    inlined LVAR (ARG)
+の両方が必要。tree のコピーなしに展開することは可能? (できそうだけど...)
+
+ということは、やっぱり、制御構造にもnodeを割り振るべきだよね。
+
+order 1 compiler  + JIT + intensive optimizer
+
+ですかね。
+
--- a/mc-codegen.c	Sun Dec 14 16:53:42 2003 +0900
+++ b/mc-codegen.c	Sat Jan 10 17:13:49 2004 +0900
@@ -418,10 +418,20 @@
 	return;
 
     case DOP+GT:
-	drexpr(cadr(e1),caddr(e1),l1,DOP+GT);
+    case DOP+GE:
+    case DOP+EQ:
+    case DOP+NEQ:
+    case FOP+GT:
+    case FOP+GE:
+    case FOP+EQ:
+    case FOP+NEQ:
+	drexpr(cadr(e1),caddr(e1),l1,car(e1));
 	return;
-    case DOP+GE:
-	drexpr(cadr(e1),caddr(e1),l1,DOP+GE);
+    case FOP+LT:
+	drexpr(caddr(e1),cadr(e1),l1,FOP+GT);
+	return;
+    case FOP+LE:
+	drexpr(caddr(e1),cadr(e1),l1,FOP+GE);
 	return;
     case DOP+LT:
 	drexpr(caddr(e1),cadr(e1),l1,DOP+GT);
@@ -429,32 +439,6 @@
     case DOP+LE:
 	drexpr(caddr(e1),cadr(e1),l1,DOP+GE);
 	return;
-    case DOP+EQ:
-	drexpr(cadr(e1),caddr(e1),l1,DOP+EQ);
-	return;
-    case DOP+NEQ:
-	drexpr(cadr(e1),caddr(e1),l1,DOP+NEQ);
-	return;
-
-    case FOP+GT:
-	drexpr(cadr(e1),caddr(e1),l1,FOP+GT);
-	return;
-    case FOP+GE:
-	drexpr(cadr(e1),caddr(e1),l1,FOP+GE);
-	return;
-    case FOP+LT:
-	drexpr(caddr(e1),cadr(e1),l1,FOP+GT);
-	return;
-    case FOP+LE:
-	drexpr(caddr(e1),cadr(e1),l1,FOP+GE);
-	return;
-    case FOP+EQ:
-	drexpr(cadr(e1),caddr(e1),l1,FOP+EQ);
-	return;
-    case FOP+NEQ:
-	drexpr(cadr(e1),caddr(e1),l1,FOP+NEQ);
-	return;
-
 
     case LAND:
 	b_expr(e2,0,cond?(l2=fwdlabel()):l1,0);
--- a/mc-parse.c	Sun Dec 14 16:53:42 2003 +0900
+++ b/mc-parse.c	Sat Jan 10 17:13:49 2004 +0900
@@ -2957,7 +2957,13 @@
     if (car(e1)==dop+CONST && (op==ADD||op==MUL)) {
 	return(list3(op+dop,e2,e1));
     }
-    if(op==GT||op==GE||op==LT||op==LE||op==EQ||op==NEQ) {
+    if(op==LT) {
+	type=INT;
+	return(list3(GT+dop,e2,e1));
+    } else if(op==LE) {
+	type=INT;
+	return(list3(GE+dop,e2,e1));
+    } else if(op==GT||op==GE||op==LT||op==LE||op==EQ||op==NEQ) {
 	type=INT;
 	return(list3(op+dop,e1,e2));
     } else if(op==ADD||op==SUB||op==MUL||op==DIV)
@@ -3059,7 +3065,15 @@
 	}
 	return list2(CONST,e);
     }
-    if(op==GT||op==GE||op==LT||op==LE||
+    if(op==LT) {
+	return(list3(GT,e2,e1));
+    } else if(op==LE) {
+	return(list3(GE,e2,e1));
+    } else if(op==ULT) {
+	return(list3(UGT,e2,e1));
+    } else if(op==ULE) {
+	return(list3(UGE,e2,e1));
+    } else if(op==GT||op==GE||op==LT||op==LE||
 	    op==UGT||op==UGE||op==ULT||op==ULE||
 	    op==EQ||op==NEQ
 	    )
--- a/mc.h	Sun Dec 14 16:53:42 2003 +0900
+++ b/mc.h	Sat Jan 10 17:13:49 2004 +0900
@@ -182,7 +182,8 @@
 #define SURINDIRECT	(SOP+CURINDIRECT)
 #define FRINDIRECT	(FOP+RINDIRECT)
 #define DRINDIRECT	(DOP+RINDIRECT)
-#define LRINDIRECT	(DOP+CRINDIRECT)
+#define LRINDIRECT	(LOP+CRINDIRECT)
+#define LURINDIRECT	(LOP+CURINDIRECT)
 #define RSTRUCT	34
 #define CONV	35
 
@@ -278,28 +279,59 @@
 
 /* not appeared as tags */
 
-#define I2D	73
-#define D2I	74
-#define U2D	75
-#define D2U	76
-#define F2D	77
-#define D2F	78
-#define I2F	79
-#define F2I	80
-#define U2F	81
-#define F2U	82
+#define I2I	73
+#define I2U	74
+#define I2D	75
+#define I2F	76
+#define I2LL	77
+#define I2ULL	78
+
+#define U2I	79
+#define U2U	80
+#define U2D	81
+#define U2F	82
+#define U2LL	83
+#define U2ULL	84
+
+#define D2I	(DOP+I2I)
+#define D2U	(DOP+I2U)
+#define D2D	(DOP+I2D)
+#define D2F	(DOP+I2F)
+#define D2LL	(DOP+I2LL)
+#define D2ULL	(DOP+I2ULL)
 
-#define LPAR	83
-#define RPAR	84
-#define LBRA	85
-#define RBRA	86
-#define LC	87
-#define RC	88
-#define COLON	89
-#define SM	90
-#define PERIOD	91
-#define ARROW	92
-#define CNAME	93
+#define F2I	(FOP+I2I)
+#define F2U	(FOP+I2U)
+#define F2D	(FOP+I2D)
+#define F2F	(FOP+I2F)
+#define F2LL	(FOP+I2LL)
+#define F2ULL	(FOP+I2ULL)
+
+#define LL2I	(LOP+I2I)
+#define LL2U	(LOP+I2U)
+#define LL2D	(LOP+I2D)
+#define LL2F	(LOP+I2F)
+#define LL2LL	(LOP+I2LL)
+#define LL2ULL	(LOP+I2ULL)
+
+#define ULL2I	(LOP+U2I)
+#define ULL2U	(LOP+U2U)
+#define ULL2D	(LOP+U2D)
+#define ULL2F	(LOP+U2F)
+#define ULL2LL	(LOP+U2LL)
+#define ULL2ULL	(LOP+U2ULL)
+
+#define LPAR	85
+#define RPAR	86
+#define LBRA	87
+#define RBRA	88
+#define LC	89
+#define RC	90
+#define COLON	91
+#define SM	92
+#define PERIOD	93
+#define ARROW	94
+#define CNAME	95
 
 /* tree node tags end */
 
--- a/stdio.h	Sun Dec 14 16:53:42 2003 +0900
+++ b/stdio.h	Sat Jan 10 17:13:49 2004 +0900
@@ -1,4 +1,4 @@
-#ifndef __micro_c__aaa
+#ifndef __micro_c__aaa 
 #include "/usr/include/stdio.h"
 #else