summaryrefslogtreecommitdiff
path: root/SWIG/CHANGES
blob: 462b674c8deb1d0835112d415899cb281058dfef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
SWIG (Simplified Wrapper and Interface Generator)

Version 1.3 Alpha 5 
===================

9/19/00 : beazley
          [Python] Python module generates more efficient code for
          creating the return value of a wrapper function. Modification
          suggested by Jon Travis.

9/19/00 : beazley
          Library files specified with the -l option are now included at the
          end of the interface file (reverting to the old behavior).

9/19/00 : beazley
          Fixed some problems with enum handling.  enums are now manipulated as
          'int', but cast into the enum type when values are passed to the 
          corresponding C function.

9/19/00 : mkoeppe
	  [Guile] Removed "-with-smobs" command-line option, as this is the
	  default now.  Added "-emit-setters" command-line option,
	  which turns on generating procedures-with-setters; see
	  internals.html.

9/18/00 : mkoeppe
	  Incorporated patch #101430, fixing bugs in the Guile module: 
	  1. Some arguments were erroneously taken as *optional* arguments when
	     ignored arguments were present. 
	  2. Guile 1.3.4 was not supported since functions introduced in Guile
	      1.4 were used.	  
	  3. Added handling of `const char *'.

9/17/00 : beazley
          Fixed problem with failed assertion and large files.

9/17/00 : beazley
          Fixed problem with the '%' character appearing in added methods
          and function bodies.  Preprocessor bug.

Version 1.3 Alpha 4 (September 4, 2000)
======================================

9/3/00  : ttn
          Added instructions for maintainers in Examples/README on how
          to make examples also be useful in the testing framework.
          Also, "make check" now uses ./Lib by via env var `SWIG_LIB'.
          This is overridable like so:
             make chk-swiglib=/my/experimental/swig/Lib check

9/3/00  : beazley
          Added $typemap variable to typemaps.  This gets replaced with
          a string indicating the typemap that is applied.  Feature
          request from rsalz.

9/3/00  : beazley
          Experimental optimization to code generation for virtual
          member functions.  If you have two classes like this:

                 class A() {
                   virtual void foo();
                 }

                 class B() : public A {
                   virtual void foo();
                 }

          Swig now will generate a single wrapper function for this

                A_foo(A *a) {
                    a->foo();
                }

          and use it as the implementation of both A_foo() and B_foo().
          This optimization only takes place if both methods are declared
          as virtual and both take identical parameters.
          *** EXPERIMENTAL FEATURE ***

9/3/00  : beazley
          Restored the "memberin" typemap for setting structure members.
          Unlike the old version, the new version is expanded inline in the
          wrapper function allowing access to scripting language
          internals (a sometimes requested feature). The "memberout" typemap
          is gone. Use the "out" typemaps instead.
          *** POTENTIAL INCOMPATIBILITY ***

9/3/00  : beazley
          Attribute set methods no longer return the value of a member.
          For example:

               struct Foo {
                    int x;
                    ...
               }

          now gets set as follows:

              void Foo_x_set(Foo *f, int x) {
                    f->x = x;
              }

          In SWIG1.1 it used to be this:

              int Foo_x_set(Foo *f, int x) {
                   return (f->x = x);
              }

          This has been changed due to the complexity created by trying
          to do this with more exotic datatypes such as arrays.  It also
          complicates inlining and handling of the "memberin" typemap.
          *** POTENTIAL INCOMPATIBILITY ***

9/2/00  : beazley
          Removed the ptrcast() and ptrmap() functions from the
          pointer.i library file.  Old implementation is incompatible
          with new type system.
          *** POTENTIAL INCOMPATIBILITY ***

9/2/00  : beazley
          New runtime function SWIG_TypeQuery(const char *name) added.
          This function can be used to extract the type info structure
          that is used for type-checking.  It works with either the
          nice C name or mangled version of a datatype.  For example:

              swig_type_info *ty = Swig_TypeQuery("int *");
              swig_type_info *ty = Swig_TypeQuery("_p_int");

          This is an advanced feature that has been added to support some
          exotic extension modules that need to directly manipulate
          scripting language objects.
          *** NEW FEATURE ***

9/2/00  : beazley
          New directive %types() added.  This is used to
          explicitly list datatypes that should be included in
          the runtime type-checking code. Normally it is never
          necessary to use this but sometimes advanced extensions
          (such as the pointer.i library) may need to manually
          add types to the type-checker.
          *** NEW FEATURE ***

8/31/00 : beazley
          Improved handling of string array variables. For example,
          a global variable of the form "char name[64]" is automatically
          managed as a 64 character string.  Previously this didn't
          work at all or required the use of a special typemap.
          *** NEW FEATURE (Tcl, Perl, Python) ***

8/31/00 : ttn
	  Added Makefile target `check-c++-examples', which uses new
	  files under Examples/C++ contributed by Tal Shalif.  Now "make
	  check" also does "make check-c++-examples".  Also, expanded
	  actions in `check-gifplot-example' and `check-aliveness'.

8/30/00 : mkoeppe
	  Major clean-up in the Guile module. Added typemap-driven
	  documentation system. Changed to handle more than 10
	  args. Updated and extended examples.
	  *** NEW FEATURE ***

8/29/00 : beazley
          Added new %insert directive that inserts the contents of a file
          into a portion of the output wrapper file.  This is only intended
          for use by writers of language modules.  Works as follows:

               %insert(headers)  "file.swg";
               %insert(runtime)  "file.swg";
               %insert(wrappers) "file.swg";
               %insert(init)     "file.swg";

          *** NEW FEATURE ***

8/29/00 : beazley
          Added new %runtime directive which includes code into the runtime
          portion of the wrapper code. For example:

              %runtime %{
                    ... some internal runtime code ...
              %}

          There is no practical reason for ordinary users to use this
          feature (almost everything can be done using %{ ... %}
          instead).   However, writers of language modules may want to
          use this in language configuration files.
          *** NEW FEATURE ***

8/28/00 : beazley
          Typemaps can now be specified using string literals like
          this:

              %typemap(in) int "$target = SvIV($source);";

          When code is specified like this, it is *NOT* enclosed
          inside a local scope (as with older typemap declarations).
          Note: character escape sequences are interpreted in the
          code string so if you want to include a quote or some
          other special character, make sure you use a (\).
          *** NEW FEATURE ***

8/27/00 : beazley
          Typemaps have been modified to follow typedef declarations.
          For example, if you have this:

              typedef int Number;

              %typemap(in) int {
                      ... get an integer ...
              }

              void foo(Number a);

          The typemap for 'int' will be applied to the argument 'Number a'.
          Of course, if you specify a typemap for 'Number' it will take
          precedence (nor will it ever be applied to an 'int').
          *** POTENTIAL INCOMPATIBILITY ***

8/27/00 : beazley
          Default typemap specification has changed.   In older
          versions of swig, you could do this:

               %typemap(in) int SWIG_DEFAULT_TYPE {
                   ...
               }

          To specify the default handling of a datatype.   Now that
          SWIG follows typedef declarations, this is unnecessary.
          Simply specifying a typemap for 'int' will work for all
          variations of integers that are typedef'd to 'int'.

          Caveat, specifying the default behavior for pointers,
          references, arrays, and user defined types is a little
          different.  This must be done as follows:

               %typemap() SWIGPOINTER * {
                      ... a pointer ...
               }
               %typemap() SWIGREFERENCE & {
                      ... a reference ...
               }
               %typemap() SWIGARRAY [] {
                      ... an array ...
               }
               %typemap() SWIGTYPE {
                      ... a user-defined type (by value) ...
               }
          *** POTENTIAL INCOMPATIBILITY ***

8/15/00 : dustin
          The file swig-1.3a1-1.spec has been added to the Tools directory.
          It can be used to build a redhat package for SWIG, although it
          will need to be updated for the next public release.

8/15/00 : beazley
          Typemaps have been completely rewritten.  Eventually they may be
          replaced with something better, but for now they stay.  However,
          there are a number of a significant changes that may trip some
          people up:

          1.  Typemap scoping is currently broken.  Because of this, the
              following code won't work.

              %typemap(in) blah * {
                   ...
              }
              class Foo {
                   ...
                   int bar(blah *x);
              }
              %typemap(in) blah *;   /* Clear typemap */

              (this breaks because the code for the class Foo is actually
              generated after the entire interface file has been processed).
              This is only a temporary bug.

          2.  In SWIG1.1, the %apply directive worked by performing a
              very complex type-aliasing procedure.  From this point on,
              %apply is simply a generalized typemap copy operation.
              For example,

                  %apply double *OUTPUT { double *x, double *y };

              Copies *ALL* currently defined typemaps for 'double *OUTPUT' and
              copies them to 'double *x' and 'double *y'.

              Most people probably won't even notice this change in
              %apply.  However, where it will break things is in code like
              this:

                  %apply double *OUTPUT { double *x };
                  %typemap(in) double *OUTPUT {
                       ... whatever ...
                  }

                  void foo(double *x);

              In SWIG1.1, you will find that 'foo' uses the 'double *OUTPUT' rule
              even though it was defined after the %apply directive (this is
              the weird aliasing scheme at work).  In SWIG1.3 and later,
              the 'double *OUTPUT' rule is ignored because it is defined
              after the %apply directive.

          3.  The %clear directive has been modified to erase all currently
              defined typemaps for a particular type.  This differs from
              SWIG1.1 where %clear only removed rules that were added using
              the %apply directive.

          4.  Typemap matching is now performed using *exact* types.
              This means that things like this

                   %typemap(in) char * { }
                   %typemap(in) const char * { }

              are different typemaps.    A similar rule applies for pointers,
              arrays, and references.  For example:

                   %typemap(in) double * { }

              used to apply to 'double &', 'double []',  Now, it only applies
              to 'double *'.  If you want a 'double &', you'll need to handle
              that separately.

          5.  Array matching has been simplfied.  In SWIG1.1, array matching
              was performed by trying various combinations of dimensions.
              For example, 'double a[10][20]' was matched as follows:

                   double [10][20]
                   double [ANY][20]
                   double [10][ANY]
                   double [ANY][ANY]

              In SWIG1.3, only the following matches are attempted:

                   double [10][20]
                   double [ANY][ANY]

          On the positive side, typemap matching is now *significantly* faster
          than before.
          *** POTENTIAL INCOMPATIBILITY ***

8/15/00 : beazley
          Secret developer feature.  Since datatypes are now represented as 
          strings internally, you can bypass limitations of the parser and
          create a wild datatype by simply enclosing the raw string encoding
          in backticks (``) and sticking it in the interface file anywhere a
          type is expected.  For example, `a(20).a(10).p.f(int,int)`.  This 
          feature is only intended for testing (i.e., you want to see what
          happens to your language module if it gets a reference to a pointer
          to an array of pointers to functions or something). 
          *** SICK HACK ***

8/14/00 : beazley
          Completely new type-system added to the implementation.
          More details later.

8/11/00 : beazley
          Cleaned up some of the I/O handling.  SWIG no longer generates
          any temporary files such as _wrap.wrap, _wrap.ii, _wrap.init.
          Instead, these "files" are kept around in memory as strings
          (although this is transparent to language modules).

8/4/00  : ttn
	  Added Makefile target "check" and variants.
	  This can be used like "make check" or, to explicitly skip a
	  language LANG: "make skip-LANG=true check".  LANG is skipped
	  automatically if ./configure determines that LANG support is
	  insufficient.

	  Currently, the check is limited to doing the equivalent of
	  "make all" in some of the Examples directories.  This should
	  be expanded both horizontally (different types of tests) and
	  vertically (after "make all" in an Examples subdir succeeds,
	  do some additional tests with the resulting interpreter, etc).

8/4/00  : ttn
	  Added Makefile target "distclean", which deletes all the
	  files ./configure creates, including config.status and friends.

8/3/00  : harcoh
	  java changes??? [todo: document changes]

7/23/00 : beazley
          Typemaps have been modified to key off of the real datatypes
          used in the interface file.  This means that typemaps for
          "const char *" and "char *" will be difference as will typemaps
          for "Vector" and "Vector *."
          *** POTENTIAL INCOMPATIBILITY ***
          This is likely to break interfaces that rely on the odd type
          handling behavior of typemaps in SWIG1.1--especially with
          respect to interfaces involving pass-by-value.

7/23/00 : beazley
          New %constant directive.  This directive can be used to
          create true constants in the target scripting language.
          It's most simple form is something like this:

             %constant FOO 42;

          In this case, the type is inferred from the syntax of the
          value (in reality, all #define macros are translated into
          directives of this form).

          An expanded version is as follows:

            %constant(Foo *) FOO = &FooObj;

          In this case, an explicit type can be specified.  This
          latter form may be useful for creating constants that
          used to be specified as

             const Foo *FOO = &FooObj;

          (which are now treated as variables).
          *** EXPERIMENTAL FEATURE *** The syntax may change in
          the final release.

7/23/00 : beazley
          Modified the parser so that variable declarations of the form
          "const type *a" are handled as variables, not constants.
          Note: SWIG1.1 handled this case erroneously because
          const char *a is a pointer variable that can be reassigned.
          *** POTENTIAL INCOMPATIBILITY ***
          Note: just because this is the "right" way to do things,
          doesn't mean it's the most appropriate interpretation.
          I suspect that many C programmers might use 'const char *'
          with the intent of creating a constant, without realizing
          that they've created a reassignable global variable.

7/23/00 : beazley
          The C/C++ wrapping layer has been completely redesigned and
          reimplemented.  This change should iron out a few rough
          spots with the handling of datatypes.  In addition, the
          wrapper code is somewhat cleaner.
          *** POTENTIAL INCOMPATIBILITY ***
          This change may break interfaces that involve
          subtle corner-cases with typemaps and the %addmethods
          directive since some of these features had somewhat
          type handling behavior in SWIG1.1.

7/23/00 : beazley
          The "memberin" and "memberout" typemaps are gone for the
          moment, but they might return as soon as I figure out
          how to integrate them with some of the streamlined C wrapper
          functions.
          *** POTENTIAL INCOMPATIBILITY ***

7/22/00 : beazley
          A variety of old type handling functions such as print_type(),
          print_full(), print_mangle(), etc... are gone and have been
          replaced with a smaller set of functions.  See the file
          Doc/internals.html for details.  This will break all third
          party language modules.
          *** POTENTIAL INCOMPATIBILITY ***

7/20/00 : beazley
          Deprecated the %val and %out directives.  These directives
          shouldn't really be necessary since typemaps can be used
          to achieve similar results.   This also cleans up the
          handling of types and parameters quite a bit.
          *** POTENTIAL INCOMPATIBILITY ***

7/20/00 : ttn
	  Fixed unspecified-module bug in Guile support and removed
	  more non-"with-smobs" functionality using patches submitted
	  by Matthias Koeppe.

	  Re-enable recognition of "-with-smobs" (with no effect since
	  we use smobs by default now) for the time being.  After the
	  1.3a4 release, this option will signal an error.

7/17/00 : ttn
	  Fixed NULL-input bug in parameter list handling.
	  Reported by Matthias Koeppe.

7/12/00 : beazley
          Fixed memory leak in Python type-checking code. Reported by
          Keith Davidson.  Bug #109379.

7/10/00 : beazley
          Changed internal data structures related to function parameters.

7/10/00 : beazley
          Fixed some bugs related to the handling of the %name() directive
          and classes in the Tcl module. Problem reported by James Bailey.

7/10/00 : beazley
          Fixed parsing and enum handling problems with character constants.
          Reported by Greg Kochanski.

7/10/00 : beazley
          Removed WrapperFunction class from the core and updated the language
          module.  This will break third party modules.
          *** POTENTIAL INCOMPATIBILITY ***

7/9/00  : beazley
          Implementation of SWIG no longer makes use of C++ operator overloading.
          This will almost certainly break *all* third party language modules
          that are not part of the main SWIG CVS tree. Sorry.
          *** POTENTIAL INCOMPATIBILITY ***

7/8/00  : beazley
          Removed the experimental and undocumented "build" typemap that
          was intended to work with multiple arguments. Simply too weird
          to keep around.  Besides, a better replacement is in the works.

7/6/00  : ttn
          Removed non-"with-smobs" functionality (Guile support), i.e.,
          "-with-smobs" is now the default and no longer needs to be
	  specified on the command-line.

7/5/00  : ttn
          Incorporated Ruby support contributed by Masaki Fukushima.

6/28/00 : ttn
          Applied more-than-10-args bugfix patch contributed
	  by Matthias Koeppe.

6/27/00 : beazley
          Rewrote some of the string handling and eliminated the C++
          implementation (which is now just a wrapper).

6/27/00 : ttn
          Added Doc/index.html and Doc/internals.html.  The target
          audience for the latter is new SWIG developers.


Version 1.3 Alpha 3 (June 18, 2000)
===================================

