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を格納する必要がある。