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