6/18/00 : beazley
          Removed the naming.cxx, hash.cxx, and symbol.cxx files from
          the SWIG1.1 directory.   Continued to migrate things away
          from the C++ base (although there's still a lot of work to do).

6/17/00 : beazley
          Added a few more examples to the Examples directory.  Still
          need to do a lot of work on this.

6/16/00 : beazley
          Added -includeall to follow all #include statements in the
          preprocessor.

6/15/00 : beazley
          Tried to fix as many C++ warnings as possible when compiling
          with the Sun Workshop C++ compiler.  Unfortunately, this means
          that there are a lot of statements that contain string literals
          of the form (char*)"Blah".

6/15/00:  beazley
          A variety of cleanup and performance optimization in the
          low-level DOH library.   This seems to result in a speedup
          of 50-100% for preprocessing and other related tasks.

5/10/00 : ttn
	  Applied variable-wrapping bugfix patch contributed
	  by Matthias Koeppe.

4/17/00 : ttn
	  Updated MzScheme support contributed by Oleg Tolmatcev.
	  We now use a `Scheme_Type'-based structure to wrap pointers.

4/11/00 : ttn
	  Incorporated further Guile-support patch by Matthias Koeppe.
	  Typemaps previously deleted have been re-added.  There is now
	  exception handling (see Doc/engineering.html).  `SWIG_init' is now
	  declared extern only for simple linkage.  Some bugs were fixed.

4/06/00 : ttn
	  Incorporated MzScheme support contributed by Oleg Tolmatcev.
	  This includes new directories Lib/mzscheme and Examples/mzscheme.

4/03/00 : ttn
	  Added Examples/guile and children.  This is an adaptation of
	  the same-named directory from the SWIG-1.1p5 distribution.
	  Added Guile-specific section to Doc/engineering.html.

4/02/00 : ttn
	  Incorporated new guilemain.i by Martin Froehlich.
	  Incorporated Guile-support rewrite patch by Matthias Koeppe.
	  The command line option "-with-smobs" enables implementation of
	  pointer type handling using smobs, the canonical mechanism for
	  defining new types in Guile.  Previous implementation (using
	  strings) is at the moment still supported but deprecated.  At
	  some point, "-with-smobs" will be the default and no longer
	  required.

3/13/00 : beazley
          Added purify patches submitted by Ram Bhamidipaty.

3/02/00 : ttn
          Added support for different Guile "linkage" schemes.
	  Currently, "-Linkage hobbit" works.


Version 1.3 Alpha 2 (March 1, 2000)
===================================

2/29/00 : beazley
          Made SWIG ignore the 'mutable' keyword.

2/29/00 : beazley
          Incorporated some patches to the Perl5 module related to
          the -hide option and the destruction of objects.
          Patch submitted by Karl Forner.

2/27/00 : ttn
	  Incorporated Guile support contributed by Matthias Koeppe.
	  This includes a cpp macro in Lib/guile/guile.swg and the
	  entire file Lib/guile/typemaps.i.

2/25/00 : ttn
	  Modified configure.in and Makefile.in files to support
	  non-local build (useful in multi-arch environments).

2/24/00 : ttn
	  Incorporated Guile support contributed by Clark McGrew.
	  This works with Guile 1.3, but since it depends heavily
	  on the gh_ interface, it should work for all later versions.
	  It has not been tested with versions before 1.3.
	  WARNING: Code is unstable due to experimentation by ttn.

2/16/00 : beazley
          A variety of performance improvements to the Python shadow
          class code generation.  Many of these result in substantial
          runtime performance gains.  However, these have come at
          a cost of requiring the use of Python 1.5.2.  For older
          versions, use 'swig -noopt -python' to turn off these
          optimization features.

Version 1.3 Alpha 1 (February 11, 2000)
=======================================

2/11/00 : Added 'void' to prototype of Python module initializer.
          Reported by Mark Howson (1/20/00).

2/11/00 : beazley
          Modified the Python shadow class code to discard ownership of an
          object whenever it is assigned to a member of another object.
          This problem has been around for awhile, but was most recently
          reported by Burkhard Kloss (12/30/99).

2/11/00 : beazley
          Added braces around macros in the exception.i library.  Reported
          by Buck Hodges (12/19/99)

2/11/00 : beazley
          Fixed bug in the constraints.i library. Reported by Buck
          Hodges (12/14/99)

2/11/00 : beazley
          The %native directive now generates Tcl8 object-style command calls.
          A full solution for Tcl7 and Tcl8 is still needed. Patch suggested
          by Mike Weiblen (11/29/99)

2/11/00 : beazley
          Modified the typemap code to include the $ndim variable for arrays.
          Patch provided by Michel Sanner (11/12/99).

2/11/00 : beazley
          Modified the Python module to raise a Runtime error if an attempt
          is made to set a read-only member of a shadow class.  Reported by
          Michel Sanner (11/5/99).

2/10/00 : The documentation system has been removed. However, it is likely
          to return at some point in the future.

2/1/00  : Added a number of performance enhancements to the Python shadow
          classing and type-checking code.  Contributed by Vadim Chugunov.

          1. Remove _kwargs argument from the shadow wrappers when -keyword
             option is not specified. This saves us a construction of keyword
             dictionary on each method call.

             def method1(self, *_args, **_kwargs):
                 val = apply(test2c.PyClass1_method1, (self,) + _args, _kwargs)
                 return val

             becomes

             def method1(self, *_args):
                 val = apply(test2c.PyClass1_method1, (self,) + _args)
                 return val

          2. Incorporate self into the _args tuple.  This saves at least one tuple
             allocation per method call.

             def method1(self, *_args):
                 val = apply(test2c.PyClass1_method1, (self,) + _args)
                 return val

             becomes

             def method1(*_args):
                 val = apply(test2c.PyClass1_method1, _args)
                 return val

          3. Remove *Ptr classes.
             Assume that we are SWIGging a c++ class CppClass.
             Currently SWIG will generate both CppClassPtr class
             that hosts all methods and also CppClass that is derived
             from the former and contains just the constructor.
             When CppClass method is called, the interpreter will try
             to find it in the CppClass's dictionary first, and only then
             check the base class.

             CppClassPtr functionality may be emulated with:

             import new
             _new_instance = new.instance
             def CppClassPtr(this):
                  return _new_instance(CppClass, {"this":this,"thisown":0})

             This saves us one dictionary lookup per call.

             <DB>The new module was first added in Python-1.5.2 so it
             won't work with older versions.  I've implemented an
             alternative that achieves the same thing</DB>

          4. Use CObjects instead of strings for pointers.

          Dave: This enhancements result in speedups of up to 50% in some
          of the preliminary tests I ran.

2/1/00  : Upgraded the Python module to use a new type-checking scheme that
          is more memory efficient, provides better performance, and
          is less error prone. Unfortunately, it will break all code that
          depends on the SWIG_GetPtr() function call in typemaps.
          These functions should be changed as follows:

                if (SWIG_GetPtr(string,&ptr,"_Foo_p")) {
                    return NULL;
                }

          becomes

                if (SWIG_ConvertPtr(pyobj, &ptr, SWIG_TYPE_Foo_p) == -1) {
                    return NULL;
                }

          Note: In the new implementation SWIG_TYPE_Foo_p is no longer
          a type-signature string, but rather an index into a type
          encoding table that contains type information.
          *** POTENTIAL INCOMPATIBILITY ***

1/30/00 : loic
	  Conditionaly compile experimental code with --enable-experiment
	  configure flag.
	  Fix .cvsignore to ignore configrue & yacc generated files

1/28/00 : loic
	  Apply automake everywhere
	  Keep configure scripts so that people are not *forced* to autoconf
          Keep sources generated by yacc so that compilation without yacc
	  is possible.
	  Source/LParse/cscanner.c: change lyacc.h into parser.h to please
	  default yacc generation rules.
	  Use AC_CONFIG_SUBDIRS in configure.in instead of hand made script.
	  Update all relevant .cvsignore to include .deps
	  Fixed missing ; line 136 Source/Swig/swig.h

1/13/00 : beazley
          Fixed a number of minor end-of-file parsing problems in the
          preprocessor.

1/13/00 : beazley
          Added -freeze option that forces SWIG to freeze upon exit.
          This is only used as a debugging tool so that I can more
          easily examine SWIG's memory footprint.

1/13/00 : beazley
          Added patch to guile module for supporting optional arguments
          Patch contributed by Dieter Baron.

1/13/00 : loic
	  Added .cvsignore, Examples/.cvsignore, Source/DOH/Doh/.cvsignore
	  Source/SWIG1.1/main.cxx: Fixed -I handling bug
	  Source/Modules1.1/java.cxx: fixed char* -> const char* warnings that are
	  errors when compiling with gcc-2.95.2
	  Source/SWIG1.1/main.cxx: cast const char* to char* for String_replace
	  token and rep should really be const.

1/12/00 : beazley
          Added Harco's Java modules.

1/12/00 : beazley
          Revoked the %ifdef, %ifndef, %endif, %if, %elif, and %else
          directives.  These are no longer needed as SWIG now has a real
          preprocessor.
          *** POTENTIAL INCOMPATIBILITY ***

1/12/00 : beazley
          Moved the documentation modules from the SWIG directory
          to the Modules directory (where they really should have been
          to begin with).

1/12/00 : beazley
          Removed the -stat option for printing statistics. The
          statistics reporting was inadequate and mostly broken
          anyway.
          *** POTENTIAL INCOMPATIBILITY ***

1/12/00 : beazley
          Removed the -t option for reading a typemap file.  More
          trouble than it's worth.  Just include typemaps at the top
          of the interface file.
          *** POTENTIAL INCOMPATIBILITY ***

1/12/00 : beazley
          Removed the %checkout directive.
          *** POTENTIAL INCOMPATIBILITY ***

1/12/00 : beazley
          Removed the -ci option for file checkin.   Too problematic
          to implement.  Probably better to just put your SWIG library
          under CVS instead.
          *** POTENTIAL INCOMPATIBILITY ***.

1/11/00 : beazley
          Deleted the LATEX module.  Sorry... Didn't know anyone
          who was using it.  Besides, I'm looking to simplify
          the documentation system.
          *** POTENTIAL INCOMPATIBILITY ***

1/11/00 : beazley
          Modified the ASCII documentation module to use a .txt
          suffix for its output file instead of .doc.

1/11/00 : beazley
          Added the long-lost SWIG preprocessor back to the system.
          It should be enabled by default.  Raw preprocessed output
          can be viewed using swig -E file.i.
          *** NEW FEATURE ***

1/11/00 : beazley and djmitche
          Completely reorganized the SWIG directory structure.  The
          basic organization is now:

                Source/         SWIG source code
                Lib/            SWIG library files (swig_lib)
                Doc/            Documentation
                Examples/       Examples

          More directories will be added as needed.

12/08/99: Loic Dachary (loic@senga.org)
	  Enhanced package handling for perl5 and c++.

	  With new option -hide Foo::Bar, every perl5 object (Frob) is
	  qualified by Foo::Bar::Frob. The package name is solely used
	  to encapsulate C/C++ wrappers output in <module>_wrap.c and the
	  corresponding perl package in <module>.pm. Note that a package
	  name may contain :: (Frob::Nitz) and will be relative to the
	  package name provided by -hide (Foo::Bar::Frob::Nitz).

	  In *_wrap.c, SWIG_init macro is used. Was previously defined
	  but not used and simplifies code.

	  Added typemap(perl5,perl5in) and typemap(perl5,perl5out) that
	  do the equivalent of typemap(perl5,in) and typemap(perl5,out)
	  but contain perl code and applies to wrappers generated by
	  -shadow.

	  Lacking proper regression tests I used
	  Examples/perl5/{c++,constraint,defarg,except,
	  graph/graph[1234],multinherit,nested,shadow,simple,tree,
	  typemaps/{argv,argv2,arraymember,database,file,ignore,integer,
	  output,passref,reference,return}}/. I ran swig with and without
	  the patches, diff the generatedsources, run the .pl files
	  and checked that the results are identical. In all those examples
	  I had no error.

11/21/99: Modified the Tcl module to provide full variable linking capabilities
          to all datatypes.   In previous versions, a pair of accessor functions
          were created for datatypes incompatible with the Tcl_LinkVar() function.
          Now, we simply use variable traces to support everything. This may
          break scripts that rely upon the older behavior.
          *** POTENTIAL INCOMPATIBILITY ***

11/21/99: Added slight tweak to wrapper generator to collect local variables
          of similar type.  Produces somewhat more compact wrapper code.

11/20/99: Modified the Tcl module to use SWIG_GetArgs() to parse
          arguments.    This is a technique borrowed from Python in which
          arguments are converted using a format string convention similiar
          to fprintf().   This results in a *substantial* reduction in the
          size of the resulting wrapper code with only a modest runtime overhead
          in going through the extra conversion function.

11/13/99: Completely rewrote the class/structure generation code for the
          Tcl module.  Now, a small set of runtime functions are used
          to implement the functionality for all classes (instead of a
          massive amount of runtime code being generated for each class).
          Class specific information is simply encoded in a series of
          static tables.   This results in a *HUGE* reduction in wrapper
          code size--especially for C++.

11/13/99: Removed the -tcl (Tcl 7.x) module.  Tcl 8.0 is now several
          years old and the defacto standard--no real reason to keep
          supporting the old version at this point.

11/13/99: Cleaned up -c option for Python module.  The pyexp.swg file
          is now gone.

11/13/99: Fixed external declarations to work better with static linking
          on Windows.  Static linking should now be possible by defining
          the -DSTATIC_LINK option on the command line.  Patch contributed
          by Alberto Fonseca.

11/5/99 : Fixed an obscure code generation bug related to the generation
          of default constructors.   Bug reported by Brad Clements.

11/5/99 : Fixed a few memory problems found by purify.

11/5/99 : Officially deprecated the -htcl, -htk, and -plugin options
          from the Tcl and Tcl8 modules.

10/26/99: Removed unused variable from python/typemaps.i.  Patch
          contributed by Keith Davidson.

8/16/99 : Added _WIN32 symbol to libraries to better support Windows.

8/16/99 : Deprecated the Perl4 module.   It is no longer included in the
          distribution and no longer supported.  In the entire 3 years SWIG
          has been around I never received a single comment about it so I'm
          assuming no one will miss it...

8/16/99 : Modified the type-checking code to register type mappings using a
          table instead of repeated calls to SWIG_RegisterMapping().  This
          reduces the size of the module initialization function somewhat.

8/15/99 : Cleaned up the pointer type-checking code in the Tcl module.

8/15/99 : Many changes to the libraries to support runtime libraries.

8/13/99 : Eliminated C++ compiler warning messages about extern "C" linkage.

8/13/99 : Some cleanup of Python .swg files to better support runtime libraries
          on Windows.

8/13/99 : Modified the %pragma directive to attach pragmas declared inside
          a class definition to the class itself. For example:

               class foo {
                    ...
                    %pragma(python) addtomethod = "insert:print `hello world'"
                    ...
               }

          Most people don't need to worry about how this works.  For people
          writing backend modules, class-based pragmas work like this:

              lang->cpp_open_class()             // Open a class
              lang->cpp_pragma()                 // Supply pragmas
              ...                                // Emit members

              lang->cpp_close_class()            // Close the class

          All of the pragmas are passed first since they might be used to
          affect the code generation of other members.   Please see
          the Python module for an example.   Patches contributed
          by Robin Dunn.

8/13/99 : Patch to Python shadow classes to eliminate ignored
          exception errors in destructors.  Patch contributed
          by Robin Dunn.

8/11/99 : Minor patch to swig_lib/python/swigptr.swg  (added SWIGSTATIC
          declaration).  Patch contributed by Lyle Johnson.

8/11/99 : Added FIRSTKEY/NEXTKEY methods to Perl5 shadow classes
          Patch contributed by Dennis Marsa.

8/11/99 : Modified Python module so that NULL pointers are returned
          and passed as 'None.'  Patch contributed by Tal Shalif.

8/10/99 : Fixed missing 'int' specifiers in various places.

8/10/99 : Added Windows makefile for Runtime libraries.  Contributed
          by Bob Techentin.

8/10/99 : Fixed minor problem in Python runtime makefile introduced
          by keyword arguments.

8/8/99  : Changed $target of perl5(out) typemap from ST(0) to
          ST(argvi).  Patch contributed by Geoffrey Hort.

8/8/99  : Fixed bug in typemap checking related to the ANY keyword
          in arrays and ignored arguments.  Error reported by
          Geoffrey Hort.

8/8/99  : %enabledoc and %disabledoc directives can now be used
          inside class/structure definitions.   However, no check
          is made to see if they are balanced (i.e., a %disabledoc
          directive inside a class does not have to have a matching
          %enabledoc in the same class).

8/8/99  : Keyword argument handling is now supported in the Python
          module.   For example:

               int foo(char *bar, int spam, double x);

          Can be called from Python as

               foo(x = 3.4, bar="hello", spam=42)

          To enable this feature, run SWIG with the '-keyword' command
          line option.    Mixing keyword and default arguments
          should work as well.   Unnamed arguments are assigned names
          such as "arg1", "arg2", etc...

          *** POTENTIAL INCOMPATIBILITY ***
          Functions with duplicate argument names such as
          bar(int *OUTPUT, int *OUTPUT) will likely cause problematic
          wrapper code to be generated.   To fix this,  use different
          names or use %apply to map typemaps to alternate names.

8/8/99  : Handling of the 'this' pointer has been changed in Python shadow
          classes.  Previously, dereferencing of '.this' occured in the
          Python shadow class itself.   Now, this step occurs in the C
          wrappers using the following function:

                SWIG_GetPtrObj(PyObject *, void **ptr, char *type)

          This function can accept either a string containing a pointer
          or a shadow class instance with a '.this' attribute of
          appropriate type.  This change allows the following:

          1.  The real shadow class instance for an object is
              passed to the C wrappers where it can be examined/modified
              by typemaps.

          2.  Handling of default/keyword arguments is now greatly
              simplified.

          3.  The Python wrapper code is much more simple.

          Plus, it eliminated more than 300 lines of C++ code in the
          Python module.

          *** CAVEAT : This requires the abstract object interface.
          It should work with Python 1.4, but probably nothing older
          than that.


8/8/99  : Fixed handling of "const" and pointers in classes.  In particular,
          declarations such as

           class foo {
             ...
             const char *msg;
             const int  *iptr;
          }

          are handled as assignable variables as opposed to constant
          values (this is the correct behavior in C/C++).   Note:
          declarations such as "char *const msg" are still unsupported.
          Constants declared at the global level using const are also
          broken (because I have a number of interfaces that rely upon
          this behavior).

          *** POTENTIAL INCOMPATIBILITY ***  This may break interfaces that
          mistakenly treat 'const char *' types as constant values.

8/8/99  : Modified the parser to support bit-fields.    For example:

          typedef struct {
              unsigned int is_keyword : 1;
              unsigned int is_extern  : 1;
              unsigned int is_static  : 1;
          } flags;

          Bit-fields can only be applied to integer types and their
          are other restrictions.  SWIG performs no such type-checking
          (although the C compiler will catch problems when it tries to
          compile the wrapper code).

8/8/99  : Removed trailing space of $basetype substitution in typemaps.
          This is to allow things like this:

          %typemap(python, argout) spam** OUTPUT{
              ...
              char* a = "$basetype_p";
              ...
          }

          (Patch suggested by Nathan Dunfield).

6/22/99 : Made a very slight tweak to the Perl5 shadow class
          code that allows typemaps to alter the return type
          of objects (to support polymorphic types).  Patch
          contributed by Drake Diedrich.

4/8/99  : Fixed null pointer handling bug in Perl module.
          Patch contributed by Junio Hamano.

3/17/99 : Fixed bug in perl5ptr.swg for ActiveState Perl.
          Patch contributed by Greg Anderson.

2/27/99 : Eliminated segmentation fault when Swig runs on
          empty files.

2/27/99 : Added patch to Guile module to eliminate unused
          variables.   Contributed by Mike Simons.

2/27/99 : Fixed problem with %addmethods returning references.

2/27/99 : Fixed Runtime/Makefile. Patch contributed by
          Mike Romberg.

2/27/99 : Incorporated patches to the type-checker.

2/27/99 : Fixed problem with -exportall switch and shadow classes
          in Perl5 module.  Patch contributed by Dennis Marsa.

2/27/99 : Modified Perl5 module to recognize 'undef' as a NULL char *.
          Patch contributed by Junio Hamano.

2/27/99 : Fixed the Perl5 module to support the newer versions of
          ActiveState Perl for Win32.

2/27/99 : Fixed the include order of files specified with the
          -I option.

2/5/98- : Dave finishes his dissertation, goes job hunting, moves to
2/5/99    Chicago and generally thrashes about.

Version 1.1 Patch 5 (February 5, 1998)
======================================
2/4/98  : Fixed a bug in the configure script when different package
          locations are specified (--with-tclincl, etc...).

2/2/98  : Fixed name-clash bug related to the switch to C macros for accessor
          functions.  The new scheme did not work correctly for objects
          with members such as 'obj', 'val', etc...   Fixed the bug by
          appending the word 'swig' to macro argument names.  Patch
          contributed by Rudy Albachten.

2/2/98  : Slight fix to the Perl5 module to eliminate warning messages
          about 'varname used only once : possible typo'.  Fix
          contributed by Rudy Albachten.

1/9/98  : Fixed a bug in the Perl 5 module related to the creation of
          constants and shadow classes.

1/9/98  : Fixed linking bug with Python 1.5 embed.i library file.

Version 1.1 Patch 4 (January 4, 1998)
=====================================

1/4/98  : Changed structured of the Examples directory to be more friendly
          to Borland C++.

1/4/98  : Added the function Makefile.win.bc for compiling the examples
          under Borland 5.2.

1/4/98  : Slight change to the perl5 module and C++ compilation.  The
          <math.h> library is now included before any Perl headers
          because Perl the extern "C" linkage of math.h screws alot
          of things up (especially on Windows).

1/2/98  : Change to the Python module that reduces the number of constants
          created by C++ classes, inheritance, and shadow classes.   This
          modification may introduce a few slight incompatibilities if
          you attempt to use the non-shadow class interface with shadow
          classes enabled.    Patch contributed by Mike Romberg.

1/2/98  : Support for Tcl 8.0 namespaces has been added.   This *replaces*
          the original SWIG mechanism that assumed [incr Tcl] namespaces.
          To use namespaces, simply run SWIG with the following options

             swig -tcl -namespace  foo.i

                    This places everything in a namespace that matches
                    the module name

             swig -tcl -namespace -prefix bar foo.i

                    This places everything in the namespace 'bar'

          The use of namespaces is new in Tcl 8.0.  However, the wrapper code
          generated by SWIG will still work with all versions of Tcl newer
          than and including Tcl 7.3/Tk3.6 even if the -namespace option is
          used.

          *** POTENTIAL INCOMPATIBILITY ***
          This change may break existing applications that relied on the
          -prefix and -namespace options.

1/2/98  : Added the following constants to the Tcl wrapper code

                 SWIG_name      - Name of the SWIG module
                 SWIG_prefix    - Prefix/namespace appended to command names
                 SWIG_namespace - Name of the namespace

          SWIG library writers can use these to their advantages.

1/2/98  : Fixed a bug in the Tcl8 module related to the creation of
          pointer constants (the function SWIG_MakePtr was missing from
          the wrapper code).

1/2/98  : Added the consthash.i library file to the Tcl and Tcl8 modules.

1/1/98  : Changed and cleaned up the Python typemaps.i file.   The following
          significant changes were made :

                1.  The OUTPUT typemap now returns Python tuples instead of
                    lists.   Lists can be returned as before by using the
                    L_OUTPUT type.    If compatibility with older versions
                    is needed, run SWIG with the -DOUTPUT_LIST option.

                2.  The BOTH typemap has been renamed to INOUT.  For backwards
                    compatibility, the "BOTH" method still exists however.

                3.  Output typemaps now generate less code than before.

          Changes to typemaps.i may break existing Python scripts that assume
          output in the form of a list.
          *** POTENTIAL INCOMPATIBILITY ***

12/31/97: Fixed long overdue problems with the testing scripts and certain
          makefiles that required the use of the bash shell.   Everything should
          work properly with the standard Bourne shell (sh) now.

12/31/97: Modified typemaps to allow $basetype as a valid local variable.
          This allows for all sorts of bizarre hackish typemaps that
          do cool things.   Patch contributed by Dominique Dumont.

12/31/97: Switched accessor functions generated for member data to
          C preprocessor macros (except in cases involving typemaps
          or char *).

12/31/97: Fixed a bug related to C++ member data involving references.

12/31/97: Changed accessor functions for C++ member functions to
          preprocessor macros.   This cleans up the wrapper code
          and results in fewer function definitions.

12/31/97: Changed the default C constructor to use calloc() instead
          of malloc()

12/30/97: Changed the creation of constants in the Perl5 module.
          For all practical purposes, they should work in exactly the
          same way as before except that they now require much less
          wrapper code.   Modules containing large numbers of
          constants may see greater than a 50% reduction in wrapper
          code size.

12/30/97: Modified the Python module to be more intelligent about the
          creation of constants.  SWIG no longer generates redundant
          global variables and the size of the module initialization
          function should be reduced.   (Many thanks to Jim Fulton).

12/29/97: Fixed a bug in C++ code generation related to member functions,
          default arguments, and references.

12/29/97: Fixed configure script and a few makefiles to support Python 1.5

12/29/97: Added 'embed15.i' library file.  This file should be used to
          staticly link versions of Python 1.5.    To make it the default,
          simply copy 'swig_lib/python/embed15.i' to 'swig_lib/python/embed.i'

Version 1.1 Patch 3 (November 24, 1997)
========================================

11/23/97: Fixed a bug in the Perl5 module with shadow classes and
          static class functions that return class instances.
          Note : The fix for this bug requires a slight restructuring of
          of the .pm files created by SWIG.

11/23/97: Fixed a bug in the Tcl/Tcl8 modules related to variable linking
          of character arrays.  If you declared a global variable 'char foo[10]',
          the generated wrapper code would either cause a segmentation fault
          immediately upon loading or weird memory corruption elsewhere.
          This should now be fixed although character arrays can only be
          read-only.

11/23/97: Fixed a bug with the %import directive that caused it to
          fail if files were imported from directories other than
          the current working directory.

11/23/97: Fixed incorrect diagnostic message in the ASCII documentation
          module.

11/23/97: Changed the behavior of the -o option when used with shadow
          classes. If -o was used to specify both the pathname and filename
          of SWIG's output such as

                 swig -o /home/swig/wrapper.c -shadow -perl5 foo.i

          The wrapper code would be placed the file specified with -o,
          but the .pm file and documentation would be placed in the
          directory where SWIG was run.   Now, these files are placed
          in the same directory as the file specified with the -o option.
          This change is also needed for proper operation on the
          Macintosh.

11/23/97: Added a 'this()' method to Perl5 shadow classes.   This can
          be used to return the normal pointer value from a shadow
          class that is represented as a tied hash.   To use just
          invoke as a method like this :

              $l = new List;       # Create an object
              $ptr = $l->this();   # Get the normal pointer value

          *** NEW FEATURE ***

11/23/97: Fixed the Tcl 8 pointer.i library file (which was completely
          broken in 1.1p2).

11/23/97: Modified the Perl5 type-checker to fix a few problems
          with global variables of pointer types and to allow
          tied hashes to be used interchangably with normal
          pointer values.

11/23/97: Modified the typemap mechanism to allow output
          typemaps of type 'void'.   These were ignored previously,
          but now if you specify,

                %typemap(lang,out) void {
                      ... return a void ...
                }

          You can change or assign a return value to the function.

11/23/97: Fixed processing of 'bool' datatypes in the Python module.

11/23/97: Fixed minor parsing error with C++ initializers. For example,

                 class B : public A {
                 public:
                       B() : A() { ... };
                       ...
                 }

11/23/97: Fixed the Tcl8 module so that C functions that call back into
          Tcl don't corrupt the return result object (SWIG was gathering
          the result object too early which leads to problems if subsequent
          Tcl calls are made).

