Mercurial > hg > CbC > old > device
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 の関数リストを作るのが良いんだろうけど。