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:
|