11/23/97: Fixed a code generation bug in the Python module when two or
          more output parameters were used as the first arguments of a
          function.  For example :

                 %include typemaps.i
                 void foo(double *OUTPUT, double *OUTPUT, double a);

          Previously, doing this resulted in the creation of an
          extraneous comma in the output, resulting in a C syntax error.

11/22/97: Fixed a bug when template handling that was stripping whitespace
          around nested templates.   For example :

                 Foo<Bar<double> >

          was getting munged into Foo<Bar>> which is a syntax error in
          in the C++ compiler.

11/22/97: Fixed bugs in the Borland C++ makefiles.

11/22/97: Fixed memory corruption bug when processing integer
          arguments in Tcl8 module.

11/21/97: Fixed a bug in the Runtime/Makefile related to Tcl 8.

11/21/97: Fixed a bug with the %new directive and Perl5 shadow classes.
          No longer generates a perl syntax error.

11/9/97 : Changed a strncpy() to strcpy() in the pointer type-checker.
          This results in a substantial performance improvement in
          type-checking.

10/29/97: Fixed a bug in the code generation of default arguments and
          user-defined types.  For example :

                 void foo(Vector a, Vector b = d);

          should now work properly.

Version 1.1 Patch 2 (September 4, 1997)
=======================================
9/4/97  : Fixed problem with handling of virtual functions that
          was introduced by some changes in the C++ module.

Version 1.1 Patch 1 (August 27, 1997)
=====================================

8/26/97 : Fixed compilation and run-time bugs with Tcl 8.0 final.

8/21/97 : Fixed code generation bug with arrays appearing as arguments
          to C++ member functions.  For example :

                class Foo {
                public:
                      void Bar(int a[20][20]);
                };

          There is still a bug using arrays with added methods
          however.

8/20/97 : Fixed a bug with generating the code for added methods
          involving pass-by-value.

8/19/97 : Modified the typemapper to substitute the '$arg' value
          when declaring local variables.    For example :

              %typemap(in) double * (double temp_$arg) {
                    ... do something ...
              }

          When applied to a real function such as the following :

              void foo(double *a, double *b, double *result);

          three local variables will be created as follows :

              double temp_a;
              double temp_b;
              double temp_result;

          This can be used when writing multiple typemaps that need
          to access the same local variables.


7/27/97 : Fixed a variety of problems with the %apply directive and arrays.
          The following types of declarations should now work :

               %apply double [ANY] { Real [ANY] };
               %apply double [4] { double [10] };

          A generic version of apply like this :

               %apply double { Real };

          should now work--even if arrays involving doubles and Reals are
          used later.

7/27/97 : Changed warning message about "Array X has been converted to Y" to
          only appear if running SWIG in verbose mode.

7/27/97 : Added the variables $parmname and $basemangle to the typemap
          generator.    $parmname is the name of the parameter used
          when the typemap was matched.  It may be "" if no parameter
          was used.   $basemangle is a mangled version of the base
          datatype.    Sometimes used for array handling.

7/27/97 : Changed the behavior of output arguments with Python shadow classes.
          Originally, if a function returned an object 'Foo', the shadow class
          mechanism would create code like this :

                def return_foo():
                      val = FooPtr(shadowc.return_foo())
                      val.this = 1
                      return val

          The problem with this is that typemaps allow a user to redefine
          the output behavior of a function--as a result, we can no longer
          make any assumptions about the return type being a pointer or
          even being a single value for that matter (it could be a list,
          tuple, etc...).   If SWIG detects the use of output typemaps
          (either "out" or "argout") it returns the result unmodified like
          this :

                def return_foo():
                      val = shadowc.return_foo()
                      return val

          In this case, it is up to the user to figure out what to do
          with the return value (including the possibility of converting it
          into a Python class).

7/26/97 : Fixed a parsing problem with types like 'unsigned long int',
          'unsigned short int', etc...

7/24/97 : Minor bug fix to Tcl 8 module to parse enums properly.  Also
          fixed a memory corruption problem in the type-checker.
          (patch contributed by Henry Rowley.

7/24/97 : Added Python-tuple typemaps contributed by Robin Dunn.

7/24/97 : Incorporated some changes to the Python module in support of
          Mark Hammond's COM support.  I'm not entirely sure they
          work yet however.  Needs documentation and testing.

7/24/97 : Fixed code generation bugs when structures had array members
          and typemaps were used.  For example :

              %typemap(memberin) double [20][20] {
                      ... get a double [20][20] ...
              }
              struct Foo {
                     double a[20][20];
              }

          Originally, this would generate a compiler-type error when
          the wrapper code was compiled.   Now, a helper function like
          this is generated :

                double *Foo_a_set(Foo *a, double val[20][20]) {
                         ... memberin typemap here ...
                         return (double *) val;
                }

          When writing typemaps, one can assume that the source variable
          is an array of the *same* type as the structure member. This
          may break some codes that managed to work around the array bug.
          *** POTENTIAL INCOMPATIBILITY ***

7/13/97 : Fixed bug in Perl5 module when using C global variables that
          are pointers.  When used in function calls and other operations,
          the value of the pointer would be invalid---causing core
          dumps and other problems.  SWIG implements global variables
          using Perl magic variables.  As it turns out, the error
          was caused by the fact that the pointer-extraction code
          was somehow bypassing the procedure used to resolve magical
          variables (hence, leaving the value undefined).  To fix
          the problem, SWIG now explicitly resolves magic before
          extracting pointer values.

7/12/97 : Eliminated the last remnants of free() and malloc() from
          the SWIG compiler.

7/12/97 : Fixed parsing problems with typemaps involving arrays and
          temporary variables of arrays.    Also made it possible for
          SWIG to handle typemaps like this :

                 %typemap(in) double [ANY] (double temp[$dim0]) {
		      ... store data in temp[$dim0] ...
                 }

          Not only does this typemap match any double [] array, it
          creates a local variable with precisely the right dimensions.
          (ie. $dim0 gets filled in with the real number of dimensions).
          Of course, off the record, this will be a way to add more
          functionality to the typemaps.i libraries.

7/9/97  : Fixed some problems with Perl5, static linking, and shadow
          classes.  When statically linking multiple modules together, write
          a top-level interface file like this when shadow classes are not
          used :

                 %module swig, foo, bar, glob;
                 %include perlmain.i

          When shadow classes are used, the module names have an extra 'c'
          appended so it should read as :

                 %module swig, fooc, barc, globc;
                 %include perlmain.i

          When linking multiple modules, consider using the SWIG runtime
          library.

7/8/97  : Incorporated fixed versions of the Borland C++ Makefiles.

7/8/97  : First cut at trying to eliminate excessive compiler warnings.
          As it turns out, alot of warnings go away if you just make
          declarations like this

                  clientData = clientData;

          in the resulting wrapper code.  Most compilers should just
          ignore this code (at least would can hope).

7/8/97  : Fixed bizarre code generation bug with typemaps and C++ classes.
          In some cases, typemaps containing printf formatting strings such as

                  %typemap(memberout) int * {
                         printf("%d",42);
                  }

          Would generate completely bogus code with garbage replacing
          the '%d'.   Caused by one faulty use of printf (wasn't able to find
          any other occurences).

7/7/97  : Fixed bug in Python shadow class generation with non-member
          functions that are returning more than one value.

7/7/97  : Incorporated modifications to make SWIG work with Guile 1.2.
          Still need to test it out, but it is rumored to work.

7/2/97  : Fixed some bugs related to output arguments and Python shadow
          classes.    If an output argument is detected, SWIG assumes
          that the result is a list and handles it appropriately.
          If the normal return type of an function is an object,
          it will be converted into a shadow class as before, but
          with the assumption that it is the first element of a
          list.  *** NOTE : This behavior has been subsequently changed ***

6/29/97 : Changed EXPORT to SWIGEXPORT in all of the language modules.
          Should provide better compatibility with Windows.

6/29/97 : Modified Python shadow classes so that output arguments
          work correctly (when typemaps are used).

Version 1.1 (June 24, 1997)
===========================

6/24/97 : Fixed Objective-C constructor bug when working with Perl5
          shadow classes.

6/23/97 : Fixed some parsing problems with Objective-C.  Declarations
          such as the following should work now :

               - foo : (int) a with: (int) b;

6/22/97 : Added SWIG Runtime library.   This library contains
          the SWIG pointer type-checker and support functions
          that are normally included in every module.  By using
          the library, it is easier to work with multiple SWIG
          generated modules.

6/22/97 : Fixed minor bug in Perl5 module related to static linking
          of multiple modules.

6/22/97 : Fixed some bugs with the %import directive. When used with
          Perl5 shadow classes, this generates a 'require' statement
          to load in external modules.

6/22/97 : Added -swiglib option.  This prints out the location of the
          SWIG library and exits.  This option is only really useful to
          configuration tools that are looking for SWIG and its library
          location (e.g. autoconf, configure, etc...).

6/21/97 : Fixed export bug with Perl5.004 on Windows-NT.

6/20/97 : Minor change to code generation of class/structure members in
          order to work better with typemaps. Should have no noticable
          impact on existing SWIG modules.

6/19/97 : Added -t option. This allows SWIG to load a typemap file before
          processing any declarations.  For example :

                 swig -t typemaps.i -python example.i

          At most, only one typemap file can be specified in this manner.
          *** NEW FEATURE ***

6/18/97 : Need a Makefile fast? Type

                 swig [-tcl, -perl5, -python] -co Makefile

          and you will get a Makefile specific to that target language.
          You just need to modify it for your application and you're
          ready to run.

6/18/97 : Completed the -ci option.  This option checks a file into the
          SWIG library.   It should be used in conjunction with a
          language option. For example :

                  swig -tcl -ci foobar.i

          Checks the file foobar.i into the Tcl part of the library.
          In order to check a file into the general library (accessible
          to all languages modules), do the following

                  swig -ci -o ../foobar.i foobar.i

          (Admittedly this looks a little strange but is unavoidable).
          The check-in option is primarily designed for SWIG maintenance
          and library development. The command will fail if the user does
          not have write permission to the SWIG library.  Third party library
          extensions can easily install themselves by simply providing
          a shell script that uses 'swig -ci' to install the appropriate
          library files.  It is not necessary to know where the SWIG library
          is located if you use this mechanism.
          *** NEW FEATURE ***

6/16/97 : Fixed a bug in shadow class generation when %name() was applied
          to a class definition.   Unfortunately, fixing the bug required
          a change in the Language C API by adding an extra argument to
          the Language::cpp_class_decl() function.  This may break
          SWIG C++ extensions.
          *** POTENTIAL INCOMPATIBILITY ***

6/15/97 : Added a warning message if no module name is specified with the
          %module directive or -module option.

6/15/97 : Fixed line number bug when reporting errors for undefined
          base classes.

6/15/97 : Added new %rename directive.  This allows the forward declaration
          of a renaming.  For example :

                 %rename OldName NewName;

                 .... later ...
                 int OldName(int);

          Unlike %name, %rename will rename any occurence of the old name.
          This applies to functions, variables, class members and so forth.
          There is no way to disable %rename once set, but you can change the
          name by redeclaring it to something else.
          *** NEW FEATURE ***

6/15/97 : Improved the implementation of the %name directive so that it
          could be used with conditional compilation :

                    #ifdef SWIG
                    %name(NewName)
                    #endif
                    int OldName(int);

6/15/97 : Added support for functions with no return datatype.  In this case,
          SWIG assumes a return type of 'int'.

6/11/97 : Improved error reporting in the parser.  It should be a little
          less sensitive to errors that occur inside class definitions
          now.  Also reports errors for function pointers.

6/11/97 : Made '$' a legal symbol in identifiers.  This is to support
          some Objective-C libraries.  Some compilers (such as gcc) may also
          allow identifiers to contain a $ in C/C++ code as well (this is
          an obscure feature of C). When '$' appears in identifier, SWIG
          remaps it to the string '_S_' when creating the scripting language
          function. Thus a function 'foo$bar' would be called 'foo_S_bar'.

6/11/97 : Fixed bug in Python shadow classes with __repr__ method.  If
          supplied by the user, it was ignored, but now it should work.

6/9/97  : Fixed the Tcl 8.0 module to work with Tcl 8.0b1.   SWIG is no
          longer compatible with *any* alpha release of Tcl 8.0.
          *** POTENTIAL INCOMPATIBILITY ***

6/7/97  : Put a maximal error count in (currently set to 20). SWIG will bail out
          if it generates more errors than this (useful for preventing SWIG
          from printing 4000 syntax errors when it gets confused).

6/7/97  : Fixed segmentation fault when parsing variable length arguments.

6/7/97  : Minor change to Perl5 module.  C++ static functions are now
          put in the same package as their class when using shadow classes.

6/7/97  : Centralized the naming of functions, members, wrappers etc... By
          centralizing the naming scheme, it should be possible to make
          some multi-file optimizations.  Also, it should be possible to
          change SWIG's naming scheme (perhaps a new feature to be added
          later).

6/2/97  : Added 'arginit' typemap.   This can be used to assign initial values
          to function arguments.  Doing so makes it somewhat easier to detect
          improper argument passing when working with other typemaps.

6/2/97  : Fixed code generation bug when read-only variables were inherited
          into other classes.  Under inheritance, the variables would
          become writable, but this has now been corrected.

5/30/97 : An empty %name() directive is no longer allowed or supported.
          This directive was originally used to strip the prefix
          off of a class or structure.  Unfortunately, this never really
          seemed to work right and it complicated the C++ code generator
          significantly.   As far as I can tell no one uses it, so it
          is now history.  *** POTENTIAL INCOMPATIBILITY ***

5/28/97 : Fixed a parsing bug with #define and C++ comments.  Declarations
          such as the following now work properly :

                   #define CONST   4     // A Comment

5/28/97 : Made some performance improvements to the SWIG String class.
          (only affects the SWIG compiler itself).

5/28/97 : Modified the parser to skip template definitions and issue a
          warning message.

5/28/97 : Preliminary support for parameterized types added (ie. templates).
          Types such as the following should pass through the SWIG compiler

                    void foo(vector<complex> *a, vector<double> *b);

          When used, the entire name 'vector<complex>' becomes the name
          of the datatype.      Due to space limitations in datatype
          representations, the name should not exceed 96 characters.

          Note : This is only part of what is needed for template support.
          Template class definitions are not yet supported by SWIG.

          The template notation above may also be used when specifying
          Objective-C protocol lists.
          *** NEW FEATURE ***

5/24/97 : First cut at Objective-C support added.   As it turns out, almost
          everything can be handled with only a few minor modifications to
          the C++ module.
          *** NEW FEATURE ***

5/23/97 : Fixed repeated definition bug in multiple inheritance handling
          when multiple base classes share a common base class (ie.
          the evil diamond).

5/21/97 : Fixed rather embarrassing typo that worked its way into the
          Tests/Build directory.

5/19/97 : Fixed code generation bug when using native methods and
          shadow classes with Python and Perl5 modules.

