summaryrefslogtreecommitdiff
path: root/tiger-compiler/NEWS.txt
blob: 19dd463f181a01629537d7c43d6fbf9cde740c88 (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
Bump 1.94.e, 2025-04-14 for tc-EXTS

Bump 1.94.d, 2025-04-07 for tc-L

Bump 1.94.c, 2025-03-25 for tc-4

Bump 1.94.b, 2025-03-19 for tc-3

Bump 1.94.a, 2025-03-10 for tc-1/2

* General
  - TC-1 and TC-2 are now shipped as one single step
  - switch to llvm-18 for LLVM-IR codegen
  - multiple small fixes to objects, translate, escapes and liveness
  - various updates to nix flake

Bump 1.93.k, 2024-06-11 for tc-9

Bump 1.93.j, 2024-06-10 for tc-8

Bump 1.93.i, 2024-06-03 for tc-7

Bump 1.93.h, 2024-05-27 for tc-6

Bump 1.93.g, 2024-05-13 for tc-5

Bump 1.93.f, 2024-04-15 for tc-EXTS

Bump 1.93.e, 2024-04-08 for tc-L

Bump 1.93.d, 2024-03-28 for tc-4

Bump 1.93.c, 2024-03-21 for tc-3

Bump 1.93.b, 2024-03-18 for tc-2

Bump 1.93.a, 2024-03-05 for tc-1

* General
  - rework the escaper to be useful for both the llvm and tree IR
  - save if the escaper is enabled in order to perform it again after cloning
  - rename TigerParser to TigerDriver and TigerDriver to TigerFactory
  - fix bugs regarding the inliner and mutually recursive nested functions
  - switch from shared ptrs to raw ptrs in back-end variants

* Distribution
  - distribute the implementation of all AST nodes
  - distribute extensions separately from TC-4 and TC-L

* Internal
  - migrate the internal testsuite from perl to python

Bump 1.92.k, 2023-06-17 for tc-9

Bump 1.92.i, 2023-06-11 for tc-8

Bump 1.92.h, 2023-06-05 for tc-7

Bump 1.92.g, 2023-05-30 for tc-6

Bump 1.92.f, 2023-05-15 for tc-5

Bump 1.92.e, 2023-04-16 for tc-L

Bump 1.92.d, 2023-04-01 for tc-4

Bump 1.92.c, 2023-03-26 for tc-3

Bump 1.92.b, 2023-03-18 for tc-2

Bump 1.92.a, 2023-03-02 for tc-1

* General
  - switch from range-v3 to C++20 ranges
  - extend misc::contract to use it as a stream
  - improve tweasts and metavar errors
  - add dumping of types to dumper-dot
  - use C++ raw literal strings
  - ship given tests directly with tc-base

* Lexer
  - change lexer generator to RE-flex
  - remove obsolete wrappers and headers

* Build
  - split runtime generation scripts from buildsystem
  - bump to llvm15
  - silence bison warnings
  - update deprecated llvm overloads
  - replace obsolete autoconf macros

Bump 1.91.i, 2022-06-15 for tc-9

Bump 1.91.i, 2022-06-13 for tc-8

* General

  - Add support for swig / python

Bump 1.91.h, 2022-05-25 for tc-7

Bump 1.91.g, 2022-05-16 for tc-6

  - Fix canon-matchers

Bump 1.91.f, 2022-05-05 for tc-5

Bump 1.91.e, 2022-03-31 for tc-L

Bump 1.91.d, 2022-03-21 for tc-4

Bump 1.91.c, 2022-03-10 for tc-3

Bump 1.91.b, 2022-03-03 for tc-2

Bump 1.91.a, 2022-02-18 for tc-1

* General
  - silent LLVM warning
  - remove misc/pair
  - Nolimips is mandatory to compile TC-7
  - use pure functions in libcombine.cc
  - symbol: always pass by copy
  - ast: use misc::symbol as value type

* Builfarm
  - add support for nix
  - fix update-Changelog
  - fix caches for docker
  - remove distcheck on TC-0
  - fix gawk regexp escape sequences for arm

* Parser
  - rework precedences and nonassocs
  - enable warnings
  - move to stable bison
  - clarify for students

* Dev
  - rewritte stagize script in python

Bump 1.90.h, 2021-06-07

Bump 1.90.g, 2021-05-31

Bump 1.90.f, 2021-05-20

* Register allocator:
  - Fix infinite loop

Bump 1.90.e, 2021-05-17

Bump 1.90.d, 2021-03-28

Bump 1.90.c, 2021-03-08

Bump 1.90.b, 2021-03-01

Bump 1.90.a, 2021-02-22

New in 1.90, 2021-02-12

* Parser
  - Remove expect 2, the GLR is now determinist (so you can
    also use LALR1)
  - add driver to ensure sepration between paser and AST
  - remove obsolete generated files
  - do not track location files

* Object
  - Rework overfun
  - Rework task mechanim for overfun
  - add combine task combine in order to properly compute
    function calls, depending on whether we activated overloading.
  - reword binding of `self'

* Monoburg
  - Remove dependency on monoburg
  - Use now tree variant style
  - Remove get_kind

* AST
  - rename Decs to Chunk for clarity
  - generate ast node destructors with override instead of virtual
    
* Buildfarm
  - pre-commit: add pre-commit hooks

* Languages
  - C++
    - add a *lot* of concepts
    - pass by const reference
    - singleton: implement generic crtp singletons
    - more explicit constructor

 - Python
    - respect several PEP recommendations

* Bug fixes
  - bounds-checking: fix expected output of bounds checking tests
    containing a segfault
  - Fix comparison of Void expressions resulted in 1

Bump 1.88, 2020-06-15 for tc-9
Bump 1.87, 2020-06-08 for tc-8

New in 1.86, 2020-05-25

*  General Maintainance
  - Use python3 rather than python2
  - Inliner: bug fixes

New in 1.85, 2020-04-11

*  General Maintainance
   - object: (type-checker) fix binding spurious members
   - enable static linking with LLVM

Bump 1.84, 2020-03-23 for tc-4
Bump 1.83, 2020-02-24 for tc-3
Bump 1.82, 2020-02-17 for tc-2

New in 1.81, 2020-02-09

*  General Maintainance
   - gitlab-ci: produce static binary
   - reformat code
   - move to C++20

Bump 1.80, 2019-06-24 for tc-9
Bump 1.79, 2019-06-03 for tc-8
Bump 1.78, 2019-05-27 for tc-7

New in 1.77, 2019-05-06

*  General Maintainance
   - gitlab-ci: split different phases 

New in 1.76.1, 2019-04-29

*  General Maintainance
   - TypeBuilder has been removed (see https://reviews.llvm.org/D56573)

New in 1.76, 2019-04-19

* General Maintainance
  -  configure: fix compiler version check

New in 1.75, 2019-03-01

* General Maintainance
  - gitlab-ci: build pdf for assignment

* IA31
  - rewrite_program: ia32: handle simultaneous use and def

Bump 1.74, 2019-02-15 for tc-3

New in 1.73, 2019-02-09

* General Maintainance
  - buildfarm: fix minors details 

New in 1.72, 2019-02-03

* General Maintainance
  - style:
	- unordered_map is preferred when sorting is not required
	- remove useless virtual destructors
	- add static const qualifiers
	- no virtual with override
	- more nested namespaces
	- prefer std::numeric to INT_MAX
	-  reserve vectors size when known beforehand
  - fix memory leak in tc.cc
  - Boost: cleanup legacy and replace by c++17 features
  - parse:
	- upgrade bison requirements
	- remove deprecated elements
	- regen parser
  - gitlab-ci:
	- require LLVM 7
	- triggers for building assignments website.

* Object
  - Handle corner case for binding
  - fix dispatched method call and upcasted return type
  - add meth_find method

New in 1.71, 2018-06-25

* Fix Maintenance
  - fix broken make dist
  - add gitlab-ci support

New in 1.70, 2018-05-31

* General Maintenance

New in 1.69, 2018-05-20

* General Maintenance

New in 1.68, 2018-05-14

* General Maintenance
  - fix style 

New in 1.67, 2018-04-16

* General Maintenance

New in 1.66, 2018-03-09

* General Maintenance
  - remove useless misc::set

New in 1.65, 2018-02-12

* General Maintenance

New in 1.64, 2018-02-01

* General Maintenance

New in 1.63, 2018-01-25

* More C++17 features
  - use structured bindings
  - use std::variant instead of boost::variant
  - use class template argument deduction
  - use if(init; condition)

* General Maintenance
  - swap callee-save and caller-save order
  - add desugar implementation for ArrayExp during TC-O
  - replace enums with enum classes
  - ensure _main existence and correct prototype in the AST
  - remove MetavarExp and Metavariable AST nodes
  - use nested namespaces
  - replace some raw pointers with unique_ptr or shared_ptr
  - add alternative rewrite_program implementation

New in 1.62, 2017-06-26

* General Maintenance
  - fix typos 

New in 1.61, 2017-06-05

* General Maintenance

New in 1.60, 2017-05-19

* General Maintenance
  - regenerate backends
  - clean code

New in 1.59, 2017-05-12

* General Maintenance
  - tests: remove duplicate tests
  - fix typos
  - fix function call conventions
  - generalize registers to multiple targets
  - clean code

New in 1.58, 2017-04-12

* General Maintenance
  - style: put tree constructors in .cc
  - fix typos
  - cleanify code 

New in 1.57, 2017-03-03

* General Maintenance

New in 1.56, 2017-02-13

* Fix documentation

New in 1.55, 2017-02-02

* General Maintenance
  - Remove unnecessary/deprecated Fixmes
  - Clean code
  - use more c++11 features

New in 1.54, 2017-01-24

* Style and General maintenance
  - Add maintainers
  - Propagate use of pragma once
  - Add missing override
  - Remove comnination between override and virtual
  - Use more STL algorithms
  - Add useful warning
  - Modernize tc-a
  - Fix typos
  - Propagate use of vector rather than lists
  - Add more tests
  - Add namespace indication at the end of scope
  - Prefer nullptr to NULL
  - Remove useless implementations thanks to =default
  - Don't repeat the same access qualifier
  - Tools to replace Fixmes by warnings

* Inline
  - More verification about return type

* Object
 - Clarify comments
 - Fix use of self inside of functions

* LLVM
  - Improve escape-collector
  - Do not construct type when no record is set
  - Don't include runtime in the distribution
  - Use native types
  - Remove useless return values
  - More explanation about the translator
  - Fix compatibility issues with 3.9

* Type
  - Do not provide files to student before needed
  - Simplify record-exp
  - Improve type_set
  - Move constructor and destructor in implementation files

* Binder
  - Fix displays
  - Adjust bindings for vardecs
  - Update definition for self

* C++1z
  - Add comments to suggest how to use new features

New in 1.53, 2016-06-24

* General maintenance

New in 1.52, 2016-06-06

* General maintenance

New in 1.51, 2016-05-30

* Remove useless typedef

New in 1.50, 2016-05-19

* General maintenance
   - Simplify code
   - Updates according to coding-style
   - Remove useless hidden block
   - Simplify type checker for classes
   - Update llvm dependencies to please gcc

New in 1.49, 2016-05-03

* General maintenance of LLVM

New in 1.48, 2016-04-18

* General maintenance
  - replace list by vector int type/class
  - Ajust given code
  - Remove nested annotations

New in 1.47, 2016-04-08:

* Add support for LLVM
  - add llvm translate module
  - replace the dump method with a visitor
  - add a record_type to the Nil type
  - add --llvm-runtime-display and --llvm-display

* General Maintenance
  - arm: fix dependencies and use correct cross compiler
  - llvm: require llvm-3.8


New in 1.46, 2016-03-07:

* General Maintenance

  - Add missing FIXMEs

New in 1.45, 2016-02-18:

* General Maintenance

  - Propagate changes for new version of Havm and Monoburg
  - Remove useless FIXME

New in 1.44, 2016-02-05:

* General Maintenance

  - Generalize use of pragma once
  - Support for boost 1.58
  - Use `unique_ptr` instead of `auto_ptr`
  - Adjust compatibility with gcc 5
  - Adjust compatibility with flex 2.6
  - Fix typos
  - Remove useless declarations
  - Start to promote C++14

* Use type alias template in all the visitors

  - End the work started at 1.39 before the new
    release for students.

* Finalize integration with ARM

* Compatibility with overload and object

   - Support for bindings
   - Support for type checking
   - Support for desugar and renamer
   - Tests

New in 1.43, 2015-06-26:

* Fix error when computing object type inside ifexp

* Update comments to fit iplemntation

New in 1.42, 2015-06-05:

* Fix pruning of unused function declarations

* Add tests for bounds-checking

New in 1.41, 2015-05-27:

* Maintenance for arm backend

New in 1.40, 2015-05-25:

* No significant changes 

New in 1.39, 2015-04-30:

* Start upgrading visitor

  Use a type alias template to shorten type names. Nonetheless
  since it may lead to conflicts with students codes, it's just
  an introduction.

* Fix check routines

  - Fix marks for studistcheck
  - Fix distcheck

New in 1.38, 2015-03-19:

* Support Python 3

  Fix compatibility with python 3.

* Update pretty printer

  Print attributes bindings.

New in 1.37, 2015-02-26:

* More targets

  - Clean ia32, mips target files
  - Add arm backend files
  - Initializer lits for cpu class

New in 1.36, 2015-02-12:

* More C++17 features

  - More uses of Boost.FileSystem's path.

New in 1.35, 2015-02-04:

* More C++11/14 features

  - type aliases with 'using';
  - moving away from std::list to promote std::vector;
  - misc::variant is now always variadic, implemented with variadic
    templates instead of dark magic incantations with Boost.Preprocessor.

* Bounds Checking

  The official name is 'bounds checking', not 'bound checking'.  So
  everything was renamed to include that plural.

* Simpler Build System

  The build system was simplified to be both simpler and faster: we no
  longer build local libraries for the modules, rather object files
  are directly linked together into libtc.

* Safer and Faster Build System

  We also have reduced the number of Makefiles to... one.  This is by
  far the best approach to development.  Have a look at this:
  <http://aegis.sourceforge.net/auug97.pdf>.

* Compilable Code with Gaps

  The code delivered to students now compiles cleanly.

* More C++17 features

  Some libraries, such as Boost.Optional, Boost.ProgramOptions, and
  Boost.FileSystem, are expected to be adopted by the forthcoming C++
  standard.  As a consequence, we started to use them liberally,
  instead of alternative implementations (e.g., argp is no longer used
  at all for command line option processing).



New in 1.34, 2014-02-17:

* Even more C++ 2011 features

  The Tiger compiler uses some more features from the C++ 2011
  ISO/IEC standard:

  - (standard) smart pointers (std::unique_ptr, std::shared_ptr);
  - general-purpose initializer lists;
  - lambda expressions;
  - explicit overrides;
  - template aliases;
  - new function declarator syntax;
  - delegating constructors;
  - non-static data member initializers;
  - inherited constructors.

  These changes require at least g++ 4.8 or clang++ 3.3.

* Moved to using Bison 3

  A special version of Bison 3 is required to build the parser.

* C++ scanner

  The scanner has been turned into a C++ class, still generated by
  Flex.

* ast::ObjectVisitor

  A visitor performing default traversal of object nodes,
  ast::ObjectVisitor, has been introduced.

* Allow `nil' as valid value for objects

  Objects (class instances) can now be initialized to `nil' or
  assigned `nil', like records.

* Repaired TCSH

  TCSH was broken due to SWIG 2 not understanding C++ 2011 constructs.
  These constructions have been hidden to SWIG so that TCSH can be
  built again.

* Style

  Many stylistics changes have been performed, mainly to match the
  EPITA Coding Style.



New in 1.33, 2013-02-11:

* Maintenance release

  More test cases, more documentation and tools to manage the test
  suite, some bug fixes, some updates to catch up with recent versions
  of tools, minor improvements, and various stylistic changes
  (especially with respect to spacing).

* More C++ 2011 features

  Explicit template instantiation declarations are introduced to
  replace the ad hoc mechanism used so far, based on *.hcc files
  that were included once.



New in 1.32, 2012-01-27:

* Text files renamed as *.txt.

  This enables more features from tools (such as Mac OS X's Finder and
  so forth).

* Fixed location handling in the scanner/parser.

  The new scheme (make_SYMBOL) broke the transmission of the current
  location from the parser to the scanner (via yylloc).  We actually
  had two "current" locations: the scanner's and the parser's.  Only
  the latter was properly initialized (with the current file name).
  "Fortunately" the standard default constructor also made the
  scanner's location work properly wrt lines and columns, but, of
  course, had an empty file name.

  The TigerParser featured a useless location_ member.  We now use it
  to exchange the current location betwenn the parser and the scanner.

  To summarize:

  - TigerParser::location_ is now the current (scanner and parser)
    location;

  - TigerParser::parse_ initializes this location with the right file
    name;

  - the parser no longer needs to initialize its $@;

  - the scanner no longer uses a (static) variable loc, but
    tp.location_, tp being the TigerParser, provided to it via %param.

* Better support for x86-64 architectures

* Improved support for clang

  The clang C and C++ front ends to the LLVM infrastructure are better
  supported.  The only real limitation is now the Argp library, which
  is not compatible with the C99 standard and must be compiled using a
  C89 compiler (using option `-std=c89' or `-std=gnu89').

* C++ 2011 features

  The Tiger compiler uses some new features from the latest C++
  ISO/IEC standard, including:

  - explicitly defaulted and deleted functions;
  - consecutive right angle brackets allowed in templates;
  - auto-typed variables;
  - template metaprogramming traits provided by the standard library;
  - the `nullptr' literal constant;
  - range-based for-loops (``for (type val : container) ...'').

  The current changes are compatible with g++ 4.6 and clang 3.0.



New in 1.31, 2011-01-30:

* Style changes for inheritance and constructors.

  Instead of

    class Foo
      : public Bar,
        public Baz
    {
      Foo()
        : Bar(),
          Baz()
      { }
    };

  write

    class Foo
      : public Bar
      , public Baz
    {
      Foo()
        : Bar()
        , Baz()
      {}
    };

* Style change in #include.

  When used with double-quotes, the included header is looked-up for
  relatively to the including file.  This is not how we use #include,
  since we all qualify our included files.  Hence, for consistency with
  the semantics and for safety, convert to using <>.



New in 1.30, 2011-01-13:

* Moved to using Bison's api.tokens.prefix

  Instead of:

    %token TOK_STRING "string"

  and using TOK_STRING in the grammar, we now use:

    %define api.tokens.prefix "TOK_"
    %token STRING "string"

  and use STRING in the grammar, but still TOK_STRING elsewhere (i.e.,
  the token enumeration generated in the header still defines
  TOK_STRING, not STRING).

* Moved to using Bison's %param

  Instead of:

    %parse-param { ::parse::TigerParser& tp }
    %lex-param   { ::parse::TigerParser& tp }

  we now use:

    %param { ::parse::TigerParser& tp }

* Moved to using Bison's named references

  Instead of:

    "for" escaping ID ":=" exp "to" exp "do" exp
     {
       $$ = new ast::ForExp (@$,
                             new ast::VarDec (@3, $3, $2, 0, $5),
                             $7, $9);
     }

  we now use:

    "for" escaping ID[var] ":=" exp[lo] "to" exp[hi] "do" exp[body]
     {
       $$ = new ast::ForExp (@$,
                             new ast::VarDec (@var, $var, $escaping, 0, $lo),
                             $hi, $body);
     }

* Moved to using Bison's make_SYMBOL functions

  By specifying "%define lex_symbol", we can change the scanner to use
  a type-safe interface: instead of handling the tokens in three parts
  (the return value is the type, the incoming arguments yylval and
  yylloc for the semantic value and the location), return an object of
  the type symbol_type with aggregates these three components)
  .

  Instead of:

    {number}  {
          yylval->ival = strtol (yytext, 0, 0);
          return parse::parser::token::INT;
    }

  we now use:

    {number}  return parse::parser::make_INT(strtol (yytext, 0, 0), loc);

  It is now impossible to return a INT, and yet assign the wrong
  semantic value.  Using some macro, the scanner can be reduced to:

    {number}  return TOKEN_VAL(INT, strtol (yytext, 0, 0));

* Moved to using Bison's variant interface

  Instead of:

    %union {
      int ival;
      std::string* sval;
    };
    %token <str>    STRING "string"
    %token <ival>   INT    "integer"

  we now use:

    %token <std::string>    STRING "string"
    %token <int>            INT    "integer"

  and use genuine objects, instead of pointers to objects.  Change the
  scanner accordingly.

* Moved to using Automake 1.11's silent-rules

  By default, running "make" no longer displays the (longish)
  compilation commands.  Rather, it displays:

    CXXLD  transform/libtransform.la
    CXX    astclone/tasks.o
    CXX    overload/tasks.o
    CXX    desugar/tasks.o
    CXX    inlining/tasks.o
    CXXLD  tc

  Errors and warnings are therefore much easier to see.  If you need a
  verbose run, use "make V=1".  See "Silent rules" in the Automake
  documentation for more.

* Avoid recursive Makefile.am's

  Since "Recursive Makefiles are considered harmful" (they hide
  dependencies, they hinder performances by preventing concurrent
  compilation in nested directories, they force Make to read large
  repetitive files instead of a larger but unique one), nested
  Makefiles have been replaced by "local.mk" files.  These are
  included by the parent Makefile, which therefore yield to a single
  Makefile in the end.



New in 1.29, 2010-01-15:

* Fix a bug in unique objects' pretty-printer

* More developer documentation on the distribution process



New in 1.28, 2010-01-11:

* Maintenance release

  Bug fixes, updates to catch up with modern tools, minor
  improvements, aesthetic changes.

  The repository has also been converted to Git.



New in 1.27, 2009-02-27:

* Support for the Boehm-Demers-Weiser Garbage Collector on IA-32

  On IA-32, option `--garbage-collection' generates code relying on
  the Boehm-Demers-Weiser garbage collector for memory management
  (see http://www.hpl.hp.com/personal/Hans_Boehm/gc/).  Such code is
  to be linked against the garbage collector's library
  (gcc -lgc out.s).



New in 1.26, 2009-01-16:

* Tiger Interpreter in C++

  In addition to the TCSH-based Tiger Interpreter in Python, an
  interpreter written in C++ is available.  It uses either HAVM, the
  MIPS back end (and Nolimips) or the IA-32 back end (and GCC).

* The Bistromatig

  The project features a large example of code written in Tiger, the
  Bistromatig, an arbitrary-radix infinite-precision calculator.



New in 1.25, 2008-05-19:

* All escape sequences in literal strings are compatible with the GNU Assembler



New in 1.24, 2008-03-10:

* No significant change.



New in 1.23, 2008-02-25:

* misc::unique<T, C>, a generalization of misc::symbol

* Use a new set of Autoconf macros for the Boost libraries by Benoît Sigoure

* Merge more code with Gostai's code base w.r.t. code generators



New in 1.22, 2007-12-10:

* Concrete-syntax run-time program transformations

  A new module, namely `transform', provides rewriting services to the
  compiler.  Rewrite rules are expressed using concrete syntax.  Most
  of the current services are directly exposed through the language,
  using the `rule' keyword.

* Factor some code using BOOST_FOREACH and boost::lexical_cast

* Miscellaneous renaming, mostly in lib/misc/.



New in 1.21, 2007-07-04:

* Object desugaring

  Object desugaring is working, though the implementation needs
  some refactoring.

* TWEASTs embedded in TWEASTs

  Allow a TWEAST to carry other TWEASTs as metavariables.  Such a
  structure is like a tree, which must be ``flattened'' before the
  parsing.  This feature is useful to build complex TWEASTs.  For
  instance, one can populate a TWEAST ``non linearly'' (reserving a
  slot for a TWEAST that will be filled later).



New in 1.20, 2007-06-12:

* Some more (little) work on object desugaring, with no user-visible changes



New in 1.19, 2007-06-06:

* First step towards object desugaring

  The option --object-desugar can translate some object constructs
  into plain Tiger.  Method calls and accesses to attributes are not
  handled yet, though.



New in 1.18, 2007-05-15:

* No significant change.



New in 1.17, 2007-04-27:

* Improve the type-checking of types and class definitions.

  object::TypeChecker now allows the use of every type defined in a
  block of types from any location of this block (for instance, create
  an object of a class defined later, in the same block). The
  invariance of methods is checked.



New in 1.16, 2007-04-23:

* Object-aware type-checking.

  The visitor object::TypeChecker allows the computation of types on
  an AST with objects.

* Enforce STL coding style in lib/misc/.

* Emacs major mode for Leopard

  The distribution comes with an Emacs major mode for the Leopard
  language.  The Tiger mode has been updated as well to highlight
  Leopard's specific syntactic elements.



New in 1.15, 2007-04-06:

* Object-aware bindings.

  The visitor object::Binder allows the computation of bindings on an
  AST with objects.



New in 1.14, 2007-03-30:

* Two forms of class declarations.

  Two forms of syntax for class declarations are allowed.  The first
  one, known as the ``canonical'' one, is similar to other type
  declarations in Leopard (notably, array and records).  The second
  one, known as the ``alternative'' one (or ``Appel's'') was the
  original syntax, described in Appel's ``Modern Compiler
  Implementation'' books.



New in 1.13, 2007-03-29:

* No significant change.



New in 1.12, 2007-03-28:

* Introduce Leopard

  From now on, the Tiger project is known as the Leopard project.  This
  reflects the changes made to the language, which is also now called
  Leopard (see below).

* Add object-oriented syntactic constructions

  The language is extended with simple object-related constructions
  (class and method declarations, inheritance, object construction,
  method calls).  This extension of the Tiger language gives birth to
  a new dialect, called Leopard.

* Visitor renaming

  Visitors are renamed with ``actor'' names (e.g., Binder,
  TypeChecker, etc.).



New in 1.11, 2007-03-23:

* Tiger Interpreter

  A Tiger interpreter, written in Python and using TCSH, HAVM and
  Nolimips, is available.  It is installed along with the Tiger
  compiler when TCSH is built.



New in 1.10, 2006-09-04:

* Ruby Tcsh

  The Tiger Compiler Shell is available for the Ruby language, in
  addition to Python.



New in 1.9, 2006-06-21:

* Improve compatibility with NetBSD.


New in 1.8, 2006-06-15:

* Fix the distribution about the target module.


New in 1.7, 2006-05-31:

* Testing renamings and runtime errors

  The test suite is augmented to check the renaming pass and the
  runtime errors.


New in 1.6, 2006-05-03:

* Casts

  The keyword for casts is now "_cast" and no longer "cast".  "_cast"
  is valid only when syntactic extensions are enabled, and "cast" is
  no longer special in any circumstance.

* Tcsh

  The instruction selection has been improved so that the register
  allocation works again.


New in 1.5, 2006-04-13:

* Literal integers

  The semantics for literal is clarified, and the compiler matches
  this definition.


New in 1.4, 2006-04-05:

* Tcsh is functional again.



New in 1.3, 2006-03-31:

* No significant change.



New in 1.2, 2006-03-21:

* Tcsh is fixed (almost)

  The liveness analysis inside the register allocation is broken, but
  the other stages work fine in tcsh.

* The codegen module is merged into the target module

* Mac OS X 10.3 (Panther) compatibility

  Have the project distcheck on Panther (in particular, be nice to
  g++ 3.3 and work around missing utilities).



New in 1.1, 2006-03-17:

* Desugaring in concrete syntax within the parser

  The parser desugars some constructions (logic ``and'', logic ``or'',
  unary minus) in concrete syntax.

* misc::variant

  A simple wrapper around boost::variant is provided.  It only support
  two parameters, but it has conversion operators to these types.
  Hence, misc::variant can be assigned to one of its ``real'' type
  without using boost::get (an exception is thrown when there is
  a conversion to a bad type).

* libparse interface

  Thanks to variants, the interface of libparse is simpler.  The main
  parse function returns an ast_type -- a misc::variant holding either
  an ast::Exp* or a ast::DecsList*



New in 1.0, 2006-03-10:

* Desugaring of the implicit Main function

  When the user types in

      <body>

  as an input program, this is desugared as

    primitive print (string : string)
    ...
    function _main () = (<body>; ())

* Overload and desugar

  Formerly, desugar::desugar used to call bind::bind and
  type::types_check after it cloned the AST and removed the syntactic
  sugar.  It was thus impossible to go further in the compiler chain
  with OverTiger programs, since the bindings computation and the
  type-checking triggered errors on programs with overloaded
  functions.

  The task system now allows the user to desugar a program with
  overloaded functions and to proceed to the translation and the next
  steps, thanks to a new task, overfun-desugar.  The translation no
  longer depends on desugar, but on a disjunctive task,
  desugar-default.

* Dynamic array bound checking and BoundCheckingVisitor

  The desugar step can perform a new program transformation that add
  checks on the bounds of an array subscript at runtime, when reading
  from (de-referencing) or writing to (assignment) the cell of an
  array.

  When a subscript is out of bounds, an error message is written on
  the standard error output and the program exits with error code 120.

  This transformation is done by a new visitor, BoundCheckingVisitor,
  and triggered by the --bound-checks-add and --overfun-bound-checks-add
  options.

* TigerInput and parser metavariables

  Rather than using plain strings, chunks of concrete syntax are
  stored in a dedicated container, TigerInput.

  Program transformations from the desugar module using concrete
  syntax can save some time thanks to metavariables.  A metavariable
  is a named abstract syntax subtree stored in an instance of
  TigerInput.  Formerly, to use an AST node within a piece of concrete
  syntax, one had to pretty-print this node and re-parse it.  Now, the
  parser can accept nodes as actual subtrees, and ``re-attach'' them
  at the right place in the produced AST.

* TigerParser

  The interface of TigerParser is refactored and uses template `parse'
  methods.

* Casts

  The extended Tiger language supports casts.  This feature is not
  meant to be used in program written by humans, but by the compiler
  within program transformations.  For instance, BoundCheckingVisitor
  uses it to simulate generic arrays in the _check_bounds builtin.

* Conversion to Boost's shared_ptr

  The implementation of misc::ref uses boost::shared_ptr.

* GLR Parser

  tc uses a GLR Parser instead of the previous LALR(1) parser.  Bison
  2.2 is required to generate this parser.

* Renaming

  As soon as the bindings are computed, every identifier can be
  renamed with a unique name thanks to RenameVisitor.

  For instance, the renaming facility is used to turn a Tiger program
  with overloaded functions into a program with no overloaded
  functions.  This simplifies post-type-checking tasks such as
  desugaring or inlining.

* Inlining

  The compiler supports the inline expansion of functions as a program
  transformation.  Identifiers must have been renamed to unique names to
  avoid name capture (RenameVisitor); then the bodies of non recursive
  user functions are expanded (InlineVisitor); finally, unused
  functions are optionally removed (PruneVisitor).

* Containers refactoring

  Syntactic sugar for misc::Map is refactored and misc::Endomap is a
  renaming mapping defaulting to identity.

  misc::ScopedMap is a generalization of the previous symbol::Table,
  used in InliningVisitor.  The former is used to refactor the latter.

  Symbols are no longer constructed with a `create' class (static)
  member; the constructor is used instead, which is much more natural.
  An automatic conversion to `const std::string&' is introduced.

* CppGen

  This module has been in a broken state for a long time, and is
  removed from the project.

* IA32 back-end

  The IA32 back-end has been rewritten and uses MonoBURG to generate
  its code generator (as does the Mips back-end).

* Runtime errors

  The runtime errors are reported on the standard error ouput.
  tc-check is aware of this new convention, and checks the standard
  error ouput messages too.

* TC-1 distribution

  The distribution machinery can now generate valid teacher tarballs.



New in 0.92, 2005-06-27:

* Use MonoBURG's named subtrees

  Since MonoBURG 1.0.2, subtrees in the right-hand side of a rule can
  be named so that the user can refer to them in the corresponding
  action block.  The MIPS code generator uses this feature to simplify
  its actions.



New in 0.91, 2005-06-20:

* Conversion of graphs to Boost Graphs

  Graphs (CallGraph, ParentGraph, InterferenceGraph, FlowGraph,
  Liveness) are now implemented with the Boost Graph Library (BGL).
  The graph::Graph abstraction inherits from boost::adjacency_list,
  and all its subclasses handle graphs à la Boost.

* First attempts in MIPS code generator refactoring

  The grammar of the code emitter is smaller, thanks to MonoBURG's
  multiple rules feature.



New in 0.90, 2005-06-14:

* Task name normalization

  Tasks can be named like-this or like_this, but their real names only
  use dashes (foo_bar is just an alias for foo-bar).

* Computing cycles executed in Nolimips

  Tc-check's --profile option computes cycles of execution on Nolimips
  tests (thanks to its --profile option).

* misc::list

  The temp::List class, used to store temps and labels, becomes a more
  general container, misc::list.

* Better integration of MonoBURG

  The build system is more robust w.r.t MonoBURG.



New in 0.89, 2005-06-07:

* Generation of the code generator

  The code generator for Mips is now generated, thanks to MonoBURG.
  Grammar files (src/codegen/mips/*.brg) describe the tree rewriting
  patterns used in the translation from LIR (expressed in the Tree
  language) to Assem.

  An extended version of MonoBURG is required to produce this Mips
  code generator.

* Argument passing registers

  Their number can now be bounded using --argument=LIMIT.

* Raw desugaring

  To ease the development of DesugarVisitor, the desugar module
  provides a new task, raw-desugar, which performs just desugaring,
  without recomputing the bindings nor checking the types of the AST.
  Thus, a desugared tree which has bind- or type-related errors can
  still be pretty-printed for debugging purpose.

* Profiling in tc-check

  Tc-check supports a --profile option which reports the number of
  cycles of execution of the tested compiler.


New in 0.88, 2005-05-11:

* Desugaring before translating

  configure supports the option --enable-desugar that makes the task
  hir-compute depend on the task desugar, rather than just type.

* temp::Temp and temp::Label use boost::variant

  temp::Identifier are implemented using boost::variant instead of
  inclusion polymorphism.  Factories are no longer needed to build and
  manage these objects.

  The path to the headers of the Boost C++ Libraries can be given at
  configuration time using the option --with-boost.

* Symbols

  Due to the new implementation of temp::Identifier, symbols need to
  be assignable.  Thus symbol::Symbol no longer carries a reference to
  the string representation of a symbol, but a pointer.

* Timers

  Module objects (in liveness and regalloc) have their own timers, and
  tasks merge them to the global timer.


New in 0.87, 2005-04-26:

* TempMap

  TempMap are independent of Temp, they have moved to misc/.

* Driver options and tasks

  Catch up with the TLRM: -B/--bindings-display does not imply
  -b/--bind; -O is a shortcut for --overfun-types-compute.

  New option: --no-prelude (same as --prelude="").

* Symbols and strings

  A symbol::Symbol can be compared to a std::string directly, without
  Symbol::create().

* Tcsh and studentize

  Tcsh files are no longer stripped at dist time by
  stagize/studentize.  Python's introspection mechanisms are used
  instead to check tc's available modules.

* Astclone and desugar are delivered

  These modules are now part of TC-4, and are shipped in student
  tarballs.


New in 0.86, 2005-04-14:

* Binding of formals

  The formals are bound by the BindVisitor.  Binding record fields
  remains a task for the TypeVisitor.


New in 0.85, 2005-04-14:

* Builtin prelude

  To make tc self contained, the TigerParser now includes a hard copy
  of the standard prelude.

* Type checking options

  The disjunctive option --types-check-default is now -T/--type.
  Former -T/--types-check is now --types-compute.


New in 0.84, 2005-04-08:

* String parsing

  TigerParser::parse_string allows to parse a string instead of a
  file.

* Concrete syntax desugaring

  Early experiments have started.

* Error handlers

  They now also support member manipulator.  This is the first use of
  member function pointers in the Tiger Project.


New in 0.83, 2005-04-01:

* Visitors are functors

  The visitors now really have a top level operator() for Ast, and
  derive from unary_function.  This also simplifies/clarifies the
  calling conventions.

* Error handling

  The former global exit_status and free functions working on it are
  replaced by the Error class, implementing error handlers.  Not only
  this is better OO programming, but this also improves the pureness
  of the library: they no longer make side effects on cerr and
  exit_status, they have there own error handler into which error are
  logs, and the top level retrieves these errors, and merge them
  within the top level error handler.

  More specifically, instead of writing

     if (!yyin)
       {
         std::cerr
           << program_name
           << ": cannot open `" << name << "': "
           << strerror (errno) << std::endl;
         misc::exit_set (misc::exit_failure);
         misc::exit_on_error ();
       }

  now write

    if (!yyin)
      error << misc::Error::failure
            << program_name << ": cannot open `" << name << "': "
            << strerror (errno) << std::endl;
    error.exit_on_error ();

  or even

     if (!yyin)
       error << misc::Error::failure
             << program_name << ": cannot open `" << name << "': "
             << strerror (errno) << std::endl
             << exit;

  where error is your local error handler.

* The scanner is purer

  The TigerParser is now passed to yylex.  The static variables from
  the scanner and its free functions are now members of the
  TigerParser.

* Overloaded Tiger

  Support for overloaded Tiger is back, using overload aware
  subclasses from the BindVisitor and the TypeVisitor.


New in 0.82, 2005-03-22:

* AST file names

  The file names in the AST follow the coding style: var-dec.hh
  instead of vardec.hh, etc.

* Function overloading

  A visitor computing the bindings of OverTiger programs has been set
  up.  This OverfunBindVisitor does the same job as BindVisitor, but
  doesn't compute function's bindings, since some type-checking is
  needed to resolve function calls.  These function's bindings are now
  handled by OverfunTypeVisitor, which has been repaired (it uses the
  same interface as the TypeVisitor).


New in 0.81, 2005-03-16:

* Boolean

  Boolean operators & and | now return only 1 or 0.

* Tasks

  It is now possible to define a task which requires only one of its
  dependencies, allowing alternatives. This is done thanks to a new
  task, DisjunctiveTask.

* Symbols

  Symbols are now handled by a factory.  Before one unique of the
  string value was stored, now one Symbol suffice.  Many
  allocations/deallocations are saved.

* Swig 1.3.24

  Dependency tracking is enabled.  We no longer use the obsoleted
  -runtime.

* misc::separator

  This auxiliary function provides sugar to print separated lists.
  For convenience, it dereferences list of pointers.  It replaces the
  functions print_with_separator.

* Parsing module

  The parsing module has been completely overhauled.  The handling of
  "import" directive is now performed when found: the scanner and
  parser are recursively called.  The new class TigerParser
  coordinates the scanner and parser, and caries the results.  The
  debatable "using namespace ast" has been removed.

* tcsh

  Libtool is now used to compile a top level dynamic library, libtc,
  containing all the modules.  The tc executable is linked statically
  against this dynamic library on platforms that support it.  This
  considerably simplifies tcsh which only needs to be linked against
  the dynamic libtc.

  More natural translations are provided, especially thanks to __str__
  methods.

  The Python bindings are moved in tcsh/python.

* break checks

  The BindVisitor now also binds the break's to their loop construct.
  Hence incorrect breaks now trigger a bind-error instead of a
  type-error.

* Clone Visitor

  This new visitor makes a deep copy of an AST.  It also serves as a
  basis for the construction of the following visitor.

* Desugar Visitor

  A new visitor, removing syntactic sugar from an AST while cloning it.
  It currently handles the following sugar:

  - String operators (<, <=, >, >=, =, !=)
    Using strcmp and streq (new primitives), change these operators
    into integer operators:

        ... a < b ...

    where a and b are strings

        ... strcmp (a, b) < 0 ...

    and so forth.

  - ForExp
    For's can be desugared as while's, as the former is a particular
    case of the latter.


New in 0.80, 2004-11-10:

* Swig files

  The handling of Swig files has changed again: they are no longer
  shipped, hence Swig is required to build tcsh.  This release was
  tested with Swig 1.3.22.

  This change was prompted by the fact that some of tc's sources are
  generated (version.cc).  Since Swig input is tc's sources, even if
  one shipped Swig output files, they had a missing dependency
  (version.cc) which `make' tried to satisfy.  Hence Swig was
  relaunched, trying to overwrite shipped files.

* Call and parent graphs

  The call graph (what functions are called by a function), and the
  parent graph (what functions are nested in another) have moved into
  the callgraph module.

* Type Checking

  Type checking is vastly simplified using a better set of auxiliary
  functions.  The handling of types themselves, especially
  comparisons, is also simplified.  For loop indexes processing is
  simplified using a misc::set.


New in 0.79, 2004-10-26:

* Typable

  The ``typable'' nodes of the AST inherit from a new abstract base
  class, ast::Typable, which holds a pointer to the type (type::Type)
  of the node.

* TypeVisitor and type labelling

  Typable AST nodes are labelled with their type by the TypeVisitor,
  as well as type declaration holders (ast::Dec nodes). Type
  environments have become useless, as type definitions are retrieved
  directly from the AST nodes using their type labels and their
  definition sites (set by the BindVisitor).

* Function overloading

  Since the new TypeVisitor no longer uses environments to store the
  type information, the old interface used by the OverfunTypeVisitor
  is broken.  Hence, function overloading has been disabled, waiting
  for a future repair.

* AST display

  The display of the AST has changed: the options --bindings-display,
  --escapes-display etc. no longer display the AST, rather they enable
  features from -A.  Hence, when one used to run -E, now run -EA.

* Type and Translate Visitors

  They are vastly simplified thanks to (i) the BindVisitor, and (ii)
  the type annotations.  The so-called "Entries" and "Env" have
  disappeared, replaced by much simpler std::maps.  Kinds have
  disappeared: type annotations suffice.


New in 0.78, 2004-10-13:

* Prelude

  Full prelude support is implemented, and activated.  New options
  --library-append and --library-prepend, and new envvar,
  TC_PKGDATADIR.

* Memory leaks

  Many leaks are solved.  There remains memory that STL does not free
  when there are many xallocs.

* PrintVisitor

  The PrintVisitor is revamped and uses operator<< internally, instead
  of accept.  This was done thanks to misc::xalloc to pass flags to the
  PrintVisitor.


New in 0.77, 2004-10-06:

* Coding Style

  The coding style for type is finally defined, and the code was
  normalized.

* Streams extentions

  misc::xalloc provides a convenient wrappers around xalloc and pword.

* Prelude

  Preliminary support for a prelude is implemented:

  - import "FILE"
    Inclusion a library file from a Tiger source file is enabled.
    The syntax of the FILE is

       let
         DECS
       end

    To support the two different syntaxes with a single parser, we use
    a "seed": an initial fake token that branches the start symbol on
    one of the two "sub-grammars" (declaration file, or source file).

  - primitive
    The new keyword "primitive", similar to "function" allows for the
    introduction of function signatures, without bodies.

  - --prelude=PRELUDE
    The definitions included in the file PRELUDE are automatically put
    "around" the source file.  Technically, when PRELUDE is not null,
    it is equivalent to parsing

       let
         import "PRELUDE"
       in
         FILE
       end

    where FILE is the source file to compile.

  Support for a library search path will soon be included.  This will
  enable the definition of a standard Tiger prelude defining (via
  "primitive") the Tiger primitives (builtins).

* LetExp

  Second change in the handling of declarations: "let" are no longer
  de-sugared into homogeneous nested "let"s.  Rather, a "let" is an
  heterogeneous list of homogeneous lists of declarations.

* FieldInit

  Replaces the FieldExp, which no longer derives from Exp.

* Default Visitor

  The machinery to select a const or non const iterator is fixed, and
  spread on the whole Visitor hierarchy.  The selection of const/non
  const Visitor is also cleaner, using a template template argument.

  Also, the former Defaultvisitor class template is renamed
  GenDefaultvisitor for consistency with the Visitor hierarchy itself.
  DefaultVisitor and DefaultConstVisitor are now classes.

* Bind Visitor

  This new visitor is in charge of binding names, i.e., linking every
  identifier use (function call, type name, variable name) to its
  definition.  As a result, no other Visitor now uses a scoped symbol
  table: using the address of the definition site is enough (it plays
  the role of a unique global name, free from scopes).

* Escapable

  Multiple inheritance is used to factor the possibility of being
  escaped.

* Cpu

  They own a TempMap that contains the needed magic to change fp into
  $fp etc.  In addition, MipsCpu becomes (more or less) a NolimipsCpu
  that also knows how to map t4 into $x4.  This allows to transform
  local hacks into a general feature.

* Levels

  Andrew W. Appel suggests the use of two system levels: the "outer"
  level, the one containing the primitives and the main function, and
  of course the "main" level, that of the "main" function.  We now
  only have a single level, that of "main".

* Parser adjustments

  %destructor and %printer are used: the parser is more verbose, and
  no longer leaks.

* PrintVisitor

  It nows uses misc::indent instead of local code.

New in 0.76, 2004-07-07:

* New option: --target-default

  This task was introduced to work around a design issue:
  interdependent global variables initialization.  Some architectures
  failed at launching because of this issue.


New in 0.75, 2004-07-06:

* Debian package

  A package for Debian GNU/Linux can be automatically generated using
  `make deb'. The package version is deduced from the version of TC and
  the repository revision.

* Interference Graph

  The move related nodes are now reported.

* Graph output

  Empty labels are no longer produced.  This improves rendering with,
  e.g., OmniGrafle.


New in 0.74, 2004-06-25:

* Identifiers Mapping

  The old class TempMap was recycled into Map <Identifier>.  The
  Identifier<> class template is now equipped with means to
  store/retrieve one such Map on a stream, using xalloc and pword.  It
  also now enjoys a magical operator<< which uses such a Map to format
  Identifiers during the output.

* Code Pessimization

  Some code pessimization was identified and fixed.

* Callee/caller save registers

  0 now stands for 0 such registers, whereas before it meant "the
  default number".  Use 99 or whatever to revert.

* Testing framework

  tc-check now distinguishes unsupported features from broken
  implementations.

  Test files are properly shipped, thereby freeing the user from the
  formerly mandatory available... tc compiler.

* Stream modifiers

  misc/escape and misc/indent now properly save/restore the state of
  the stream.

* Assem

  The printing is assem instructions is simplified thanks to using
  TempMap in ostream, together with the debugging flag.


New in 0.73, 2004-06-10:

* Fixes

  Distcheck, now properly works.  Errors in comments/documentation
  were fixed.

* Memory leaks

  Memory leaks from T6 to T9 were handled and removed.

* Targets: Nolimips

  Mipsy is now replaced with Nolimips.

* Targets: Overhaul

  The overhaul of the target modules has started to let code generator
  enjoys the specific features of the target processor.  In a
  forthcoming version, Nolimips will considered as an architecture,
  and there will be TempMap derived classes to cope with architecture
  register name specificities.

New in 0.72, 2004-05-10:

* Fragments and Visitors.

  Tree and Assem fragments now support Visitors to provide a cleaner
  alternative to dynamic_cast.  Assem Visitors are clarified:
  MapVisitor is removed, and Visitor is extended (to parallel with
  a GenDefaultVisitor for the ast module).

* Inner classes

  Function Inner classes are now demonstrated to call single use
  Fragment visitors.

* Less dependencies.

  More fwd.hh files were introduced.


New in 0.71, 2004-04-30:

* Tasks.

  They are finally moved into their own namespace, task.
  Printing functions are standardized.

* Identifier redesign.

  The implementation of temp::Identifier was simplified by merging the
  parameter and the parameter's traits.  As a result, the Identifier,
  TaggedIdentifier, and Factory class templates are now parameterized
  by a class template (the traits).

* Compilation warning flags.

  They are no longer used to compile SWIG output files.

* Less dependencies.

  More fwd.hh files were introduced.  Newly introduced *.hcc files
  help reducing compilation dependencies.

* Memory leaks.

  Intermediate code leaks were fixed.  The test suite now checks for
  memory leaks at every stage of the compiler (except when recovering
  from parse errors).

* More unit tests.

  More independent library files are checked, and existing tests have
  been improved, in order to help independent development of these
  auxiliary (but fundamental) files.

* Indenting ostream.

  (Intermediate) fragments now use misc::indent.

* Wrapping sliced tarballs.

  Studentize check that its input has balanced student marks:
  it should now be impossible to produce student tarballs with
  missing files.

  Stagize is smarter, and allows to distcheck sliced tarballs.

* Tree code.

  The class tree::Node was renamed as tree::Tree which is more
  meaningful, since that's how this intermediate representation is
  called (Tree code).

  The fragments are finally part of tree::, instead of translate:: as
  Andrew Appel suggests.  The clarity of this layout seems to
  outweigh the benefits of sticking to Appel's design.

* Independence from target.

  The target module is not needed in T5: the frame module is truly
  independent from the name of the real target fp and rv register
  names.  There remains a dependency on the word size.  It is
  considered to always be 4 bytes.


New in 0.70, 2004-04-05:

* Memory is properly reclaimed when reporting an error.
  This required getting rid of all `std::exit' invocations, since they
  exit immediately, without stack unwinding.  The functions from
  common.cc that used to call `std::exit' are replaced by the functions
  from misc/fail.* that throw exceptions.

  Then, the driver is changed to catch exceptions.  Without `catch'
  clauses, the standard specifies that performing or not performing
  stack unwinding is undefined.

  Note that *there must not be any invocation of `exit'*, as it skips
  stack unwinding, i.e., it skips memory reclaiming.  Every explicit
  call to `exit' must be replaced by a `throw', either direct, or via
  a call to `error_on_exit'.

* Wider use of misc::indent.
  Indented output is extremely convenient if most routines use it.
  Its use was generalized in symbol tables, type checking, and
  intermediate code.

* tc-check.

  - Recent changes in tc-check caused it to be insensitive to some
    failures, this is fixed.  Now, it is also checking memory leaks in
    type checking (including when there are type errors).

  - Diffs are less verbose, in order to keep some privacy over the
    test suite.

  - Standard error output is checked when auditing escape computation.

* Translation to intermediate code is cleaned up.

* `if then' is finally implemented as syntactic sugar.

New in 0.69, 2004-03-26:

* ios::xalloc is used to control the depth of record type pretty printing.

* New indentation relative functions added.
  Two new files: src/misc/indent.hh and src/misc/indent.cc.

* No memory leaks in T4.

* More traits available.
  misc::traits provides some information about types.

* The Type module was revised.
  Many simplifications are introduced such as:

  - use of the method `type' as a sort of `accept' with a return
    value.

  - use of the overloaded template methods `error' to factor error
    reporting and recovery.

* Similarly in the Translate and Overload modules.

* Tcsh is repaired.
  Tcsh was broken in the latest releases.  It is up and running
  again.


New in 0.68, 2004-03-19:

* The function misc::for_each allows for pseudo functional programming
  using function objects.  For instance, instead of

    for (list_t::const_iterator i = l.begin (); i != l.end (); ++i)
      f (*i);

  one may write

    misc::for_each (l, f);

  The difference with std::for_each is that `f' is not copied, it is
  passed by reference, so it is not sliced.

* The DefaultVisitor has a template method for arbitrary pointer
  types, so that

     i->accept (visitor);

  can now be replaced with

     visitor (*i);

  Combined with misc::for_each, one may now replace

    for (list_t::const_iterator i = l.begin (); i != l.end (); ++i)
      i->accept (v);

  with

    misc::for_each (l, v);

* The attributes `name' from FunctionDec, VarDec, and TypeDec are now
  factored into a single attribute `name' in Dec.  As a result, more
  code can be factored (e.g., checking that a name is defined only
  once).

* The documentation is undergoing a full overhaul to be more
  effective.

* The configuration of Swig is softened:
  - --with-swig mandates Swig, i.e., if Swig is not available, it is a
    hard error.
  - without-swig disables it completely.
  - If not specified (or --with=swig=auto), Swig support is built if
    available.

* The files parse/location.hh and parse/position.hh are built if
  missing when building src/ast (which requires them).

* The file misc/select_const.hh provides support for const vs. non
  const iterators.  This is most useful in the DefaultVisitor
  template.


New in 0.67, 2004-03-03:

* The Singleton idiom used for Symbols is more robust to dependencies.
  That solves a portability problem on Mac OS X, where the module
  Target tried to create a Symbol before its class member `set_' was
  constructed.

* The AST module is cleaned up.
  - The outdated file src/ast/README is removed.
  - A trailing, unused, misleading definition of decs_type is removed.

* CppGen is somewhat repaired (23 passes over 128 tests as compared
  to... 0), but a lot remains to be done.

* The argp library is updated to its latest release, to improve
  Mac OS X compatibility.

* Many Doxygen warnings are removed.

New in 0.66, 2004-02-18:
* All the visitors now use `operator()' instead of `visit' as method
  name.  This is more compliant with other C++ programming groups, such
  as Boost (e.g., http://www.boost.org/libs/graph/doc/visitor_concepts.html).

New in 0.65, 2004-02-17:
* Declarations in "let" are reduced to a single kind (function,
  type, or variable).  Only one variable can be introduced at a time.
  Mixed "let" are de-sugared as nested "let"s.
* Constructors of AST nodes are moved in the implementation file,
  as for the destructors.
* Hooks for escapes, kinds etc. are no longer delivered during T2.

New in 0.64, 2004-02-06:
* Symbols are sorted lexicographically.
* temp::Temp and Label share the same implementation, based upon
  (natural) dynamic polymorphism instead of an ad hoc implementation.
* Traits are (finally) demonstrated: they help implement the common
  framework for temp::Temp and Label.
* "print" functions always return an ostream.
* tcsh: The Tiger Compiler Shell...
  Swig is used to import the Tiger libraries into a Python shell.
  Thanks to Nicolas Burrus.
* The compilation of Bison files is safer and lazy.
* Autoconf 2.58.
* Automake 1.8.2.
* Gzip archives are no longer built by default.
* The Tiger Emacs mode is now shipped (config/tiger.el).

New in 0.63, 2003-11-17:
* The test suite is no longer a sub package, it is a regular sub
  directory.
* Fix tc-check file location.
* Fix escape checks.
* Automake 1.7.9.

New in 0.62, 2003-10-29:
* Tree memory management is handled by reference counting.
* --callee-save and --caller-save allow to address fake limited
  architectures.
* BooleanTasks and IntTasks.
* foo/foo-tasks.* are renamed as foo/tasks.*.
* Compute escaping static link.
* Compute and dump call and parent graphs.
* More code moved out of the headers.
* Use NameTy instead of Symbol for RecordExp, ArrayExp, ArrayTy,
  Field.
* The transformation from HIR to LIR is performed by objects
  instead of stand-alone functions.
* The AST is rewritten to use pointers instead of reference: "*new"
  has disappeared from the parser.
* Rebox is provided to build nice boxed comments.
* Temp now uses a factory, which is also in charge of memory deallocation.
* Coding style is standardized.  For instance private members are
  "foo_"-like, no longer "_foo".
* temp::Label and temp::Temp are factored into the class template
  temp::Identifier.
* Heavy use of forward declarations as compiler firewalls.
* The ast is generated.
* Automake 1.7.8, Havm 0.21 are required.

New in 0.61, 2003-08-14:
* The Cpu class no longer includes a "color register" category.
* Register allocation is improved.
* The runtime functions are fixed and tested for failures.
* Calls to the "exit" syscall set the status.
* Ia32 back-end is improved, but still fails on some cases.

New in 0.60, 2003-07-22:
* List of temporaries are sorted.  This should help regression tests.
* misc::set have properly working version of set_union, operator+ etc.
* --target-display describes the current target.
* --inst-debug enables verbose output of the instructions, i.e.,
  with the "use", "def", and "jump" lists.
* The register allocator was rewritten from scratch.  The results
  are much better, and the code is much closer to Appel's.

New in 0.59, 2003-07-07:
* src/codegen/tiger-runtime presents the C source of the Tiger
  runtime.
* The MIPS getchar implementation is fixed.
* Mipsy support (-Y/--mipsy-display).
* The C++ generation is now checked.

New in 0.58, 2003-06-26:
* Compiler warnings are enabled during the build.
* Lots of these warnings are removed.
* Using Bison 1.875c is recommended (to neutralize some warnings).
* Function overload added.
* This file.
* Count of removed lines in README.
* Refixed escape checks.
* Register allocation speed up.
* No longer wastes frame slots when spilling.

New in 0.57, 2003-05-23:
* Escape checks fixed.
* Handling of for loop upper bounds fixed.
* Error messages normalized.
* Support for --liveness/-V
* Ix is enabled by default, use --hir-naive to disable.
* tc-check works on NetBSD as is.

New in 0.56, 2003-05-12:
* --task-graph.
* Translate, canon and codegen clean up.

New in 0.55, 2003-04-28:
* Simplified declaration of tasks.
* Extended tc-check, with tarball time stamp support.
* tc-check supports a configuration file.
* --target-ia32.
* misc/deref.hh provides a magic means to output the contents of
  containers of pointers.
* Complete revamping of the back end.

FIXME: Continue the extraction from the ChangeLog.
Be careful that "Bump to 0.54" means "Release 0.53".


New in 0.54, 2003-04-08:

New in 0.52, 2003-03-19:

New in 0.50, 2003-01-29:

New in 0.20, 2003-01-10:

New in 0.18, 2002-07-11:

New in 0.17, 2002-05-31:

New in 0.15, 2002-05-18:

New in 0.14, 2002-03-05:

New in 0.13, 2002-02-14:

New in 0.12, 2001-09-13:

New in 0.11, 2001-09-10:

New in 0.8, 2001-07-05:

New in 0.7, 2001-06-23:

New in 0.5, 2001-06-08:

Local Variables:
coding: utf-8
mode: outline
ispell-local-dictionary: "american"
End: