Mercurial > hg > CbC > old > device
diff Idea @ 28:c6994794f084
functional macro (imcomplete)
author | kono |
---|---|
date | Sat, 08 Feb 2003 00:58:04 +0900 |
parents | 85b8648de04f |
children | 160e20394f80 |
line wrap: on
line diff
--- a/Idea Fri Feb 07 14:23:25 2003 +0900 +++ b/Idea Sat Feb 08 00:58:04 2003 +0900 @@ -1323,3 +1323,44 @@ あとデータフローだよね。データフローに関しては、 あんまりやってないなぁ +Fri Feb 7 14:36:15 JST 2003 + +inline では、必らず、局所変数の増加がある。また、inline +は普通の関数として展開しておく必要もあるらしい。(何故?) + +#define ねぇ。 + + #define c(a,b) g(a+1,b+1) + #define g(a,b) printf("%d %d\n",a+1,b+1); + + main() { + int a,b; + a =1; b = 3; + c(a,b); + } + +local #define がいるんだよね。g の中で a が出て来た時には、 +c のa の置き換えは起こってはいけない。ということは、c +の置き換えはg が始まる前に終っている必要がある。dynamic +scope なんだから、assoc の上乗せで良いはず。 +macro のlevelを定義して、あるレベルでは、それ以前の展開 +を行わないという手法が良いかな。 + + c(a,b) => a=>"a+1", b=>"b+1" + g(a,b) => (a=>"a+1+1",a=>"a+1"), (b=>"b+1+1",a=>"a+1") + +みたいな感じ? + +やっぱり関数解析でマクロ処理をやらせるのは無理かな? 先読みされちゃうし。 + +Sat Feb 8 00:53:52 JST 2003 + +macro は途中まで書きました。置き換えをマクロが呼び出された +時点で cheap に置くと、それを解消するタイミングがない。 +ここだけmallocしても良いが.. + +chptrsave はlistにする必要がある。list で良い。 + +やっぱりmacro levelを見て、自分と一致したassoc valueまで +手繰って置換するんでしょう。そうすれば、置き換える必要は無い。 +ということは、local_define にmflagsを格納する必要がある。