5/19/97 : Modified the %apply directive slightly so that it would work
          with pointers a little better. For example :

                  %apply unsigned long { DWORD };

          Applies *all* typemaps associated with "unsigned long" to
          "DWORD".   This now includes pointers to the two datatypes.
          For example, a typemap applied to "unsigned long **" would
          also be applied to any occurrence of "DWORD **" as well.

5/19/97 : Fixed an ownership assignment bug in the Perl5 module when
          class members were returning new objects belonging to
          different classes.

5/17/97 : Added a few more typemap variables.

                  $name          - Name of function/variable/member
                  $basetype      - Base datatype (type without pointers)
                  $argnum        - Argument number

5/16/97 : Fixed embarrassing underscore error in local variable
          allocator.

5/16/97 : Fixed namespace clash bug in parameterized typemaps
          when creating arrays as new local variables.

5/15/97 : Fixed some bugs with inheritance of added methods across
          multiple files.   SWIG now uses names of base classes
          when generating such functions.

5/14/97 : Finished support for default typemaps.  Primarily used
          internally, they can be used to match the basic
          built-in datatypes used inside of SWIG.   You can
          specify them in interface files as well like this :

               %typemap(tcl,in) int SWIG_DEFAULT_TYPE {
                        $target = atoi($target);
               }

          Unlike normal typemaps, this default map will get applied
          to *all* integer datatypes encountered, including those
          renamed with typedef, etc...

5/13/97 : Fixed substring bug in type checker.

5/12/97 : Fixed bug in parameterized typemaps when declaring local
          variables of structures.

Version 1.1 Beta6 (May 9, 1997)
===============================

5/9/97  : Fixed bizarre NULL pointer handling bug in Perl5 module.

5/8/97  : Fixed mysterious segmentation fault when running SWIG on an
          empty file.

5/7/97  : The code generator will now replace the special symbol "$cleanup"
          with the cleanup code specified with the "freearg" typemap.
          This change needed to properly manage memory and exceptions.

5/5/97  : Added the 'typemaps.i' library file.  This contains a
          variety of common typemaps for input values, pointers,
          and so on.

5/5/97  : Changed behavior of "argout" typemap in Python module.
          Old versions automatically turned the result into a
          Python list.  The new version does nothing, leaving the
          implementation up to the user.  This provides more flexibility
          but may break older codes that rely on typemaps.
          *** POTENTIAL INCOMPATIBILITY ***

5/5/97  : Fixed bug in Python module related to the interaction of
          "argout" and "ignore" typemaps.

5/5/97  : Fixed bug in Python module that would generate incorrect code
          if all function arguments are "ignored".

5/4/97  : Added %apply and %clear directives.   These form a higher level
          interface to the typemap mechanism.  In a nutshell, they
          can be used to change the processing of various datatypes without
          ever having to write a typemap.  See the SWIG documentation
          for more details.  ** NEW FEATURE **

5/4/97  : Added a local variable extension to the typemap handler.
          For example :

                 %typemap(tcl,in) double *(double temp) {
		        temp = atof($source);
                        $target = &temp;
                 }

          In this case, 'temp' is a local variable that exists
          in the entire wrapper function (not just the typemap
          code).  This mechanism provides better support for
          certain types of argument handling and also makes it
          possible to write thread-safe typemaps.  Any number
          local variables can be declared by supplying a comma
          separated list.   Local variables are guaranteed to be
          unique, even if the same typemap is applied many times
          in a given function.
          ** Not currently supported in Perl4 or Guile modules.

5/2/97  : Fixed processing of %ifdef, %endif, %if, etc...  (These are
          SWIG equivalents of the C preprocessor directives that
          can pass through the C preprocessor without modification).

5/2/97  : Fixed major (but subtle) bug in the run-time type checker
          related to searching and type-checking for C++ inheritance.
          To make a long story short, if you had two classes named
          "Foo" and "FooObject" the type checker would sometimes
          get confused and be unable to locate "Foo" in an internal
          table.

5/2/97  : Fixed some bugs in the -co option.

4/24/97 : Pointer library added to the SWIG library.

4/19/97 : Added the %new directive.   This is a "hint" that can be used
          to tell SWIG that a function is returning a new object. For
          example :

                  %new Foo *create_foo();

          This tells SWIG that create_foo() is creating a new object
          and returning a pointer to it.   Many language modules may
          choose to ignore the hint, but when working with shadow classes,
          the %new is used to handle proper ownership of objects.

          %new can also be used with dynamically allocated strings.
          For example :

                  %new char *create_string();

          When used, all of the language modules will automatically cleanup
          the returned string--eliminating memory leaks.
          ** NEW FEATURE **

4/19/97 : Added a new typemap "newfree".   This is used in conjunction with
          the %new directive and can be used to change the method by which
          a new object returned by a function is deleted.

4/19/97 : The symbol "__cplusplus" is now defined in the SWIG interpreter
          when running with the -c++ option.

4/17/97 : Added support for static member functions when used inside the
          %addmethods directive.

4/15/97 : Added a special typemap symbol PREVIOUS that can be used to
          restore a previous typemap. For example :

	         %typemap(tcl,in) int * = PREVIOUS;

          This is primarily used in library files.

4/13/97 : Added %pragma directive for Perl5 module.   Two new pragmas are
          available :

                 %pragma(perl5) code = "string"
                 %pragma(perl5) include = "file.pl"

          Both insert code into the .pm file created by SWIG.  This can
          be used to automatically customize the .pm file created by SWIG.

4/13/97 : Scanner modified to only recognize C++ keywords when the -c++
          option has been specified.  This provides support for C programs
          that make use of these keywords for identifiers.
          SWIG may need to be explicitly run with the -c++ option when
          compiling C++ code (this was allowed, but not recommended in
          previous versions). **POTENTIAL INCOMPATIBILITY**

4/11/97 : Fixed a rather nasty bug in the Perl5 module related to using
          variable linking with complex datatypes and pointers.   On Unix,
          code would work (somehow), but would cause an access violation
          under Windows-NT.  The fix should correct the problem,
          but there may still be a problem using global variables of
          complex datatypes in conjunction with shadow classes.  Fortunately,
          this sort of thing seems to be relatively rare (considering
          that the bug has been around for more than a year - yikes!).

4/11/97 : Fixed bizarre constant evaluation bug in Perl5 code generation
          when running under Windows-NT.

4/8/97  : Bug when using default arguments and C++ references fixed.

4/8/97  : Fixed code generation bugs in Python and Perl5 modules related to
          using class renaming (applying the %name directive to a class
          definition) and shadow classes.

4/7/97  : Fixed minor bugs in swigptr.swg, tcl8ptr.swg, and perl5ptr.swg to
          prevent infinite loops when weird datatypes are passed.

3/29/97 : 'Makefile.win' added.   This is used to build most of the examples
          in the Examples directory under Windows NT/95.

3/27/97 : Fixes to SWIG's error return codes.   SWIG now returns non-zero
          exit codes for certain kinds of errors (which makes it more
          friendly to makefiles).     An overhaul of the error handling
          is on the to-do list and will probably show up in a later release.

3/25/97 : Bug fix.  "freearg" and "argout" typemaps have been fixed in
          the Perl5 module.  In previous versions, function input parameters
          and function output parameters shared the same memory space--causing
          all sorts of nasty problems when trying to pass perl values by
          reference.   SWIG now internally makes a "copy" (which is really
          just a pointer) of affected parameters and uses that.   This
          is done transparently so there is no noticable impact on any
          SWIG generated modules.   This change is probably only noticable
          to expert users.

3/25/97 : Added type-check to verbose and stat mode.  SWIG will now generate a list
          of all datatypes that were used but undefined (useful for tracking
          down weird bugs).   This is enabled with the -v option (which
          is now officially known as "overly verbose" mode) or the -stat option.

3/25/97 : Slight change to the parser to make include guards work correctly.
          For example :

                #ifndef INTERFACE_I
                #define INTERFACE_I
                %module foobar.i
                ... declarations ...
                #endif

3/24/97 : %checkout directive added.   This allows an interface file to
          extract files from the SWIG library and place them in the
          current directory.   This can be used to extract scripts and
          other helper code that might be associated with library files.
          For example :

                %checkout array.tcl

          Will look for a file "array.tcl" in the library and copy it
          to the current directory.    If the file already exists in the
          directory, this directive does nothing (it will not overwrite an
          existing file).  This only an experimental feature for now.

3/24/97 : SWIG will now look in the SWIG Library for a file if it can't
          find it in the current directory.  As a result, it is easy to
          make modules from SWIG library files.  For example, if you
          want to make a Python module from the SWIG timers library, just
          type this in any directory :

                swig -python timers.i

          You will get the files timers_wrap.c and timers_wrap.doc in
          the current directory that you can now compile.   The file
          remains in the SWIG library (although you can check it out
          using the -co option).  *** New Feature ***

3/24/97 : -co option added to SWIG to allow easy access to the SWIG library.
          When used, this instructs SWIG to check out a library file and
          place it in the current directory.  For example :

                unix > swig -co array.i
                array.i checked out from the SWIG library
                unix >

          Once in your directory you can customize the file to suit your
          particular purposes.  The checkout option makes it easy to
          grab library files without knowing anything about the SWIG
          installation, but it also makes it possible to start
          including scripts, C code, and other miscellaneous files
          in the library.  For example, you could put a cool script
          in the library and check it out whenever you wanted to use it.
          *** New Feature ***

3/24/97 : #pragma export directives added to Tcl output for compiling
          shared libraries on the Mac.

3/24/97 : Minor changes to wish.i and tclsh.i library files to provide
          support for the Macintosh.

3/19/97 : SWIG's policy towards NULL pointers has been relaxed.  The
          policy of requiring a special compiler directive -DALLOW_NULL
          to use NULL pointers is no longer supported.  While this may
          seem "unsafe", it turns out that you can use a "check"
          typemap to achieve some safety.   For example :

                %typemap(perl5,check) Node * {
                       if (!$target)
                            croak("NULL Pointers not allowed.");
                }

          This prevents any NULL value of a "Node *" pointer to be
          passed to a function.   (I think this is much cleaner
          than the old -DALLOW_NULL hack anyways).

3/19/97 : Fixed pointer handling errors in Perl5 module.  Modules no
          longer core dump when a Perl reference is inadvertently
          passed in as a C pointer.

3/18/97 : Added a "check" typemap.   This can be used to check the
          validity of function input values.  For example :

                %typemap(perl5,check) int posint {
                       if ($target < 0)
                           croak("Argument is not a positive integer");
                }

3/18/97 : Added an $arg variable to Tcl typemaps.   This makes it easier
          to return argument values by "reference".

3/18/97 : Fixed a code generation bug when using C++ references and
          the %addmethods directive.

3/18/97 : Fixed a few glitches in the typemap module with respect to
          chaining. For example :

                %typemap(tcl,in) int {
                       $in                // Inserts prexisting typemap
                       printf("Received a %d\n", $target);
                }

          This has been allowed for quite some time, but didn't work
          if no existing typemap was defined.  Now, it still doesn't
          work if no existing typemap is defined, but it issues a
          warning message.   There is some support using default typemaps,
          but none of the language modules take advantage of it.  This
          should be considered experimental at this time.

Version 1.1b5 Patch 1 (March 16, 1997)
======================================

3/16/97 : Fixed references bug with C++ code generation.

3/16/97 : Fixed initialization bug in the documentation system that
          was causing weird problems.

3/16/97 : Fixed fatal bug with -c option in the Python module.

3/13/97 : Fixed bug in the documentation system involving the %text directive
          and sorting. In the old system, %text entries would float to the
          top of a section because they were "nameless".   Now they are
          attached to the previous declaration and will stay in the proper
          location relative to the previous entry.

Version 1.1b5 (March 12, 1997)
==============================

3/11/97 : Fixed compilation problems introduced by Tcl/Tk 8.0a2.
          *** INCOMPATIBILITY *** SWIG no longer works with Tcl/Tk 8.0a1.

3/10/97 : Fixed bug with ignored arguments and C++ member functions in
          the Python module.

3/9/97  : Parsing bugs with nested class definitions and privately
          declared nested class definitions fixed.

