comparison Idea @ 18:df7fa8cee67b

pass -Wall add ifdef
author kono
date Sat, 01 Feb 2003 22:19:29 +0900
parents ca0bce3b4810
children e605560e6146
comparison
equal deleted inserted replaced
17:fdbf2fbc8140 18:df7fa8cee67b
1152 まぁ、それほど必要な機能ではないんだけど。 1152 まぁ、それほど必要な機能ではないんだけど。
1153 1153
1154 これもcontinuationを渡してやると言う手法が使えないことはないんだが... 1154 これもcontinuationを渡してやると言う手法が使えないことはないんだが...
1155 1155
1156 関数呼び出しの最初にやってやればいいか。それでできるかな? 1156 関数呼び出しの最初にやってやればいいか。それでできるかな?
1157
1158
1159 Mon Jan 20 18:25:27 JST 2003
1160
1161 3年間さわってないのかよ。何やってんだ?
1162
1163 goto 文のバグをとらないといけない。
1164
1165 まず、関数引数の構造体の展開。これは、どうってことないはず。
1166
1167 goto (*code)(i+1,j,...)
1168
1169 まず、いじらなくてすむ変数を摘出する。
1170
1171 foreach arg
1172 compare
1173
1174 単純演算 ( op+const , pointer , const assign ) などは、ここで検出する。
1175 大半は、そのようになるはず。
1176 レジスタに乗せる分があるから... それには触らないとして...
1177
1178 複雑なものは、前もって計算しておく。(get_register する)
1179 スタック上かレジスタ上に作る。
1180
1181 残りは並列代入となる。再帰的に計算する。
1182
1183 えーと、大きな順にやるんだっけ? 小さな順にやるんだっけ?
1184 code f( int a, int b, int c ) {
1185 goto g(b,c,a);
1186 }
1187 みたいなやつだよね。
1188
1189 移動するものを一つ検出する。
1190 そのために移動が必要なものを移動しておく(再帰)
1191 代入する
1192
1193 こんなんでいいのか? ループしない? するよね。ループしたら
1194 get_register する。
1195
1196 前の例だと、
1197
1198 g(b,c,a) のbに着目する。
1199 bに代入するコードを出すと、a が壊れる。
1200 a が必要かどうかを調べる。それは、引数のリストを見ればわかる。
1201 その前に、a を移動する。a の移動先を見て、
1202 空いていれば、移動してOk。しかし、c
1203 なので、 c を見る。と b になるので、ループするのがわかるので、
1204 b を get_register する。
1205 で、c が移動できる。で、aを移動して、とっておいたbを代入。
1206
1207 Tue Jan 21 22:45:09 JST 2003
1208
1209 とりあえず、jump は複雑すぎる。もっと簡単にすることを考える。
1210 parser 側である程度処理できない?
1211
1212 goto f(a+3,b(),c);
1213
1214 などを、
1215
1216 a = a+3;
1217 b = b();
1218 goto f(a,b,c);
1219
1220 程度に簡略化する。この時、f(a,b,c) は(できるだけ)、元の
1221 関数の引数リストに近付ける。のは無理なので、単純変数
1222 まで落す。
1223
1224 あまり関係ないか。一時変数はどうせいるわけだし。ってこと
1225 みたいね。
1226
1227 だとすると、元のコードと、そう変わらんね。前のも、そんなに
1228 悪くないってことか。
1229
1230 Wed Jan 22 14:33:12 JST 2003
1231
1232 やっぱり、途中で局所変数を増やしたいよね。
1233
1234 Fri Jan 31 20:30:36 JST 2003
1235
1236 なんか #ifdef / #if がないとだめだな。実装する?