diff Changes @ 453:1e5ca85d3f97

inline on going...
author kono
date Tue, 30 Nov 2004 02:20:42 +0900
parents 8e3284b0a8c9
children b8f95294eb77
line wrap: on
line diff
--- a/Changes	Mon Nov 29 04:15:38 2004 +0900
+++ b/Changes	Tue Nov 30 02:20:42 2004 +0900
@@ -6618,23 +6618,27 @@
 よし、inline やるか。
 
    inline function (or parsed tree)
-       list4(INLINE,name,type)
+       // list4(INLINE,name,type)
+       sc = INLINE
+       attr = parse
    declaration (argument, local, static)
-       list4(DECL,next,init,NMTBL *nptr)        done by def (?)
+       list4(ST_DECL,next,NMTBL *nptr,stmode)        done by def (?)
    statement
-       list3(IF,next,list3(cond,then,else))
-       list3(DO,next,list2(cond,while))
-       list3(FOR,next,list4(A,B,C,body))
-       list4(SWITCH,next,expr,body)
-       list3(COMP,next,body)
-       list2(BREAK,next)
-       list2(CONTINUE,next)
-       list3(CASE,next,label)
+       list3(ST_IF,next,list3(cond,then,else))
+       list4(ST_DO,next,cond,while)
+       list4(ST_WHILE,next,cond,while)
+       list3(ST_FOR,next,list4(A,B,C,body))
+       list4(ST_SWITCH,next,expr,body)
+       list3(ST_COMP,next,body)
+       list2(ST_BREAK,next)
+       list2(ST_CONTINUE,next)
+       list3(ST_CASE,next,label)
+       list3(ST_DEFAULT,next)
        list3(ST_RETURN,next,expr)
-       list3(GOTO,next,expr,env)
-       list3(ST_ASM,next,list4(A,B,C,D))
+       list3(ST_GOTO,next,expr,env)
+       list3(ST_ASM,next,list4(A,B,C,D),e1)
        list3(ST_LABEL,next,label)
-       list3(COMMENT,next,comment)  (?)
+       list3(ST_COMMENT,next,comment)  (?)
 
   いくつかはexprと重なるけど... (まずい?) RETURN, ASM
 
@@ -6933,3 +6937,29 @@
 	  int arg0,...argn;
       }
    }
+
+Mon Nov 29 11:55:14 JST 2004
+
+attr は、連想リストにするべきか。
+
+partial evaluation を、どの段階で行うかっていう問題があるのか。
+
+expr15 (function call)
+
+inline 木作成の最中に展開すると繰り返し展開することになる。
+しなくても良いが... しかも、ST_* が expr の中に残ってしまう
+ので、g_expr で、ST_* を扱うことが必須。ってことは変更が結構
+大きい。ここで展開すると binop の最適化にひっかかるので簡単。
+docomp と同じ扱いが必要?
+
+function (codegen)
+
+ここで展開すると、代入とかが変数扱いしかしなくなる。手遅れ。
+
+ってことは、expr15 で、partial evalucation はやる。inline
+中は展開しないとして、残った ST_* は、g_expr で処理する
+ってことですね。
+
+static でもポインタを取られたりすると関数を生成する必要がある。
+extern なら、なおさら。それは、自分でやらないとダメ。まぁ、
+inline の関数リストを作るのが良いんだろうけど。