Mercurial > hg > CbC > old > device
comparison Idea @ 29:160e20394f80
macro function (imcomplete)
author | kono |
---|---|
date | Sat, 08 Feb 2003 04:14:23 +0900 |
parents | c6994794f084 |
children | 20ed2786a276 |
comparison
equal
deleted
inserted
replaced
28:c6994794f084 | 29:160e20394f80 |
---|---|
1362 chptrsave はlistにする必要がある。list で良い。 | 1362 chptrsave はlistにする必要がある。list で良い。 |
1363 | 1363 |
1364 やっぱりmacro levelを見て、自分と一致したassoc valueまで | 1364 やっぱりmacro levelを見て、自分と一致したassoc valueまで |
1365 手繰って置換するんでしょう。そうすれば、置き換える必要は無い。 | 1365 手繰って置換するんでしょう。そうすれば、置き換える必要は無い。 |
1366 ということは、local_define にmflagsを格納する必要がある。 | 1366 ということは、local_define にmflagsを格納する必要がある。 |
1367 | |
1368 c(a,b) => a=>"a", b=>"b" | |
1369 a=>"a" .. mflag == 1 | |
1370 g(a,b) => (a=>"a+1+1",a=>"a+1"), (b=>"b+1+1",a=>"a+1") | |
1371 a=>"a+1" .. mflag == 2 | |
1372 | |
1373 macro のもとのnptr が残ってないと、オリジナルを返せない。オ | |
1374 リジナルは、sc などが破壊されてしまう。ってことは、local macro | |
1375 は、local table を汚してはいけないってことだよね。ってことは、 | |
1376 macro table は、もとのとは別に用意する必要がある。 | |
1377 | |
1378 #define c(a,b) g(a+1,b+1) | |
1379 #define g(a,b) printf("%d %d\n",a+2,b+2); | |
1380 | |
1381 main() { | |
1382 int a,b; a ... local | |
1383 a =1; b = 3; | |
1384 #ifndef a | |
1385 c(a, a = "a".. macro mflag==1 | |
1386 g(a, | |
1387 a="a+1" mflag==2 | |
1388 ^ a = "a" mflag==1 | |
1389 While replacing a in g's body, a should not | |
1390 be replaced to (original) "a", should be c's a. | |
1391 b); | |
1392 /* 3,5 expected */ | |
1393 #endif | |
1394 } | |
1395 | |
1396 うーむ。ややこしい。 | |
1397 | |
1398 main() | |
1399 c(a,b) mflag++ | |
1400 a=>"a" mflag ==1 | |
1401 g(a,b) mflag++; | |
1402 a=>"a+1" mflag ==2 | |
1403 ^ is replaced by c's "a" not g's a; | |
1404 いったん mflag level n で展開したら、それは mflag level n-1 となる。 | |
1405 | |
1406 | |
1407 | |
1408 | |
1409 | |
1410 | |
1411 |