3/9/97  : Fixed a few minor code generation bugs with C++ classes and
          constructors.   In some cases, the resulting wrapper code
          would not compile properly.   SWIG now attempts to use
          the default copy constructor instead.

3/8/97  : Added a -l option to SWIG that allows additional SWIG library files
          to be grabbed without having them specified in the interface file.
          This makes it easier to keep the interface file clean and move certain
          options into a Makefile.   For example :

              swig -tcl example.i              #  Build a normal Tcl extension
              swig -tcl -lwish.i example.i     #  Build it as a wish extension
                                               #  by including the 'wish.i' file.

              swig -python example.i           # Build a dynamically loaded extension
              swig -python -lembed.i example.i # Build a static extension

          These kinds of options could previously be accomplished with
          conditional compilation such as :

                   %module example
                   ...
                   #ifdef STATIC
                   %include embed.i
                   #endif

3/8/97  : Incorporated changes to Guile module to use the new gh interface
          in FSF Guile 1.0.    The older gscm interface used in Cygnus
          Guile releases is no longer supported by SWIG.

3/8/97  : Cleaned up the Tcl Netscape plugin example.   It should work with
          version 1.1 of the plugin now.

3/8/97  : Added better array support to the typemap module.  The keyword
          ANY can now be used to match any array dimension.  For example :

                    %typemap(tcl,in) double [ANY] {
                           ... get an array ...
                    }

          This will match any single-dimensional double array.   The array
          dimension is passed in the variables $dim0, $dim1, ... $dim9.  For
          example :

		    %typemap(tcl,in) double [ANY][ANY][ANY] {
			printf("Received a double[%d][%d][%d]\n",$dim0,$dim1,$dim2);
	            }

          Any typemap involving a specific array dimension will override any
          specified with the ANY tag.  Thus, a %typemap(tcl,in) double [5][4][ANY] {}
          would override a double [ANY][ANY][ANY].  However, overuse of the ANY
          tag in arrays of high-dimensions may not work as you expect due to
          the pattern matching rule used. For example, which of the following
          typemaps has precedence?

                      %typemap(in) double [ANY][5] {}     // Avoid this!
                      %typemap(in) double [5][ANY] {}

3/7/97  : Fixed a number of bugs related to multi-dimensional array handling.
          Typedefs involving multi-dimensional arrays now works correctly.
          For example :

                    typedef double MATRIX[4][4];

                    ...
                    extern double foo(MATRIX a);

          Typecasting of pointers into multi-dimensional arrays is now
          implemented properly when making C/C++ function calls.

3/6/97  : Fixed potentially dangerous bug in the Tcl Object-oriented
          interface.  Well, actually, didn't fix it but issued a
          Tcl error instead.   The bug would manifest itself as follows:

                 % set l [List]           # Create an object
                 ...
                 % set m [List -this $l]  # Make $m into an object assuming $l
                                          # contains a pointer.
                                          # Since $m == $l, $l gets destroyed
                                          # (since its the same command name)
                 % $m insert Foo
                 Segmentation fault       # Note : the list no longer exists!

          Now, an error will be generated instead of redefining the command.
          As in :

                 % set l [List]
                 ...
                 % set m [List -this $l]
                 Object name already exists!

          Use catch{} to ignore the error.

3/3/97  : Better support for enums added.   Datatypes of 'enum MyEnum'
          and typedefs such as 'typedef enum MyEnum Foo;' now work.

3/3/97  : Parser modified to ignore constructor initializers such as :

               class Foo : public Bar {
               int a,b;
               public:
                     Foo(int i) : a(0), b(i), Bar(i,0) { };
               };

3/3/97  : Modified parser to ignore C++ exception specifications such as :

               int foo(double) throw(X,Y);

3/3/97  : Added %import directive.  This works exactly like %extern
          except it tells the language module that the declarations are
          coming from a separate module.   This is usually only
          needed when working with shadow classes.

3/2/97  : Changed pointer type-checker to be significantly more
          efficient when working with derived datatypes.  This
          has been accomplished by storing type-mappings in sorted
          order, using binary search schemes, and caching recently
          used datatypes.   For SWIG generated C++ modules that
          make a large number of C function calls with derived types,
          this could result in speedups of between 100 and 50000 percent.
          However, due to the required sorting operation, module
          loading time may increased slightly when there are lots of
          datatypes.

3/2/97  : Fixed some C++ compilation problems with Python
          embed.i library files.

2/27/97 : Slight change to C++ code generation to use copy constructors
          when returning complex data type by value.

2/26/97 : Fixed bug in Python module with -c option.

2/26/97 : Slight tweak of parser to allow trailing comma in enumerations
          such as

                enum Value (ALE, STOUT, LAGER, };

2/25/97 : Fixed code generation bug in Tcl module when using the
          %name() directive on a classname.

2/25/97 : Finished code-size optimization of C++ code generation with
          inheritance of attributes.    Inherited attributes now
          only generate one set of wrapper functions that are re-used
          in any derived classes.   This could provide big code
          size improvements in some scripting language interfaces.

2/25/97 : Perl5 module modified to support both the Unix and Windows
          versions.  The windows version has been tested with the
          Activeware port of Perl 5.003 running under Windows 95.
          The C source generated by SWIG should compile without
          modification under both versions of Perl, but is now
          even more hideous than before.

2/25/97 : Modified parser to allow scope resolution operation to
          appear in expressions and default arguments as in :

                void foo(int a =  Bar::defvalue);

2/25/97 : Fixed bug when resolving symbols inside C++ classes.
          For example :

               class Foo {
               public:
                   enum Value {ALE, STOUT, LAGER};
                   ...
                   void defarg(Value v = STOUT);

              };

2/24/97 : Fixed bug with member functions returning void *.

2/23/97 : Modified Python module to be better behaved under Windows

            -  Module initialization function is now properly exported.
               It should not be neccessary to explicitly export this function
               yourself.

            -  Bizarre compilation problems when compiling the SWIG wrapper
               code as ANSI C under Visual C++ 4.x fixed.

            -  Tested with both the stock Python-1.4 distribution and Pythonwin
               running under Win95.

2/19/97 : Fixed typedef handling bug in Perl5 shadow classes.

2/19/97 : Added exception support.  To use it, do the following :

              %except(lang) {
                  ... try part of the exception ...
                  $function
                  ... catch part of exception ...
              }

          $function is a SWIG variable that will be replaced by the
          actual C/C++ function call in a wrapper function.  Thus,
          a real exception specification might look like this :

             %except(perl5) {
                  try {
                  $function
                  } catch (char *& sz) {
                    ... process an exception ...
                  } catch(...) {
                    croak("Unknown exception. Bailing out...");
                  }
             }

2/19/97 : Added support for managing generic code fragments (needed
          for exceptions).

2/19/97 : Fixed some really obscure typemap scoping bugs in the C++
          handler.

2/18/97 : Cleaned up perlmain.i file by removing some problematic,
          but seemingly unnecessary declarations.

2/18/97 : Optimized handling of member functions under inheritance.
          SWIG can now use wrapper functions generated for a
          base class instead of regenerating wrappers for
          the same functions in a derived class.    This could
          make a drastic reduction in wrapper code size for C++
          applications with deep inheritance hierarchies and
          lots of functions.

2/18/97 : Additional methods specified with %addmethods can now
          be inherited along with normal C++ member functions.

2/18/97 : Minor internal fixes to make SWIG's string handling a little
          safer.

2/16/97 : Moved some code generation of Tcl shadow classes to
          library files.

2/16/97 : Fixed documentation error of '-configure' method in
          Tcl modules.

2/16/97 : Modified Perl5 module slightly to allow typemaps
          to use Perl references.

2/12/97 : Fixed argument checking bug that was introduced by
          default arguments (function calls with too many
          arguments would still be executed).  Functions now
          must have the same number of arguments as C version
          (with possibility of default/optional arguments
          still supported).

2/12/97 : Fixed default argument bug in Perl5 module when
          generating wrapper functions involving default
          arguments of complex datatypes.

2/12/97 : Fixed typemap scoping problems.  For example :

              %typemap(tcl,in) double {
                    .. get a double ..
              }

              class Foo {
              public:
                   double bar(double);
              }

              %typemap(tcl,in) double {
                    .. new get double ..
              }

          Would apply the second typemap to all functions in Foo
          due to delayed generation of C++ wrapper code (clearly this
          is not the desired effect).   Problem has been fixed by
          assigning unique numerical identifiers to every datatype in
          an interface file and recording the "range of effect" of each
          typemap.

2/11/97 : Added support for "ignore" and "default" typemaps.  Only use
          if you absolutely know what you're doing.

2/9/97  : Added automatic creation of constructors and destructors for
          C structs and C++ classes that do not specify any sort of
          constructor or destructor.   This feature can be enabled by
          running SWIG with the '-make_default' option or by inserting
          the following pragma into an interface file :

                 %pragma make_default

          The following pragma disables automatic constructor generation

                 %pragma no_default

2/9/97  : Added -make_default option for producing default constructors
          and destructors for classes without them.

2/9/97  : Changed the syntax of the SWIG %pragma directive to
          %pragma option=value or %pragma(lang) option=value.
          This change makes the syntax a little more consistent
          between general pragmas and language-specific pragmas.
          The old syntax still works, but will probably be phased
          out (a warning message is currently printed).

2/9/97  : Improved Tcl support of global variables that are of
          structures, classes, and unions.

2/9/97  : Fixed C++ compilation problem in Python 'embed.i' library file.

2/9/97  : Fixed missing return value in perlmain.i library file.

2/9/97  : Fixed Python shadow classes to return an AttributeError when
          undefined attributes are accessed (older versions returned
          a NameError).

2/9/97  : Fixed bug when %addmethods is used after a class definition whose
          last section is protected or private.

2/8/97  : Made slight changes in include file processing to support
          the Macintosh.

2/8/97  : Extended swigmain.cxx to provide a rudimentary Macintosh interface.
          It's a really bad interface, but works until something better
          is written.

1/29/97 : Fixed type-casting bug introduced by 1.1b4 when setting/getting the
          value of global variables involving complex data types.

1/29/97 : Removed erroneous white space before an #endif in the code generated
          by the Python module (was causing errors on DEC Alpha compilers).

1/26/97 : Fixed errors when using default/optional arguments in Python shadow
	  shadow classes.

1/23/97 : Fixed bug with nested %extern declarations.

1/21/97 : Fixed problem with typedef involving const datatypes.

1/21/97 : Somewhat obscure, but serious bug with having multiple levels
          of typedefs fixed.  For example :

		typedef char *String;
                typedef String  Name;

Version 1.1 Beta4 (January 16, 1997)
====================================

Note : SWIG 1.1b3 crashed and burned shortly after take off due
to a few major run-time problems that surfaced after release.
This release should fix most, if not all, of those problems.

1/16/97 : Fixed major memory management bug on Linux

1/14/97 : Fixed bug in functions returning constant C++ references.

1/14/97 : Modified C++ module to handle datatypes better.

1/14/97 : Modified parser to allow a *single* scope resolution
          operator in datatypes.  Ie : Foo::bar.   SWIG doesn't
          yet handle nested classes, so this should be
          sufficient for now.

1/14/97 : Modified parser to allow typedef inside a C++ class.

1/14/97 : Fixed some problems related to datatypes defined inside
          a C++ class.  SWIG was not generating correct code,
          but a new scoping mechanism and method for handling
          datatypes inside a C++ class have been added.

1/14/97 : Changed enumerations to use the value name instead
          of any values that might have appeared in the interface
          file.  This makes the code a little more friendly to
          C++ compilers.

1/14/97 : Removed typedef bug that made all enumerations
          equivalent to each other in the type checker (since
          it generated alot of unnecessary code).

Version 1.1 Beta3 (January 9, 1997)
====================================

Note : A *huge* number of changes related to ongoing modifications.

1.  Support for C++ multiple inheritance added.

2.  Typemaps added.

3.  Some support for nested structure definitions added.

4.  Default argument handling added.

5.  -c option added for building bare wrapper code modules.

6.  Rewrote Pointer type-checking to support multiple inheritance
    correctly.

7.  Tcl 8.0 module added.

8.  Perl4 and Guile modules resurrected from the dead (well, they
    at least work again).

9.  New Object Oriented Tcl interface added.

10. Bug fixes to Perl5 shadow classes.

11. Cleaned up many of the internal modules of the parser.

12. Tons of examples and testing modules added.

13. Fixed bugs related to use of "const" return values.

14. Fixed bug with C++ member functions returning void *.

15. Changed SWIG configuration script.

Version 1.1 Beta2 (December 3, 1996)
====================================

1. Completely rewrote the SWIG documentation system.  The changes
   involved are too numerous to mention.  Basically, take everything
   you knew about the old system, throw them out, and read the
   file Doc/doc.ps.

2. Limited support for #if defined() added.

3. Type casts are now allowed in constant expressions.  ie

         #define  A   (int) 3

4. Added support for typedef lists.  For example :

	typedef struct {
	        double x,y,z;
        } Vector, *VectorPtr;

5. New SWIG directives (related to documentation system)

	%style
	%localstyle
	%subsection
	%subsubsection

6. Reorganized the C++ handling and made it a little easier to
   work with internally.

7.  Fixed problem with inheriting data members in Python
    shadow classes.

8.  Fixed symbol table problems with shadow classes in both
    Python and Perl.

9.  Fixed annoying segmentation fault bug in wrapper code
    generated for Perl5.

10. Fixed bug with %addmethods directive.  Now it can be placed
    anywhere in a class.

11. More test cases added to the SWIG self-test.   Documentation
    tests are now performed along with other things.

12. Reorganized the SWIG library a little bit and set it up to
    self-document itself using SWIG.

13. Lots and lots of minor bug fixes (mostly obscure, but bugs
    nonetheless).


Version 1.1 Beta1 (October 30, 1996)
====================================

1. Added new %extern directive for handling multiple files

2. Perl5 shadow classes added

3. Rewrote conditional compilation to work better

4. Added 'bool' datatype

5. %{,%} block is now optional.

6. Fixed some bugs in the Python shadow class module

7. Rewrote all of the SWIG tests to be more informative
   (and less scary).

8. Rewrote parameter list handling to be more memory
   efficient and flexible.

9. Changed parser to ignore 'static' declarations.

10. Initializers are now ignored.  For example :

	struct FooBar a = {3,4,5};

11. Somewhat better parsing of arrays (although it's
    usually just a better error message now).

12. Lot's of minor bug fixes.


Version 1.0 Final (August 31, 1996)
===================================
1. Fixed minor bug in C++ module

2. Fixed minor bug in pointer type-checker when using
   -DALLOW_NULL.

3. Fixed configure script to work with Python 1.4beta3

4. Changed configure script to allow compilation without
   yacc or bison.

Version 1.0 Final (August 28, 1996)
===================================

1.  Changed parser to support more C/C++ datatypes (well,
    more variants).   Types like "unsigned", "short int",
    "long int", etc... now work.

2.  "unions" added to parser.

3.  Use of "typedef" as in :

	typedef struct {
	     double x,y,z;
	} Vector;

    Now works correctly.   The name of the typedef is used as
    the structure name.

4.  Conditional compilation with #ifdef, #else, #endif, etc...
    added.

5.  New %disabledoc, %enabledoc directives allow documentation
    to selectively be disabled for certain parts of a wrapper
    file.

6.  New Python module supports better variable linking, constants,
    and shadow classes.

7.  Perl5 module improved with better compatibility with XS
    and xsubpp.   SWIG pointers and now created so that they
    are compatible with xsubpp pointers.

8.  Support for [incr Tcl] namespaces added to Tcl module.

9.  %pragma directive added.

10. %addmethods directive added.

11. %native directive added to allow pre-existing wrapper functions
    to be used.

12. Wrote configure script for SWIG installation.

13. Function pointers now allowed with typedef statements.

14. %typedef modified to insert a corresponding C typedef into
    the output file.

15. Fixed some problems related to C++ references.

16. New String and WrapperFunction classes add to make generating
    wrapper code easier.

17. Fixed command line option processing to eliminate core dumps
    and to allow help messages.

18. Lot's of minor bug fixes to almost all code modules


Version 1.0 Beta 3 (Patch 1) July 17, 1996
==========================================

1.0 Final is not quite ready yet, but this release fixes a
number of immediate problems :

1.  Compiler errors when using -strict 1 type checking have been fixed.

2.  Pointer type checker now recognizes pointers of the form
    _0_Type correctly.

3.  A few minor fixes were made in the Makefile

Version 1.0 Beta 3 (June 14, 1996)
===================================


There are lots of changes in this release :

1.  SWIG is now invoked using the "swig" command instead of "wrap".
    Hey, swig sounds cooler.

2.  The SWIG_LIB environment variable can be set to change the
    location where SWIG looks for library files.

3.  C++ support has been added.   You should use the -c++ option
    to enable it.

4.  The %init directive has been replaced by the %module directive.
    %module constructs a valid name for the initialization function
    for whatever target language you're using (actually this makes
    SWIG files a little cleaner).  The old %init directive still works.

5.  The syntax of the %name directive has been changed.   Use of the
    old one should generate a warning message, but may still work.

6.  To support Tcl/Tk on non-unix platforms, SWIG imports a file called
    swigtcl.cfg from the $(SWIG_LIB)/tcl directory.   I don't have access
    to an NT machine, but this file is supposedly allows SWIG to
    produce wrapper code that compiles on both UNIX and non UNIX machines.
    If this doesn't work, you'll have to edit the file swigtcl.cfg. Please
    let me know if this doesn't work so I can update the file as
    necessary.

7.  The SWIG run-time typechecker has been improved.    You can also
    now redefine how it works by supplying a file called "swigptr.cfg"
    in the same directory as your SWIG interface files.   By default,
    SWIG reads this file from $(SWIG_LIB)/config.

8.  The documentation system has been changed to support the following :

	-  Documentation order is printed in interface file order by
           default.   This can be overridden by putting an %alpha
           directive in the beginning of the interface file.

        -  You can supply additional documentation text using

           %text %{ put your text here %}

        -  A few minor bugs were fixed.

9.  A few improvements have been made to the handling of command line
    options (but it's still not finished).

10.  Lots of minor bug fixes in most of the language modules have been
     made.

11. Filenames have been changed to 8.3 for compatibility with a SWIG
    port to non-unix platforms (work in progress).

12. C++ file suffix is now .cxx (for same reason).

13. The documentation has been upgraded significantly and is now
    around 100 pages.    I added new examples and a section on
    C++.  The documentation now includes a Table of Contents.

14. The SWIG Examples directory is still woefully sparse, but is
    getting better.

Special notice about C++
------------------------
This is the first version of SWIG to support C++ parsing.  Currently
the C++ is far from complete, but seems to work for simple cases.
No work has been done to add special C++ processing to any of
the target languages.   See the user manual for details about how
C++ is handled.   If you find problems with the C++ implementation,
please let me know.  Expect major improvements in this area.

Note : I have only successfully used SWIG and C++ with Tcl and
Python.

Notice about Version 1.0Final
-----------------------------

Version 1.0B3 is the last Beta release before version 1.0 Final is
released.  I have frozen the list of features supported in version 1.0
and will only fix bugs as they show up.  Work on SWIG version 2.0 is
already in progress, but is going to result in rather significant
changes to SWIG's internal structure (hopefully for the better).  No
anticipated date for version 2.0 is set, but if you've got an idea,
let me know.

Version 1.0 Beta 2 (April 26, 1996)
===================================
This release is identical to Beta1 except a few minor bugs are
fixed and the SWIG library has been updated to work with Tcl 7.5/Tk 4.1.
A tcl7.5 examples directory is now included.

- Fixed a bug in the Makefile that didn't install the libraries
  correctly.

- SWIG Library files are now updated to work with Tcl 7.5 and Tk 4.1.

- Minor bug fixes in other modules.


Version 1.0 Beta 1  (April 10, 1996).
=====================================
This is the first "semi-official" release of SWIG.    It has a
number of substantial improvements over the Alpha release.   These
notes are in no particular order--hope I remembered everything....

1.  Tcl/Tk

SWIG is known to work with Tcl7.3, Tk3.6 and later versions.
I've also tested SWIG with expect-5.19.

Normally SWIG expects to use the header files "tcl.h" and "tk.h".
Newer versions of Tcl/Tk use version numbers.   You can specify these
in SWIG as follows :

        % wrap -htcl tcl7.4.h -htk tk4.0.h example.i

Of course, I prefer to simply set up symbolic links between "tcl.h" and
the most recent stable version on the machine.

2.  Perl4

This implementation has been based on Perl-4.035.  SWIG's interface to
Perl4 is based on the documentation provided in the "Programming Perl"
book by Larry Wall, and files located in the "usub" directory of the
Perl4 distribution.

In order to compile with Perl4, you'll need to link with the uperl.o
file found in the Perl4 source directory.  You may want to move this
file to a more convenient location.

3.  Perl5

This is a somewhat experimental implementation, but is alot less
buggy than the alpha release.     SWIG operates independently of
the XS language and xsubpp supplied with Perl5.  Currently SWIG
produces the necessary C code and .pm file needed to dynamically
load a module into Perl5.

To support Perl5's notion of modules and packages (as with xsubpp),
you can use the following command line options :

        % wrap -perl5 -module MyModule -package MyPackage example.i

Note : In order for dynamic loading to be effective, you need to be
careful about naming.    For a module named "MyModule", you'll need to
create a shared object file called "MyModule.so" using something like

        % ld -shared my_obj.o -o MyModule.so

The use of the %init directive must match the module name since Perl5
calls a function "boot_ModuleName" in order to initialize things.
See the Examples directory for some examples of how to get things
to work.

4.  Python1.3

This is the first release supporting Python.    The Python port is
experimental and may be rewritten.   Variable linkage is done through
functions which is sort of a kludge.  I also think it would be nice
to import SWIG pointers into Python as a new object (instead of strings).
Of course, this needs a little more work.

5.  Guile3

If you really want to live on the edge, pick up a copy of Guile-iii and
play around with this.      This is highly experimental---especially since
I'm not sure what the official state of Guile is these days.  This
implementation may change at any time should I suddenly figure out better
ways to do things.

6.  Extending SWIG

SWIG is written in C++ although I tend to think of the code as mostly
being ANSI C with a little inheritance thrown in.   Each target language
is implemented as a C++ class that can be plugged into the system.
If you want to add your own modifications, see Appendix C of the user
manual.   Then take a look at the "user" directory which contains some
code for building your own extenions.

7. The SWIG library

The SWIG library is still incomplete.  Some of the files mentioned in
the user manual are unavailable.    These files will be made available
when they are ready.   Subscribe to the SWIG mailing list for announcements
and updates.

8. SWIG Documentation

I have sometimes experienced problems viewing the SWIG documentation in
some postscript viewers.   However, the documentation seems to print
normally.    I'm working on making much of the documentation online,
but this takes time.

Version 0.1 Alpha (February 9, 1996)
====================================

1.  Run-time type-checking of SWIG pointers.   Pointers are now represented
    as strings with both numeric and encoded type information.    This makes
    it a little harder to shoot yourself in the foot (and it eliminates
    some segmentation faults and other oddities).

2.  Python 1.3 now supported.

3.  #define and enum can be used to install constants.

4.  Completely rewrote the %include directive and made it alot more powerful.

5.  Restructured the SWIG library to make it work better.

6.  Various bug fixes to Tcl, Perl4, Perl5, and Guile implementations.

7.  Better implementation of %typedef directive.

8.  Made some changes to SWIG's class structure to make it easier to expand.
    SWIG is now built into a library file that you can use to make your
    own extenions.

9.  Made extensive changes to the documentation.

10. Minor changes to the SWIG parser to make it use less memory.
    Also took out some extraneous rules that were undocumented and
    didn't work in the first place.

11. The SWIG library files "tclsh", "wish", "expect", etc... in the first
    release have been restructured and renamed to "tclsh.i", "wish.i",
    and so on.