summaryrefslogtreecommitdiffstats
path: root/RELNOTES
blob: a32636028504a58cc5f2187c3fbc7b519b9b717a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327
9328
9329
9330
9331
9332
9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
9343
9344
9345
9346
9347
9348
9349
9350
9351
9352
9353
9354
9355
9356
9357
9358
9359
9360
9361
9362
9363
9364
9365
9366
9367
9368
9369
9370
9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381
9382
9383
9384
9385
9386
9387
9388
9389
9390
9391
9392
9393
9394
9395
9396
9397
9398
9399
9400
9401
9402
9403
9404
9405
9406
9407
9408
9409
9410
9411
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
9424
9425
9426
9427
9428
9429
9430
9431
9432
9433
9434
9435
9436
9437
9438
9439
9440
9441
9442
9443
9444
9445
9446
9447
9448
9449
9450
9451
9452
9453
9454
9455
9456
9457
9458
9459
9460
9461
9462
9463
9464
9465
9466
9467
9468
9469
9470
9471
9472
9473
9474
9475
9476
9477
9478
9479
9480
9481
9482
9483
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9501
9502
9503
9504
9505
9506
9507
9508
9509
9510
9511
9512
9513
9514
9515
9516
9517
9518
9519
9520
9521
9522
9523
9524
9525
9526
9527
9528
9529
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
9542
9543
9544
9545
9546
9547
9548
9549
9550
9551
9552
9553
9554
9555
9556
9557
9558
9559
9560
9561
9562
9563
9564
9565
9566
9567
9568
9569
9570
9571
9572
9573
9574
9575
9576
9577
9578
9579
9580
9581
9582
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592
9593
9594
9595
9596
9597
9598
9599
9600
9601
9602
9603
9604
9605
9606
9607
9608
9609
9610
9611
9612
9613
9614
9615
9616
9617
9618
9619
9620
9621
9622
9623
9624
9625
9626
9627
9628
9629
9630
9631
9632
9633
9634
9635
9636
9637
9638
9639
9640
9641
9642
9643
9644
9645
9646
9647
9648
9649
9650
9651
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
9662
9663
9664
9665
9666
9667
9668
9669
9670
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9691
9692
9693
9694
9695
9696
9697
9698
9699
9700
9701
9702
9703
9704
9705
9706
9707
9708
9709
9710
9711
9712
9713
9714
9715
9716
9717
9718
9719
9720
9721
9722
9723
9724
9725
9726
9727
9728
9729
9730
9731
9732
9733
9734
9735
9736
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
9872
9873
9874
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
9898
9899
9900
9901
9902
9903
9904
9905
9906
9907
9908
9909
9910
9911
9912
9913
9914
9915
9916
9917
9918
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
9934
9935
9936
9937
9938
9939
9940
9941
9942
9943
9944
9945
9946
9947
9948
9949
9950
9951
9952
9953
9954
9955
9956
9957
9958
9959
9960
9961
9962
9963
9964
9965
9966
9967
9968
9969
9970
9971
9972
9973
9974
9975
9976
9977
9978
9979
9980
9981
9982
9983
9984
9985
9986
9987
9988
9989
9990
9991
9992
9993
9994
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
10011
10012
10013
10014
10015
10016
10017
10018
10019
10020
10021
10022
10023
10024
10025
10026
10027
10028
10029
10030
10031
10032
10033
10034
10035
10036
10037
10038
10039
10040
10041
10042
10043
10044
10045
10046
10047
10048
10049
10050
10051
10052
10053
10054
10055
10056
10057
10058
10059
10060
10061
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
10091
10092
10093
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
10116
10117
10118
10119
10120
10121
10122
10123
10124
10125
10126
10127
10128
10129
10130
10131
10132
10133
10134
10135
10136
10137
10138
10139
10140
10141
10142
10143
10144
10145
10146
10147
10148
10149
10150
10151
10152
10153
10154
10155
10156
10157
10158
10159
10160
10161
10162
10163
10164
10165
10166
10167
10168
10169
10170
10171
10172
10173
10174
10175
10176
10177
10178
10179
10180
10181
10182
10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
10198
10199
10200
10201
10202
10203
10204
10205
10206
10207
10208
10209
10210
10211
10212
10213
10214
10215
10216
10217
10218
10219
10220
10221
10222
10223
10224
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
10236
10237
10238
10239
10240
10241
10242
10243
10244
10245
10246
10247
10248
10249
10250
10251
10252
10253
10254
10255
10256
10257
10258
10259
10260
10261
10262
10263
10264
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
10294
10295
10296
10297
10298
10299
10300
10301
10302
10303
10304
10305
10306
10307
10308
10309
10310
10311
10312
10313
10314
10315
10316
10317
10318
10319
10320
10321
10322
10323
10324
10325
10326
10327
10328
10329
10330
10331
10332
10333
10334
10335
10336
10337
10338
10339
10340
10341
10342
10343
10344
10345
10346
10347
10348
10349
10350
10351
10352
10353
10354
10355
10356
10357
10358
10359
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
10374
10375
10376
10377
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419
10420
10421
10422
10423
10424
10425
10426
10427
                                    TXR 293
                                   2023-12-28


  Features

  - load:
    - when a top-level load exits by returning from the load block, the block
      value now becomes termination status of process.

  - JSON:
    - now supports Lisp comments as an extension.

  - I/O:
    - New functions read-objects, file-get-objects, file-put-objects,
      file-append-objects.

  - Hash Tables:
    - New function hash-join, similar to hash-uni but usefully different.

  Bugs

  - TXR: bug in @{nil ...} variable match.
  - compiler:
    - compile-file can now handle top-level forms that
      perpetrate a non-local exit, without requiring compile-only
      around them.
    - optimizer now watches for exceptions during constant folding,
      similarly to how the front end does.
  - listener:
    - several bugs in auto compound expr mode fixed.
  - perm, rperm, comb, rcomb functions:
    - now support all sequence types, not only lists, vectors and strings.
    - comb was skipping combinations: defective function repaired.
  - glob:
    - suppress duplicates generated when multiple double
      star patterns are present (supported by the recent glob*).
    - fix memory leak that can happen on early exit due to error
      function performing a nonlocal control transfer.
  - sh-esc family of functions (recently introduced):
    - incorrect specifications overhauled.
  - (rcons ...) print/read consistency issue fixed.
  - Cygwin: termination status returned by (sh ...) and (run ...)
    now has the correct integer value, or nil for abnormal exit,
    like on Linux.



                                    TXR 292
                                   2023-11-20


  Features

  - Build:
    - speed up compilation of stdlib with optimal compilation
      order of several key files.
    - Revised confusing build instructions in ./configure script.
    - Makefile improvements:
      - cruft removed; dependency generation simplified.
      - mkdir invocations factored out to rule.
      - DELETE_ON_ERROR: used now.

  - Streams:
    - A new protocol between the close-stream function and its
      lower-level implementation allows delegate streams to
      implement a reference counting discipline for closing.
    - open-file now supports a "T" mode for O_TMPFILE (on Linux,
      or anywhere else O_TMPFILE is supported).

  - Sequences:
    - New functions nested-vec and nested-vec-of for easily
      constructing (simulated) multi-dimensional arrays.
    - New mref accessor for multi-dimensional access.
      - also has a side job calling curried functions.
    - New csort-group function:
      - Like sort-group, but uses csort instead of sort for key caching.
    - New hist-sort function: make histogram of sequence, and sort
      by descending frequency.
    - New length-list-< function  for testing whether a list is
      shorter than a given length without traversing it beyond
      that length.
    - New length-< function for testing any sequence's length
      against a value without traversing/forcing the sequence
      to calculate its length.
    - ref now documented as accessor, not just function.
    - del operator now allowed on places that index into sequences
      implemented by structures:
      - requires both lambda and lambda-set methods.

  - Strings:
    - New str-esc function for generic character escaping.
    - New shell escaping functions: sh-esc, sh-esc-all, sh-esc-dq
      and sh-esc-sq.

  - Packages
    - New feature: local symbol renaming
      - Symbols can be imported under alternative names.
      - New use-sym-as function and :use-syms-as defpackage clause.
      - Better idea than nicknaming packages (package-local nicknames).

  - Functional library:
    - New: left-inserting pipeline operators: lflow, lopip, loand.
    - New: macros orf and lorf for condensing certain op syntax.
    - New: tap macro, for expressing side effects in pipelines while passing
      through the value.

  - Syntactic places:
    - New: ensure macro evaluates an expression and stores its value
      into a place, if that place's current value is nil.

  - Pattern matching:
    - some match-case instances are now transformed into casequal.

  - FFI:
    - Now provides a setjmp macro, longjmp function as well
      as a jmp-buf utility function that allocates a jmp-buf.
    - Now possible to interact with libraries that use longjmp
      for error aborts like libpng and such.

  - POSIX:
    - chdir function takes stream or file descriptor, which are
      handled via fchdir.
    - New glob* function to complement glob:
      - glob* supports the ** (double star) operator for recursing,
        via its own implementation, not relying on glob providing that.
      - glob* has its own implementation of brace expansion.
    - New rlink function which is like link, but resolves the target path
      if it denotes a symlink.

  - Listener:
    - *listener-sel-inclusive-p* is now default, since most terminals
      have block cursors by default.
    - New feature: auto compound expression mode lets you omit
      the parentheses.

  - Math:
    - The tofloat and toint functions are now generic via the
      user-defined arithmetic struct mechanism.

  - JSON:
    - Allow integer objects to be printed rather than insisting on
      numbers being floating-point.
    - Allow lists (including lazy lists) to print as [ ... ]
      rather than insisting on vectors.

  - Windows Installer:
    - Does not require admin privileges any more; will install for
      just the current user if the user isn't admin.

  - Documentation:
    - big change: new hashing scheme for navigation and doc lookup.
    - section titles now hashed in a more robust way that is resistant
      against most kinds of edits.
    - stdlib/doc-syms.tl file is now gone: one less thing to maintain.
    - Numerous fixes in manual.

  Bugs

  - Compiler:
    - numbers now externalized sanely in .tlo files:
      - compile-file makes sure base 10 is used for integers
      - floating point numbers written with sufficient precision

  - Loading:
    - load-args-process bugfix: :compile action must load.

  - Streams:
    - close-stream caches only successful result from underlying
      function.
    - a few close functions underneath close-stream were returning
      nil in the successful case.

  - OOP:
    - Fix segfault looking up special method after the static slots
      table of the type has been resized.

  - Pattern matching:
    - Missing autoloads for match-error and sys:match-pat-error,
      causing compiled files containing pattern matching not to load.

  - Awk macro:
    - prn returns nil

  - Search trees:
    - bug: tree-delete-specific-node not using key fun.

  - Lib:
    - Two bugs in flatten* function.
    - Bug in deletion of (ref ...) place: incorrect when object is list.

  - Crypt:
    - less strict error token detection for wider platform support.

  - Time:
    - time-utc and time-local methods must subtract gmtime, not add.
    - time-parse-utc and time-parse-local, likewise.

  - Build:
    - Misspelled PLATFORM_LDLIBS corrected.
    - Fix for _TIME_BITS being tied to _FILE_OFFSET_BITS
    - Address autoload circular dependency involving stdlib/error.tl
      that can fail builds under some library build orders.

  - Vim:
    - Fix lack of recognition for char escapes in quasilit.



                                    TXR 291
                                   2023-08-06


  Features

  - opip macro:
    - now supports binding variables which are visible
      to the rest of the chain.


  Bugs

  - symbol-function accessor: not supporting functions whose names are not
    symbols, like (meth ...)
    - Regression introduced in TXR 290.
  - compiler: invalid constant folding of load-time values.
    - Recent regression.
  - Pattern Language: in output-side @(repeat), inability to specify :vars
    together with :counter.
    - Regression dating back to March 2016.



                                    TXR 290
                                   2023-07-29


  Features

  - Compiler:
    - Deeper constant-folding optimizations, assisted
      by data flow information.

  - Data Integrity:
    - SHA-1 digest now provided; it is in wide use.

  - Lib:
    - group-by, group-reduce and unique functions refactored to use sequence
      iteration.

  - Math:
    - Numerous C99 math functions now exposed:
      - cbrt, erf, erfc, exp10, exp2, expm1, gamma, j0, j1, lgamma,
        log1p, logb, nearbyint, rint, significand, tgamma, y0, y1,
        copysign, drem, fdim, fmax, fmin, hypot, jn, ldexp, nextafter,
        remainder, scalb, scalbln, and yn
    - All of these can be user-defined in a custom arithmetic struct.

  - Environments
    - Internal representation of top-level environments is simplified,
      eliminating a level of indirection.
    - New functions for lexical introspection:
      - lexical-binding-kind, lexical-fun-binding-kind,
        lexical-symacro-p and lexical-macro-p.

  Bugs

  - hash: out-of-bounds access in hash-iter-peek function causing instability
    in hash iteration that depend on this function.
  - crypt function:
    - handle libxcrypt failure tokens properly, so that we treat them as an
      error instead of returnig them to the application.
  - md5: was totally broken on big endian.
  - VM: compiled functions were not picking up redefinitions of functions that
    they call, sticking with the old functions. This issue was uncovered during
    work on the new representation of top-level environments, which also
    happens to fix the problem.
  - pattern matching:
    - the above VM bug fix means that the double definition of
      sys:non-triv-pat-p in the pattern matching module is handled right;
      causing sys:transform-qquote to be expanded using the correct definition
      of the function, exposing an obscure issue with quasiquoted hash
      literals.
    - another bug: variable patterns like @var were not seeing lexical
      symbol macros, only global symbol macros, global variables and
      lexical variables.
  - environments: redefinition of symbol macros was found not to trigger cache
    invalidation in VM descriptors, causing compiled code to keep seeing
    the old definitions of the symbol.
  - lib: the del operator now works with index lists, which is the access
    notation like [obj '(1 2 4)] for picking out indices.
    As a result of this, there is a change in semantics in how the
    replace function handles index lists. If there are fewer replacement
    items than indices, then instead of stopping, the replace function
    deletes the specified indices. (Subject to -C option.)
  - paths: rel-path function was considering empty strings to be
    absolute paths, causing (rel-path "" "a") to be diagnosed as an
    invalid mixture of absolute and relative paths.
  - environments: bugfix in lexical-var-p and lexical-lisp1-binding.



                                    TXR 289
                                   2023-07-02


  Features

  - TXR Pattern Language:
    - New @(push) directive uses @(output) syntax to push lines
      back into input.

  - Pattern Matching:
    - New match-cond macro.

  - Lib:
    - New cached sorting functions, for situations when a fairly expensive
      keyfun is used for sorting.

  - Lisp:
    - eval takes macro environment.
    - integers and ranges are function-callable objects
      - provides succinct indexed access in functional expressions, using
        integers and ranges as higher-order functions.

  - Hash Tables:
    - Switched from chained hashing to open-addressing with linear probing.
    - New hash-map function: populate a hash with keys from a sequence, and
      values from a function over those keys.

  Bugs

  - hash tables: bug in initial hash mask calculation, caused zero bits,
    causing some chains not to be used, reducing efficiency.

  - gc bug in vector case of ssort function, causing crash.

  - equal: fix broken cases in equality substitution.

  - range objects were not treated as iterable in some situations,
    for no good reason: e.g. (take 13 "AA".."BB") didn't work,
    requiring (take 13 (list-seq "AA".."BB")) as a workaround.



                                    TXR 288
                                   2023-06-10


  Features

  - Lib:
    - New keep-keys-if, separate-keys functions.

  - Compiler:
    - New clean-file function for removing compiled file
      with name built-in path resolution strategy
      harmonizing with compile-file.
    - New compiler option log-level.
      - level 1: info message when file is compiled.
      - level 2: info message when top-level form is compiled.

   - Modularization:
     - New functions load-args-recurse and load-args-process
       - Handle a build/load command passed in *load-args*.
     - Provide a disciplined way to structure programs
       into hierarchical library modules.

  Bugs

  - Obscure in bug in compile-file giving rise to a .tlo
    that cannot be loaded, under certain conditions.

  - Autoload issue affecting with-compilation-unit,
    causing compiled files that use with-compilation-unit
    not to load.



                                    TXR 287
                                   2023-06-03


  Features:

  - Lisp:
    - New: progv special operator, similar to Common Lisp's

    - New: compiler-let: binds dynamic variables in the
      compiler's context, allowing control over the compiler
      at the expression level.
      - with-compile-options now implemented using compiler-let.

   - Awk macro:
     - redirection operators visible in wider scope
     - new :fun clause for binding functions local to macro.

   - Compiler:
     - small optimizations: when all local functions in
       a labels/flet block are unused, the frame is not
       generated for them.

   - Expander:
      - Parameter list macros now work in nested lambda lists.
        (This is also listed below under Bugs.)
      - New expander-let macro for binding special variables
        at macro-expansion time.
        - Allows customization of macros which occur inside,
          by having them respond to the values of the specials.
        - Used in TL-WHO port of CL-WHO to fix CL-WHO bugs.

   - Command line:
     - The -e option evaluates multiple expressions from
       the same argument string.
       - They are read together before evaluation, almost
         as if they were in the same progn.

   - Listener:
     - Evaluates multiple expressions in command line,
       instead of complaining about trailing material.

   - Lib:
     - load function has new features:
       - extra arguments may be passed to load, which are
         dynamically bound to a special var called *load-args*
       - a loaded file can bail early using using
         (return-from load) or (return-from load <value>)
       - the interrupted load function will then return that
         value to its caller.
       - thus loaded files can behave like functions with
         arguments and return values.

  Bugs

  - Android: fixes for running on Android 13 via Termux.

  - Environments:
    - Fixed crash when certain built in variables are removed
      with makunbound.
    - Fixed (symbol-value ...) wrongly storing a value to the
      top-level binding rather than the current dynamic binding.
    - Fixed bug in the VM: getlx and setlx instructions
      using dynamic lookup rather than global.

  - Expander:
    - Fixed bug in empty case of flets/labels causing
      unrelated symbol macros to be strangely affected.
    - Parameter list macros now work in nested lambda lists.

  - Awk macro: fixed completely broken redirection operators.

  - Parser:
    - There is now a proper handler for fatal Flex errors, like
      when a token is ridiculously long.
      - Flex-generated default handler prints something and exits.
      - Our handler throws exception.



                                    TXR 286
                                   2023-05-07


  Features

  - Hash tables:
    - some internal code improvements/streamlining
    - new hash-props function from instantiating a table from
      alternating key/value arguments, requiring no temporary
      list to be consed up.

  - Sorting:
    - New ssort and snsort functions: these are counterparts
      of sort and nsort which are stable on vector-like
      sequences.
    - The nsort and sort function's quicksort
      implementation now uses the Hoare partitioning
      scheme instead of Lomuto:
      - Observed a 21% improvement sorting a randomized
        vector of a million items.
      - The quadratic behavior on a sequence consisting
        of a repeated item is gone.

  - Time:
    - New time-str-local and time-str-utc functions, which
      reverse the arguments, for better
      partial application.
    - the time argument in time-{fields,struct}-{local,utc} is
      now optional; if omitted, the current time is used as if
      by calling (time).

  - Structs:
    - Small improvement in defstruct: if boa arguments are
      defined referencing slots that don't exist in any
      struct, this is now diagnosed.

  - Compiler:
    - Lots of new optimization work. There is now one more
      optimization round, and *opt-level* now goes up to 6
      rather than 7, 7 being the new default value. This
      release makes 23 compiler commits.

  Bugs

  - Fixed incorrect scope in conda/condlet.
  - Fixes for regressions preventing the source code of of
    stdlib/ being used (.tl files, not .tlo), which is needed
    for debugging some TXR problems.
    - Fixed issue that happens when code is loaded that
      generates warnings during error exception processing,
      causing an "invalid re-entry of exception logic",
      interfering with debugging TXR using an uncompiled
      library (.tl files rather than .tlo).
    - Fixed another issue using .tl files: interference
      between library loading and the -C compat option.
      Compatibility is temporarily disabled while
      auto-loading.
    - build macro: code rearranged to eliminate circular
      dependency, preventing modules which depend on the macro
      from loading.
   - Pattern matching: ^#S() and ^H(()) quasiquote patterns
     work now, thanks to a change in the parser.
   - Compiler:
     - Fixed incorrect evaluation order of function arguments
       (when local variables are involved that are subject to
       side effects during evaluation).
     - Fixed issue with compiling defmacro:
       - entire macro form was being retained
       - yet errors not reported against the correct operator
         name: e.g. (defstruct) says that defmacro has
         insufficient arguments.
       - fix also affects tree-bind and other operators.
     - Fixes September 2022 regression in liveness
       calculation, causing certain optimizations to be
       forgone.
     - Fixed incorrect blind register renaming across the
       arguments of a close instruction, which are not
       actually source operands of that instruction.
       - Latent problem exposed when trying to replace V
         register by T register more aggressively.
     - Fixed incorrect live register calculation across catch
       instruction.
       - This has two clobber register operands.
       - Representation of instruction live info was expanded
         to handle two register defs.



                                    TXR 285
                                   2023-03-28


  Features

  - Lib:
    - time (on platforms that have a timezone field in struct tm):
      - functions which convert a destructured time into a
        numeric time, like time-parse-utc, now take the time zone into
        account, and add a displacement.
      - functions which format time now via strftime now set the time
        zone field in the underlying struct tm, so that the %z specifier
        featured in glibc's strftime can be meaningfully used.
    - New function: ignore: synonym of nilf, intended for suppressing
      unbound variable warnings
    - New function: arithp: tests for arithmetic objects, including
      ranges and structures with + method.
    - range/range*: these functions now support non-arithmetic
      types: e.g (range "AAA" "ZZZ" 2) generates ("AAA" "AAC" ...
      "ZZW" "ZZY").

  - TXR Pattern Language:
    - fix exception being thrown in matching a bound variable whose
      value is a lazy list of strings rather than ordinary list.
      - e.g. value captured with @(data ...)

  - Structural Pattern Matching:
    - @nil is now supported in predicates.
      - @(< @nil 42) is like @(< @a 42) but no variable is bound.

  - Syntax:
    - The symbol t can be used in macro parameter lists and tree-bind,
      to specify a pseud-variable which just throws away the
      corresponding value.

  - Compiler:
    - New options mechanism:
      - compile-options struct type
      - *compile-options* special variable.
      - with-compile-options macro
    - New unused variable warnings are on by default.

  Bugs

  - build: fixed regression in building without CONFIG_GEN_GC
    or CONFIG_DEBUG_SUPPORT, which are 1 by default.
  - gc:
    - premature reclamation bug in lisp_parse_impl which is used
      internally and as the implementation for functions that parse
      Lisp, regex and JSON.
    - premature reclamation bug in implementation of FFI enum types:
      neglect to traverse a struct member during gc marking.
    - premature bug in constructor for FFI structs: neglect
      to protect member types from gc in the loop that processes struct
      members.
  - printer:
    - [] object now prints as [] rather than [. nil],
      which isn't incorrect, just ugly.
    - search tree objects now print as #T(...) beyond the maximum
      printing depth, just like #H(...) and others.
  - Vim:
    - Fixed syntax highlighting for decimal integers and
      uninterned symbols.



                                    TXR 284
                                   2022-12-30

  Features

  - OOP:
    - new :inherit clause in defstruct so that inheritance
      bases can be specified by clauses.
      - Motivated by clauses being programmable.
      - Allows defstruct clause macro to bring in bases.
    - new feature: struct preludes.
      - preludes can specify clauses to inject into specific
        defstruct definitions (that have not yet been processed),
        without those definitions mentioning anything.
      - purely a macro-expansion-time feature.

  - Lib:
    - cat-str/join/join-with now allow nested sequences.

  - System Functions:
    - ftw function: the flags argument now defaults to ftw-phys
      if omitted (do not follow symbolic links).

  - compiler:
    - optimizations around catch

  - Awk macro:
    - result of condition in condition-action clause is avaialble
      via a new Awk variable named res.

  Bugs

  - Compilation from command line via --compile now
    sets the self-path variable.
  - Listener: drop security checks on Windows, where they
    don't work and generate false positives.
    - They are geared toward a multi-user system with
      a bona fide POSIX security and file permission model.
  - crypt: remove dubious validator.
    - cannot reproduce the crash issue it was supposed to work around.
  - read-once: now supports global variables properly.
  - crypt: fix ridiculous stack usage, caused by giant context
    structure for glibc's crypt_r.
  - hashing: negative floating-point zero handled.
  - math: expt with a zero exponent yields 1.0. 
    - though works that way already on all platforms, it is now documented and
      assured.
  - compiler:
    - some functions were constant folded that must not be, because
      they are required to allocate fresh objects each time they are called.
    - an instance of runaway recursion in the compiler was fixed in
      constant-folding code.



                                    TXR 283
                                   2022-10-16


  Features

  - Low Level:
    - NaN boxing now works on Android, in spite of its pointer tagging.
    - String objects no longer track their storage allocation size
      on platforms that have malloc_usable_size.
      - The word of storage in a string object thus made available has not yet
        been put to a use.


  - Lisp:
    - New %fun% symbol macro provides name of current function.
    - Separator commas are now allowed in numeric tokens.
    - New functions
      - macroexpand-params:
        - expand parameter list macros made with define-param-expander.
      - macroexpand-place:
        - expand place macros made with define-place-macro
      - macroexpand-match:
        - expand macro patterns made with defmatch.
      - macroexpand-struct-clause:
        - expand defstruct macro clause made with define-struct-clause.
    - Small performance improvements in function dispatch.
      - functions with optional arguments no longer put through slow path
        - this could be listed under Bugs below
      - helper functions for fixed argument dispatch cases now handle
        more cases themselves rather than defer to slow path.
      - use of alloca has been eliminated from the creation of arguments on the
        stack in cases when the size is statically know.

  - OOP:
    - new :postfini clause in defstruct, allowing for finalization
      with order opposite to :fini
    - relaxation of constraint: defstruct can specify multiple :init,
      :fini, :postinit and :postfini clauses.
    - optional arguments :delegate clause now have init expressions
      that are not ignored, but specify the default value.
      - thus delegates can now customize the defaulting of
        optionals rather than being stuck with the target's behavior.
      - when delegates specify an optional parameter that corresponds
        to a non-optional target parameter, they can thus now
        specify a default value, rather than being stuck with nil.

  - Networking:
    - New sockaddr-str function: parse various textual address
      types into appropriate type of sockaddr.
    - New str-addr method in every sockaddr structure,
      for generating textual address.

  - I/O streams:
    - new inc-indent-abs function for incrementing absolute
      indentation, not relatively to current horizontal position.

  - JSON:
    - JSON printing now uses "standard-style" formatting,
      if a the newly introduced *print-json-format* variable
      is set/bound to the value :standard.



  Bugs

  - build: ./reconfigure issue when ./configure is interrupted.
  - str-in6addr bug.
  - hash: don't trim hash seed to 32 bits on 64 bit platforms.
  - JSON: restore stream indentation state if exception occurs
    during JSON printing.



                                    TXR 282
                                   2022-09-16


  Features:

  - New [. expr] syntax. This is also a bugfix because we
    have been printing (dwim . @sym) as [. @sym] without being able
    to read that syntax (read-print consitency issue).

  - NaN boxing representation for Lisp values.
    - enabled by ./configure --nan-boxing
    - 64 bit platforms only.
    - allows floating-point values not to be heap-allocated,

  Bugs:

  - compiler:
    - incorrect scopeing for init expressions of optional parameters.
    - bug in dead-code elimination causing compile-time exception.
    - bug in optimizer affecting code generated by prof operator,
      leading to a wrong result value.
    - compiler now diagnoses if there are too many variables added
      to a lexical frame (more than 1024).
    - numeric ranges in sequence iteration (seq-begin) now work
      with floating-point values.



                                    TXR 281
                                   2022-09-03


  Features:

  - Lib:
    - New search-all library function: like search but finds all matches.
    - New macro: close-lazy-streams: creates a dynamic contour of code which
      closes all streams that were bound to lazy conses during its execution.

  - TXR Pattern Language:
    - The @(next) directive now supports a :noclose modifier.
      - Because @(next) now closes the stream when it's done processing (see
        Bugs below), this new feature is required to opt-out of that behavior.

  - Vim:
    - Improvements to syntax highlighting definitions.

  Bugs

  - ffi: now defends against out-of-range wchar_t values being converted
    to Lisp character type.
  - TXR Pattern Language:
    - When a subquery opens a stream as a data source, that is now closed
      when that subquery is finished processing.



                                    TXR 280
                                   2022-08-09


  Bugs

  - Listener:
    - Fix regression: ~/.txr_history not loading unless ~/.txr_profile exists.

  - Build:
    - Handle failing hard link operation in "make install" so things
      work on Android again.



                                    TXR 279
                                   2022-08-08


  Features

  - Lib
    - missing count function added.
    - regsub
      - now accepts a string in place of the regex,
      - avoids consing a list of pieces to be catenated; works using string-extend.
    - gcd function rewritten for efficiency
      - when arguments fit into a machine word, bignum math is avoided

  - Build/Deployment
    - make install now creates hard links to the txr executable
      called txrlisp and txrvm, useful in scripting with unsuffixed files.
    - txrlisp behaves much like txr --lisp
    - txrvm behaves much like txr --compiled
    - compile-file translates txrlisp to txrvm in hash bang line.

  - Path test functions:
    - All path test functions now use effective UID not real.
    - New function path-components-safe for validating permissions
      along an entire path.
      - Useful for testing whether a path that is supposed to be private
        is actually properly secured.

  - Listener:
    - Security checks on .txr_history and .txr_profile have been revised.
    - Now done with help of path-components-safe in additition to
      path-private-to-me-p.

  Bugs

  - compile-file:
    - tries unsuffixed path before adding .tl, like load.
    - only tries different names on nonexistence error.
    - other exceptios now propagate out of the function.



                                    TXR 278
                                   2022-07-01


  Features

  - New str function for making a string filled with
    repeating pattern.
  - Syntax: stricter check in for/for* loop syntax.
  - I/O:
    - open-fileno (TXR's "fdopen") now takes pid argument, to associate
      the resulting stream with a process.
      - close-stream will subsequently wait on that process, and convert
        the status to a return value or exception.
    - all I/O convenience functions like command-get-linews
      now have a mode-opt argument.
      - For instance "z" can be used for compressed I/O.

  Bugs

  - Build: broken when no HAVE_ZLIB.
  - Command line: broken --free-all option.
  - String output streams: GC issue, occuring in some builds.
  - Listener: properly handle warnings coming out of code that is
    autoloaded during Tab completion.
    - Issue seen when working on TXR, with library .tlo files removed,
      so .tl files are used.
  - Compiler: failure in optimizer.
  - Compression: missing "z" support in open-command.
  - Missing: mode-opt argument of file-get-lines now implemented.



                                    TXR LZ77  :-)
                                   2022-05-31


  Features

  - Zlib integration:
    - New "z" mode option in open-file and open-fileno
      for Deflate compression (reading and writing): reads and writes
      gzip-compatible files.
    - Supported in convenience functions like file-put-string,
      file-get-buf and all those.
    - buf-compress and buf-decompress functions.
    - .tlo.gz files recognized by load as compressed.
    - .tlo.gz files may be catenated just like .tlo files.

  - Lib:
    - tok-str function takes count argument.
    - new spln and tokn functions: like spl and tok, but take
      a count argument limiting pieces returned.

  Bugs

  - tests: load-search test when run as superuser.
  - configure: don't exit when mmap isn't detected.
  - stream-set-prop: return t when :name prop set on file stream.
  - compilation bug in gc.c if HAVE_VALGRIND is on (maintainer mode only).
  - removed workaround for old Cygwin bug in I/O streams.
  - tags.tl renamed to txr-tags.tl to avoid name clash with tags file.
  - cygwin: sh function was wrongly using cmd.exe /c.



                                    TXR 276
                                   2022-05-24


  Features

  - Syntax:
    - printer: now nicely prints (a . @b) rather than (a sys:var b)
      and (a . @(e)) rather than (a sys:expr (e)).

  - Macros:
    - Subtle new expansion rule allows for more thorough expansion
      in situations when a macro and function are defined for the
      same symbol:
      - When a macro expands into the same-named function call,
        and that function call's arguments undergo expansion,
        the result is tried again as the original macro.

  - Command line:
    - New command line option --compile allows compile-update-file
      to be invoked more directly, without having to encode a Lisp
      expression as a command argument.
    - New command line option --in-package allows a package switch
      to take place within the command line. This is used by the
      compilation of stdlib, which takes place in the sys package.
    - In relation to command line: the message during the handling
      of an error exception encouraging the --backtrace option to
      be used is removed. This was a nuisance, and appeared in
      deployed programs that don't offer such an option.

  - Lib:
    - split-str now has a count parameter, to limit how many
      pieces are produced. When the split doesn't use the entire
      string, the remainder appears as a piece. This improvement
      was suggested by Paul. A. Patience in January 2022.
      - The spl function as well as tok-str could use this too;
        that is postponed to another release.
   - New trim-path-seps function for removing trailing path
     separators from a path.

  - FFI:
    - 64 bit bitfields are now supported. this means integer types which
      are 64 bits wide can now be be used as the basis of a bitfield,
      which can therefore be specified as 0 to 64 bits wide.
    - align operator now only increases alignment.
    - New pack operator for packing.
      - (pack (struct s ...)) syntax allows for all members of
        a struct to be packed.
    - The endian types like be-uint32 or le-uint16 can now be used as bit
      fields.
      - The layout takes place like on the machine of that endian;
        e.g. be-uint32 bitfields are filled most-significant-bit
        first.
      - If a bitfield follows a member of opposite endian, it starts a
        new storage cell in a fresh byte.

  Bugs

  - lambda-match: issue with variadic pattern.
  - FFI: bug: all unions were marked as incomplete types.
  - FFI: bug: empty structs/unions had an alignment of 0; should be 1.
  - FFI: bug: null terminated strings didn't work as flexible arrays.
  - copy-path-rec: didn't like trailing slash on source path.
  - FFI: alignment bug: arrays without a dimension were all treated
    as having pointer alignment, 4 or 8 byte, rather than inheriting
    alignment from the element type.
  - FFI: support for bitfields in the face of alignment and packing.
  - FFI: bug in internal type cloning function, leaving the type
    descriptor structure pointing to the original type as its "self",
    manifesting itself as a wrong result from something like
    (alignof foo.bar) when foo.bar has a cloned type (e.g. by
    the align operator).
  - UTF8: Incredibly, a bug was found: the UTF-8 decoder was silently
    eating an incomplete character at the end of the input, instead
    of treating the incomplete sequence as bad bytes, to be mapped
    into the U+DCxx range. Thus there were binary strings which
    were not preserved in the decode -> encode round trip.
  - OOP: Fixed an out-of-bounds stack access in the struct type
    initialization code which deals with suppressing redundant
    initializations of repeated multiple-inheritance bases.
    This more readily affects big-endian systems: showed upon PPC64.



                                    TXR 275
                                   2022-05-10


  Features

  - Architecture support: RISC-V and Loongarch (64 bit).

  - Hashing: new group-map function: group-reduce with
    built-in map pass.

  - Lib: new isecp function: test whether two sequences
    intersect without calculating intersectin.

  - FFI:
    - intmax-t and uintmax-t types.
    - new str-s, bstr-s and wstr-s types for receiving foreign
      string without freeing its memory.
    - after a FFI call, the arguments are processed for
      reverse data flows and memory clean-up in reverse order.
    - with above two features, strtol can be wrapped in FFI,
      including the error-reporting char **end pointer.

  - Loading: new *load-search-dirs* variable.
    - default search directory list includes sysrooted lib dir

  Bugs

  - configure: minor escaping corner cases in in production of
    ./reconfigure script.
  - compiler: package-related bug in file-compilation, reported
    by Paul A. Patience.
  - load: regression: do not try adding suffixes to a path
    which exists; try the given path before anything else
    - Reported by Paul A. Patience.
  - sh, run, open-command and open-process now flush *stdout*
    in situations when it makes sense, standard output is
    ordered between the subprocesses and the parent.
  - listener: Ctrl-Z issue when txr is one of multiple processes
    in a job control process group.



                                    TXR 274
                                   2022-02-24


  Features

  - Configure/Build:
    - 'make clean-c" now cleans the C object files without removing .tlo files.
      - complementary to "make clean-tlo".
    - experimental, not tested support for configuring 64 bit time_t on
      32 bit Glibc.
    - CPPFLAGS (C preprocessor flags) variable noticed and used now.
    - TXR now supports building with -fsanitize=undefined option.
      - you must specify it yourself via platform-flags, etc.
      - configure detects it and puts #define HAVE_UBSAN 1 into config.h

  - FFI:
    - new feature: enumed bitfield type combination now works.

  - Doc:
    - numerous documentation fixes.

  - Lib:
    - cptr-int: allow full unsigned range, so pointers can be specified
      as unsigned integers, or using negative signed values also.
    - New copy-cptr function; copy copies cptr objects.
    - New nandf and norf functions.
    - New function random-sample for one-pass reservoir sampling of a sequence.
    - load: supports catenated .tlo files now
    - cat-files: new function for catenating files, like POSIX cat.
    - find-max uses generic iteration.
    - new find-max-key function.
    - new partition-if function.
    - new list-builder method oust
      - also local function in build macro

  - Getopts:
    - various improvements.
    - opt-help function/method split up into several.

  - Macros:
    - New etypecase macro.
    - New nand and nor macros and functions.
    - opip now allows embedded (ap ...) and so on.

  - Compiler:
    - new optimizations.

  - TXR Pattern Language:
    - new function match-fboundp for testing whether a symbol has a binding
      as a pattern function.

  - Expander:
    - new @,expr hack: quasiquote generates (sys:var ...) or (sys:expr ...)
      based on type of substituted value.
    - macro-time is no longer a special operator, but a macro.

  - Listener:
    - Hack: Ctrl-V Ctrl-J now inserts CR (i.e. new line in multiline mode) rather than a LF.
      - Good for people used to inserting line breaks in GNU Readline.
    - Improvement in method completion.

  - getopts:
    - Numerous improvements, mainly in area of help generation.

  - Autoloading:
    - More nuanced implementation with multiple symbol namespaces, reduces spurious
      loading of modules not actually used.

  Bugs

  - TXR Pattern Language:
    - bug fixed in @(freeform)
    - involves bugfix in lazy-str-get-trailing-list function.
    - filtering now throws when there is an invalid filter,
      due to a fix in the filter-string-tree function.

  - Parser:
    - bug: carriage returns in JSON not tolerated.

  - Configure/Build
    - fixed broken file offset bits detection, resulting in no large
      file support on 32 bit Glibc platforms (regression since 244).
    - fixed broken syntax in unwind.h causing build to break if
      CONFIG_DEBUG_SUPPORT disabled.

  - Macros:
    - sum-each, mul-each: handle no vars case.
    - typecase: return nil from formless clauses.
    - fix broken :key parameters.

  - Lib:
    - carray: allow t and floating 0 in sub and replace.
    - carray-replace: two overrun bugs.
    - separate: wrong return value when seq is nil.
    - time structure: added missing wday and yday slots.

  - Listener:
    - bug handling comments in plain mode.
    - issue handling Ctrl-C in plain mode.

  - Structural Pattern Matching:
    - quasiliteral match wrongly allowing loose prefix matching.
    - `@{nil #/regex/}` wrongly throwing exception.

  - Command Line:
    - -Dvar now binds var to empty string rather than t.
      - this t was some thing inadvertently introduced in 2014.
    - -Dvar=foo=bar (value containing equal sign) works.
    - -Dx,y,z now diagnosed.

  - Vim Syntax Files:
    - improvement in handling multi-line string literals.

  - Search trees:
    - fixed two array underruns found by ubsan.
    - both situations work reliably by fluke in unfixed code due the memory
      cell below the array reliably being zero bits.

  - PRNG:
    - undefined behavior (32 bit shift of 32 bit value) in random function.

  - termios:
    - variables cmspar and crtscts had wrong values on 32 bits due to
      overflow in initialization.

  - General:
    - numerous numeric conversion issues identified by ubsan were
      addressed in various places in the code base.
    - Missing autoload for *in-compilation-unit* caused loading problem for
      compiled code making use of with-compilation-unit.



                                    TXR 273
                                   2021-12-28


  Features

  - compiler:
    - new jump optimizations.
    - register compacting optimization: greatly reduces stack use,
      especially of complex functions, and improves cache locality.

  - pattern language:
    - @{var /regex/} changes:
      - regex no longer ignored when var already has binding
        - text is extracted with regex, then compared to variable
    - @{var (fun ..)} changes:
      - (fun ...) now processed in vertical mode if sole item in line.
      - variable captures lines skipped over in vertical processing.
      - (fun ...) no longer ignored when var already has binding.
        - fun executed like in unbound case.
        - text that would be bound to variable is compared to existing value.

  - structural pattern matching:
    - in quasiliteral patterns, @{var #/regex/} can specify bound variable now:
      - matches text in same way as unbound case
      - matched text must then match content of var

  - lib:
    - new functions: tuples*, rot, nrot, subq, subq, subqual, subst, pairlis.

  - hash tables:
    - use 64 bit hash on 64 bit platforms, rather than 32 bit.

  - search trees:
    - new function tree-count, and length/len works on trees.
    - duplicate keys supported:
      - tree, tree-insert, tree-insert-node have optional argument for
        allowing duplicates.
      - tree-delete-specific-node allows specific node to be
        removed, when removing by key is ambiguous.
    - priority queue support:
      - tree-min, tree-min-node, tree-del-min, tree-del-min-node

  - oop/structs:
    - new feature: application-defined struct clause macros.
    - new: :delegate and :mass-delegate clause macros for
      generating delegate method boilerplate with minimal code.

  Bugs

  - compiler:
    - fix non-working (compile '(lambda ...)).

  - buffers:
    - file-get-buf and command-get-buf use unbuffered I/O
      to read the exact number of bytes into the buffer,
      avoiding reading more bytes than requested.

  - case macros (mainly affecting casequal):
    - fixed 2017 regression causing a key value like ((a b c)),
      which is the single key (a b c), to be wrongly converted
      into a list of three keys.

  - each-match, each-prod, sum-each family of macros:
    - documented and added missing anonymous block

  - maprodo: spurious non-nil return value issue.

  - interpreter: bug in interpreting optional parameters,
    present in original implementation from 2014 (absent in compiler).

  - iteration: gc stability problem in iter-begin and iter-reset.

  - define-accessor: broken argument handling.

  - less/greater: gaping bug, vectors not supported.



                                    TXR 272
                                   2021-11-11


  Features:

  - path manipulation:
    - new path-equal function for comparing paths.
  - pic macro:
    - support for digit-separating commas.
    - support for (...) notation for negative values.
  - FFI:
    - internal improvements and minor optimizations.
    - more ergonomic handling of carray, cptr passed
      by pointer.
  - compiler:
    - now diagnoses constant expressions that throw.
    - improved elimination of wasteful jmp instructions.
    - minor new optimization eliminating a wasteful register copy.
  - PRNG:
    - new random-float-incl function: like random-float
      but the range is [0, 1] rather than [0, 1).
  - syntactic places:
    - new read-once accessor for caching a place so
      that it is read only once even by place mutating
      operators which access it more than once.
    - ifa macro semantics adjusted to take advantage of read-once.

  Bugs:

  - FFI:
    - broken range checks in enum types.
    - bad format calls in enum error handling code.
  - math:
    - bad edge cases in 64 bit conversion (affecting
      32-bit platforms).
  - path manipulation:
    - rel-path bugfixes for native Windows.
  - printer:
    - cases where fallback package syms are wrongly
      printed without package prefix.
  - compiler:
    - ordering issue in load-time.
    - incorrect algebraic transformation of
      (- a b c ...) minus forms.
    - incorrect code generation when compiling catch forms.
    - top-level lambdas no longer captured into D
      registers:
      - not strictly a bug, but undesirable behavior that
        crept in when lambda lifting by load-time was
        introduced.
  - syntax:
    - broken #; syntax for first element of list.
  - listener:
    - bug causing incomplete auto-loading of modules
      during Tab completion.
  - structural pattern matching:
    - unquoted quasiliteral patterns now work.
  - less function:
    - crash when arguments are symbolic and
      the right one is nil.
    - other inconsistent, incorrect behavior for some
      combinations of symbolic arguments.



                                    TXR 271
                                   2021-10-05


  Features:

  - load:
    - new *load-hooks*: defer exeucution to load finish time.
    - used via push-after-load and pop-after-load
  - libtags.txr: script for generating extra tags to jump to
    TXR's C code using Lisp symbols.
  - lib:
    - delcons function: destructively remove indicated cons from list.
    - improvements in string-extend.
    - set-mask and clear-mask macros: shorter code working with masks.
    - new module for quantile estimation: see quantile function.
    - summing and producing variations of each operator:
      - sum-each-prod, mul-each-prod, sum-each-prod*, mul-each-prod*
    - path-search: semantics changes.
    - path access test functions now use read uid/gid rather than
      effective uid/gid.
    - new replace-env function.
    - new *child-env* variable for specifying environment for
      executed process images.
  - FFI:
    - socklen-t type now defined.
    - ffi macro now generates load-time form to avoid repeated
      invocation of FFI type compiler.
    - new cptr-carray function, inverse of carray-cptr.
  - exceptions:
    - system exceptions now store errno in exception message.
    - see string-get-code in doc.
  - sockets:
    - socket options now supported via new sock-opt and set-sock-opt.
    - exception now thrown if socket call fails.
  - compiler:
    - one small optimization improvement and internal improvements.
  - awk:
    - new :fields feature to give fields names and type conversions.

  Bugs:

  - compiler:
    - regression in calculation of output path of compiled files.
    - random perturbation in code generation due to dependency
      on hash table order in an optimization routine.
  - poll: array from alloca passed to free.
  - sockets: bug in sock-peer assignment place.
  - hash: gc problem in copy-hash function.
  - sequence iteration: gc problem.
  - maprodo: problm with single-list argument.



                                    TXR 270
                                   2021-08-30


  Features

  - open-file now supports "x" mode for exclusive create, contributed
    by Paul A. Patience.

  Bugs

  - sequence iteration:
    - garbage collection corruption was discovered via experimentation
      with string ranges (new feature in 269).
      - caused by not properly doing the counter-generation object mutations.
      - Bug is not new: affects bignum ranges, oop sequences.
    - iterating ranges that go from fixnum to bignum now allowed.
  - open-file:
    - "+" mode was behaving like "r" and not "r+" (Paul A. Patience)
    - "w+", "m+" and "a+" refused to create file (Paul A. Patience)



                                    TXR 269
                                   2021-08-28

                          Twelfth Anniversary Edition


  Features

  - networking:
    - getaddrinfo now implements ai-canonname flag.
  - system interface:
    - mmap function now supported, integrated with carray.
      - mprotect, msync, madvise are there.
  - structural pattern matching:
    - new match and match-ecase macros for irrefutable matching.
  - basic Lisp:
    - new ecase family of macros.
  - sequences/iterables:
    - string ranges like "AAA".."ZZZ" are now iterable.
    - iterators (objects from iter-begin) are iterable.
    - sub function allows iterables.
  - FFI:
    - carray-pun function allows displacement
    - improved support for big/little endian types:
      - more efficient when matches local endian
      - aligned reads and writes transfer word at a time.
  - PRNG:
    - new random-buf function for obtaining a block of
      pseudo-random bytes.
  - doc improvements.
  - build/port:
    - builds on FreeBSD; test cases pass.
    - new --no-full-repl option builds trimmed-down listener
      that supports only plain mode editing, not requiring termios.

  Bugs

  - int-str: bug stripping 0x unconditionally regardess of radix argument.
  - format: leading sign state leaking into subsequent conversions.
  - ffi: deffi: broken support for variadic functions.
  - random: bug with modulus that is multiple of 32 bits, found on PPC64.
  - open-file: "+" mode must be equivalent to "r+" not "r".



				    TXR 268
				   2021-08-07


  Features

  - subtypep: arguments can now be struct type objects returned
    by find-struct-type, not only type symbols.
  - JSON:
    - new *read-bad-json* dynamic variable, enabling tolerance for
      trailing commas in JSON arrays and objects.
  - OOP:
    - syntactic infelicity in new* and lnew* operators addressed.
  - streams:
    - close-stream now replays return value if called redudnantly.
    - get-lines/lazy-stream-cons now have optional parameter
      controlling whether the implicit close-stream can throw.
  - listener: plain mode
    - handles multi-line expressions
    - prints prompts if stdin is tty
    - prompts can be turned on with :prompt-on
    - banner is suppressed when stdin isn't tty; more usable in pipes.
  - TXR Pattern Language:
    - @(eof) now takes an optional argument which can bind
      the exit status of the input source. Useful for process pipes.

  Bugs

  - gc: aborts caused by incorrectness in several object-copying functions.
  - correct diagnostic name in remql function.
  - listener: plain mode (txr -n, or input is not a terminal) now
    handles multi-line expressions.
  - build: musl fix for socket.c: need <sys/time.h>.
  - streams: incorrect argument defaulting of second arg of close-stream



                                    TXR 267
                                   2021-07-26


  Features

  - system interface:
    - new getrlimit, setrlimit functions
  - random numbers:
    - buffer objects can be used as random seeds now
  - build:
    - txr.c now recompiled if build_id changes.
    - PDF build is now reproducible even if ghostscript
      and groff don't have patches for this.
  - tags.tl:
    - now supports --emacs argument for Emacs-style tags,
      thanks to Paul A. Patience.
    - other improvements
  - hashes:
    - Hashes now support both and-semantics and or-semantics
      for tables that have both weak keys and values.
      - and-semantics means both key and value must be unreachable
        for the hash entry to disappear.
      - or-semantics means the entry disappears if just the key
        or the value is unreachable.

  Bugs

  - compat:
    - glaring bug fixed going back more than 150 versions.
    - certain effects of the -C compatibility option not
      having their documented effect.
    - caused by referencing the opt_compat variable in global
      initialization functions, at which time opt_compat is
      always zero due to -C not having been processed yet.
  - Test case fixes for missing /bin/sh situation exemplified
    by Guix build environment.
  - op:
    - weirdness in handling nested do (do do do ...) fixed
  - hashes:
    - fixed TXR 235 regression in weak processing, causing
      entries to spuriously disappear from weak hash tables that are only
      referenced by other weak hash tables.
    - fixed incorrect recalculation of hash table counts of weak
      hash tables during garbage collection.
  - carray:
    - missing type checking in a couple of functions, creating
      opportunity for trivial crash.



                                    TXR 266
                                   2021-07-12


  Features

  - built-in macros and special operators are now subject to more
    rigorous syntax checking during the macro-expansion walk.
  - improvements in error reporting
    - built-in macros use compiler-like error reporting now.
    - Lisp files executed from command line rather than loaded, ditto.
    - running make tests out of an editor now takes you to the error line.
  - improvements in doc function, and OpenBSD support.
  - type system overhauled to disallow structs that clash with built-in types.
  - new function called separate contributed by Paul A. Patience.
    - combines keep-if and remove-if semantics
  - new path-manipulation-related functions trim-short-suffix, trim-long-suffix
    and add-suffix.
  - new build-id feature: optional string that can be inserted into TXR
    at build time, displayed by txr --build-id.

  Bugs

  - non-functional chmod.tl test case fixed, thanks to Paul A. Patience.
  - regex: argument defaulting problem in regex-compile.
  - *stderr* stream is now sanely reset during unhandled exception processing.
  - new steps taken to prevent runaway recursion in exception processing.
  - streams:
    - close-stream function refuses to close stderr.
      (previously refused only stdin and stdout.)
    - put-char, put-line: lack of type checking on stream argument.
  - bug in with-resources problem fixed, reported by Paul A. Patience.
  - doc ignores BROWSER variable if it is empty.



                                    TXR 265
                                   2021-07-04


  Features

  - requirements change in new long-suffix and short-suffix functions:
    - dot is now part of suffix.
    - leading dot is not a suffix delimiter: e.g. .bashrc is not a suffix.
    - trailing path separators ignored, like in base-name.
  - regex: optimization function exposed.
  - constantp function now recognizes more kinds of expressions:
    - (+ 1 (* 3 4)) is constantp, as is (symacrolet ((a (+ 2 2))) (* b 3)).
  - doc function
    - now handles situations in which xdg-open blocks until browser exits.
    - now reacts to BROWSER variable, and if xdg-open is not found,
      falls back on the first of a long list of possible browsers.
  - filesystem interface:
    - path-cat function is now variadic: (path-cat "a" "b" "c" ...).
    - new path-search function, searches for an executable by name in path,
      defaulting to the system's PATH.
  - sequences:
    - new find-true function; like find-if, but returns the true value
      that the predicate produces, rather than the item from the sequence.
  - I/O streams:
    - argument defaulting tightened; functions no longer treat a nil
      value for the stream argument as a missing argument.
  - stack limit:
    - minimum limit now imposed when the system's stack limit is too low,
      rather than disabling the mechanism.
    - stack limit is now always on, even if we don't obtain a value
      from the system or that value indicates that there is no limit.
  - documentation infrastructure:
    - improvements from Paul A. Patience integrated.
    - doc workflow catches more kinds of problems.
  - listener: empty EDITOR variable now treated as missing.

  Bugs

  - build: regression in separate-directory build.
  - parser: regression: not working with byacc.
  - compiler: a number of bugs in inline lambda implementation.
  - op: subtle bug in do operator; code refactored.
  - base-name function: problem with empty suffix.
  - listener: end-of-line/buffer visual glitch in selection.
  - trie: bugs in regex-from-trie function, now covered by tests.
  - regex: print/read consistency problem printing n-ary operators.
  - doc: *doc-url* variable not special, as documented.
  - getopts: throwing sys:opt-error instead of usr:opt-error.
  - command line: lack of robustness in -b option fixed.
  - documentation: numerous fixes.
  - packages: find-symbol was behaving identically to find-symbol-fb.
  - signals: itimer-prof variable misspelled as itimer-prov.
  - search trees: documented tnodep function now actually exists.
  - stack limit: fix crash when system stack limit is RLIM_INFINITY.



                                    TXR 264
                                   2021-06-25


  Features

  - system interface:
    - TXR no longer relies on popen for open-command.
    - glob function accepts multiple pattern arguments and
      uses multiple calls to the C function with GLOB_APPEND.
  - parser:
    - parsing Lisp or JSON from a string now produces error
      if there is any trailing material in the string.
  - paths:
    - new functions short-suffix and long-suffix for robustly
      extracting the suffixes/extensions of path names.
  - lib:
    - new functions cxr and cyr for traversing cons-cell
      structures using a car/cdr path binary-coded in an integer.
    - mismatch/rmismatch better optimized for strings
      - starts-with and ends-with use these.
  - structural pattern matching:
    - new looping macros while-match, while-match-case, while-true-match-case.
  - parser:
    - no longer wastefully allocates dynamic string when scanning a
      floating-point token.
  - tests:
    - target-installable test cases are now relocatable (can be installed
      at any path) due to a small improvement in the run.sh script.

  - program-wide:
    - share/txr/stdlib moved to stdlib.
    - type mismatches when a string is expected now give
      function name in error diagnostic.
    - stack overflow protection is introduced:
      - in key places, TXR detects whether the stack pointer is over a
        predetermined limit and throws a stack-overflow exception.
      - controlled by set-stack-limit function.

  Bugs

  - fixed wrong result from (rmismatch #() ()) and (rmismatch "" ()).




                                    TXR 263
                                   2021-06-17


  Features

  - New macro named flow, providing the syntactic sugar for
    using an opip function on a value.
  - I/O:
    - the *stdnull* stream lazily attaches to /dev/null if
      fileno is invoked on it
  - formatted printing:
    - format: new precision modifier - for zero instead of plus sign.
    - pic macro: takes advantage of format work to generate better code.
  - subprocesses:
    - some file descriptor saving-restoring manipulations moved
      into child process (in open-process, open-subprocess, run)
    - diagnostic for situation when *stdout*, *stdin* or *stderr*
      are redirected to something that cannot produce a file descriptor.
  - match-fun/txr-if
    - documented that input can be a stream
    - documented that input can be a single string
  - txr-case:
    - if input is a stream, it is now converted to a lazy list of lines,
      so that the txr-case construct effectively backtracks over the
      data as it tries successive cases.
  - command-line
    - new --noprofile option to invoke listener without processing
      ~/.txr_profile file.

  Bugs

  - format: numeric handling maintenance
    - poor behaviors identified and revised.
    - requirements clarified.
    - cemented in test cases.
  - exceptions:
    - unwind dynamic environment when tracing unhandled exception
      - solves problem when exception goes off while *stderr* is redirected.
  - subprocesses:
    - diagnostic for situation when *stdout*, *stdin* or *stderr*
      are redirected to something that cannot produce a file descriptor.
  - macros:
    - fixed TXR 191 regression in defsymacro: expanding the replacement form
      before associating it with the symbol, rather than taking as-is.
  - quasiliterals:
    - fixed issue arising when a macro invoked as a @(...) expression in a
      quasiliteral expands to a non-string atom.
  - math:
    - forbid dubious inequality comparisons like (< 1 "abc") which
      became unintentionally allowed due to numbers being iterable.



                                    TXR 262
                                   2021-06-11


  Features

  - structural pattern matching:
    - new feature: quasiquote matching.
  - JSON:
    - improved escaping of JSON output for safe embedding in <script> tags.
    - new JSON pattern matching.
  - text processing:
    - new pic macro for formatting using pattern similar to perl's
      format or PRINT USING in BASIC languages: ####.# <<<<<<.
      - works by compiling to fmt calls.
  - FFI:
    - bad FFI call diagnostics now have function name.
    - failures in dlsym function converted to better diagnosis.
    - carray objects can be passed to cptr argument now.
    - new deffi-struct and deffi-union macros for less verbose
      definitions without a typedef.
  - lib:
    - new fill-vec function for efficiently filling an area of a vector
      with repetitions of a value.
    - reduce-left rewritten with generic sequence iteration, for
      better efficiency (e.g. not consing memory over vectors).
    - sum and prod functions likewise.
  - expander:
    - fixed issue in defun expansion interfering with defining a macro
      and then a function of the same name which calls the macro.
  - parser:
    - new *read-unknown-structs* Boolean variable
      - if set, the reader can read #S syntax which names undefined
        structure types, without blowing up.
      - used in tags.tl, which can therefore handle source code
        that contains struct literals.
  - compile/eval:
    - improved coordination between error exceptions, compiler
      error messages sent to the error stream, and deferred warnings.

  Bugs

  - listener:
    - doc function not working in Cygwin/Cygnal port.
    - macro and operator completion after ' (quote) character;
      so that (doc 'wh[Tab] will complete on a macro name like while.
  - system interface:
    - mkstemp build problem problem affecting Solaris and other platforms.
  - printer:
    - added missing handling for printing (sys:struct-lit ...) syntax
      as #S syntax.
  - parser
    - bug with #; commenting syntax not playing nicely with #S literals.
  - JSON:
    - test cases on Cygwin work.
    - JSON print-read consistency problem addressed.
  - FFI:
    - memory leaks in FFI type system when struct type is redefined.
    - bug in deffi causing the libffi ffi_prep_cif_var function to
      always be used, even for non-variadic functions.
    - FFI now properly calculates the structure member descriptor arrays
      for libffi, and fakes them out for arrays and unions also.
      This should address problems with passing small structures by value.
      - The material is calculated lazily: not done for types that are
        never used as by-value parameters or return values.
  - format:
    - fix bugs in leading zero in precision field of format specifier.




                                    TXR 261
                                   2021-06-01


  Features

  - JSON support:
    - #J syntax in TXR Lisp
    - allows quasi-quoting and circular notation.
    - I/O with JSON objects, with convenience routines like
      file-put-json, and others.
    - Vim syntax highlighting support for everything.
  - parser:
    - new parse-errors function for retrieving number or
      parse errors from stream or nil if no errors.
  - filesystem:
    - new functions tmpfile, mkdtemp and mkstemp.
  - lib:
    - chr-iscntrl now recognizes Unicode C1 control character block,
      not only the C0 from ASCII.

  Bugs

  - compiler:
    - invalid move into register T0 generated when compiling catch code,
      causing assembler to throw error.
  - search trees:
    - GC abort caused by tree-delete/tree-delete-node.
  - parser:
    - GC bug due to storing lookahead token in parser using
      a wrong-way assignment.



                                    TXR 260
                                   2021-05-26


  Features

  - structural pattern matching:
    - values in hash pattern can be now omitted with usefully nuanced
      semantics.
  - parser:
    - unterminated expression diagnostic now given in in format that lets
      editors jump to the start of the unterminated construct.
  - compiler:
    - better translation strategy for global var definitions.
  - documentation improvements.

  Bugs

  - lib:
    - buggy :wrap and :reflect in window-map fixed.
    - case{q*,ql*,qual*} macros failing to expand key expressions.
  - compiler:
    - fix compile-file warnings being deferred to end of surrounding load
  - ffi:
    - crash when carray object passed as argument to foreign function.
  - arithmetic:
    - several bugs in the area of bignum to 64 bit conversions.
  - listener:
    - don't complete on symbols that are just interned, with no binding.
  - doc function now handling symbols like <= that use HTML codes in
    the document.



                                    TXR 259
                                   2021-05-13


  Features

  - lib:
    - New rel-path function for calculating relative path
      between two directories.
    - format function's ~x/~X supports printing buffer
      objects in hex.
  - structural pattern matching:
    - new each-match family of macros for iterating over
      sequences, with destructuring.
  - search trees:
    - numerous new functions
    - tree iterators support sub-ranges of trees
    - trees are now sequences and can be mapped over with
      mapcar, each and other functions.
  - build:
    - fixed issue with ./reconfigure overwriting itself,
      causing instability.
    - ./reconfigure takes configure parameters to be added.

  Bugs

  - join-with segfault on character (not string) separator.
  - parser:
    - regression introduced in 258: crash when the #; syntax
      for commenting out an object is processed.
    - bug in handling certain objects, such as string
      literals, as top-level forms in a file.
  - compiler:
    - failing to diagnose wrong number of arguments in calls to lexical
      functions that have been lambda-lifted to the top level.
  - buffers:
    - int-buf and uint-buf functions wrongly referring to
      buffer's allocated size instead of its length.
  - sha256/md5:
    - memory leak in use of buffers.



                                    TXR 258
                                   2021-04-30


  Features

  - Structural pattern matching now supports quasiliteral patterns
    for matching into strings.
  - Search tree module supports a way to start scanning nodes
    in order at or above a given lower bound key.
  - improvements in Vim syntax highlighting files.

  Bugs

  - GC issue in sequence iterators: not marking iterated object
    when it's a structure.
  - GC issue in parser.
  - lexical-var-p: no longer wrongly returns t for locally bound
    special variables.
  - regression in mapcar*, going back to 240.
  - search tree module:
    - massive gc problems
    - broken tree-lookup



                                    TXR 257
                                   2021-04-22


  Features

  - parser:
    - Invalid UTF-8 bytes and characters now allowed in literals and regexes.
    - Treated using rules consistent with behavior of text streams.
  - doc:
    - General improvements in documentation, many thanks to Paul A. Patience.
  - build:
    - Test suite no longer requires .expected files which are empty;
      they materialize on-the-fly and make cleans them away afterward.
  - streams:
    - stream-max-len behavior changes for strings. Some small bugs
      fixed in this area.
  - structural pattern matching
    - new @(scan) operator for finding a match over a list
    - new defmatch macro for defining new pattern operators
    - new pattern operators @(end) and @(sme) defined using defmatch
  - TXR:
    - Debug output for @(gather) directive reports exact list of variables
      that were not bound.
  - compile/eval:
    - compile-error macro now prints error on *stdout* in addition to
      throwing exception.
      - upshot of this is that this helps editors navigate to the error.
      - previously this worked for warnings, not errors.
    - new binding operator: mac-env-param-bind
  - port status:
    - TXR ported to OpenBSD, amd64.
  - internal:
    - New C function dis that can be used debugging TXR with gdb to
      disassemble VM code.

  Bugs

  - compiler:
    - (call (fun f) ...) forms not registering the reference to f,
      causing lambdas to be incorrectly lifted to a scope where they
      lose access to a needed lexical function.
    - incorrect handling of trailing arguments in immediately-called lambda.
    - bad diagnostic in compile-file when output file can't be opened.
    - constant-folded (call ...) expressions not quoted.
    - bug in dead code elimination (optimization level 6) causing
      references to nonexistent assembly language labels.
    - bug in frame elimination (optimization level 2) not initializing
      some registers in code that can execute more than once due to loops.
  - GC:
    - Bug in sys:gc function fixed, whereby it wrongly resets the
      internal flag which requests a full collection, leading to corruption
      (since that flag is sometimes set for reasons of correctness).
  - regex:
    - The regsub function was found to have destructive behavior,
      contrary to documentation.
  - lib:
    - fixed a bug causing the functions base-name, dir-name and TXR's
      sysrooting calculations to be wrong on platforms where sizeof(wchar_t)
      is 2 (Windows/Cygwin) and on MacOS.
    - fixed the bogus assumption in the code, introduced in 2015, that there
      are platforms with four-byte wchar_t which don't align L"..." literals
      to four byte boundaries, and that MacOS is one of them.
  - continuations:
    - fix stack alignment on amd64 under clang.
      - discovered during OpenBSD port, but not an OpenBSD problem.
  - build:
    - make referenced in a few places instead of $make, causing
      some nuisance error messages on platform where GNU Make is gmake.



                                    TXR 256
                                   2021-04-07


  Features

  - Compiler:
    - Compiler now checks number of arguments in a function call
      against its definition.

  - Doc:
    - numerous improvements in the manual, especially HTML output.
    - New library function doc for documentation lookup:
      - (doc) -> open manual with default browser
      - (doc 'cons) -> open manual to specific symbol
    - INSTALL document maintained.

  - Awk:
    - :name argument not restricted to symbol, but any valid
      object usable as a block name.

  Bugs

  - Compiler:
    - fixed incorrect constant folding of call function.
    - some instances of misleading diagnostic wording fixed.
    - fixed regression in source location info propagation
      - causing errors not to have location information in some cases
      - caused by recent optimization work.
  - OOP:
    - fixed lack of hygiene in qref operator with regard to
      a.?b syntax, causing mutiple evaluations of a.
  - GC:
    - fixed bug in weak hash processing dating back to the
      initial weak hash implementation in 2009.
  - Awk:
    - The value of the rs (record separator) variable being
      wrongly compiled as regex syntax even if it is a string object
      that must be a fixed pattern.
  - Lib:
    - bug in UTF-8 decoding function
      - affecting situations when buffered bytes are decoded as utf-8
        (I/O streams not effected).
      - incorrect behavior when invalid bytes are present;
        valid UTF-8 not affected.
    - func-optparam-count: function was returning bogus value
      for interpreted functions.



                                    TXR 255
                                   2021-03-26


  Features

  - TXR has been ported to Arm64 Mac OS Darwin (Apple M1).

  - lib:
    - argument to cat-str treated via sequence iteration
      for better efficiency on non-lists.
    - likewise for the poll-list argument in poll.
  - compiler:
    - optimization improvements
      - The VM's T registers can now be used for function arguments,
        promoting further optimizations, and eliminating the
        need to allocate a variable frame for arguments.
      - several other optimization improvements.
      - code improvements in compiler.
  - FFI:
    - float type used as variadic argument in deffi and deffi-cb
      now promoted to double, preventing a programmer pitfall.
  - VM:
    - execution of VM code is now interruptible by signals,
      most notably the SIGINT generated by Ctrl-C.
      - this is done in a way that shows vanishingly low overhead.

  Bugs

  - ffi: fixed missing support for retrieving ushort type from
    misaligned buffer
  - tests:
    - on Mac OS, the socket-basic.tl test passes on the stock OS
      configuration, not requiring limit on UDP datagram size to
      be relaxed via sysctl.
    - make -j retest now works reliably via a recursive invocation.



                                    TXR 254
                                   2021-03-10


  Features:

  - compiler:
    - elimination of function calls that produce unused values.
      - this compiles down to just "nil":
          (let ((x (cons y z))) (set x (cons u v)) (set x nil) x)))
    - elimination of unused accesses to globals
    - elimination of unused lambdas.
    - optimization control: new variable *opt-level*, valued 0-6.

  - lib:
    - new functions join and join-with to complement the tired old
      cat-str for joining strings and characters.
      - (join-with ":" "a" "b" "c") -> "a:b:c"
      - (join "a" "b" "c") -> "abc"

  Bugs:

  - broken sort function over vectors and strings
    - failing to return the sorted object



                                    TXR 253
                                   2021-03-06


  Features:

  - build:
    - parallel builds allowed with ./configure --parallelmake
    - after above, make -j is supported.
    - recommended for development, not distro builds.

  - compiler:
    - new optimizations
      - order of optimization passes rearranged
      - new peephole patterns.
      - Pattern-matching Ackermann 48 times faster
        than interpreted
      - functional combinator expressions are now automatically
        hoisted to load time.
        - E.g. [chain .foo car list] is now computed once when
          the code is loaded, and then referenced.

  Bugs:

  - compiler:
    - mistake in (if (equal ...) ...) pattern corrected,
      allowing corresponding reduction to take place.
    - fixed bug in frame depth calculation when load-time forms
      are involved.
    - fixed bug causing redundant dead code to be added to load-time.

  - hashing:
    - fixed bug causing hash-equal to produce zero for floats
      and bignums
      - equal-based hash tables using bignums or floats as keys
        are affected.




                                    TXR 252
                                   2021-02-28


  Features:

  - compiler:
    - new optimizations introduced:
      - elimination of frames for non-captured lexical variables
      - elimination of blocks in self-recursive functions
      - more compact frame size for closures
      - strength reduction of equal (helps pattern matching)
      - list construction optimization:
        - e.g. (cons 1 (cons 2 3)) -> (list* 1 2 3) and more
      - other algebraic reductions.
      - aggressive constant-folding of over 300 library functions.
      - new control-flow and data-flow analysis:
        - removal of dead registers
        - elimination of inefficiently used temporary registers
        - comprehensive dead code removal

  - structural pattern matching
    - internal code cleanup, improvements and improved
      diagnostics for hash patterns.

  - syntax:
    - obj.[fun ...] syntax changes meaning; it is now
      method dispatch.
      - obj.[method ...] is to [fun ...] as
        obj.(method ...) is to (fun ....)
    - improved diagnosis of invalid dotted forms.

  - library:
    - list-builder methods now return the object, allowing
      chaining like (new list-builder).(add 3).(get)

  - vm:
    - backwards compatibility jump: TXR 251 generates version 6
      object files (.tlo) and will not read older ones.
    - Some obsolescent instructions have been removed from the
      instruction set.

  - TXR Pattern Language:
    - function calls, including indirect calls via @(call ...)
      are now considered non-matching directives, thus not
      calling for the input source to be opened.

  Bugs:

  - math:
    - fixed out-of-bounds memory access in or and xor
      functions when the arguments are bignums.
  - build:
    - bug fixed: not dealing with spaces in configuration arguments when
      generating ./reconfigure script
  - printer:
    - obscure bug in printing lambda expressions fixed,
      triggering function lookup and expansion at print time.
  - compiler:
    - fixed internal error in compiler when compiling
      certain cases sys:switch forms generated in certain cases
      of caseq/caseql.
    - assignment to a function binding being internally marked as
      an a free variable reference by the compiler, rather than
      a free function reference.
    - incorrect compilation unwind-protect form when the
      protected form is trivial, like a literal constant.
  - TXR Pattern Language:
    - fixed broken implementation of @(call ...), in several independent
      aspects.



                                    TXR 251
                                   2021-02-08


  Features

  - structural pattern matching:
    - now allows back-referencing with existing variables
      outside of the pattern, greatly improving expressiveness.
    - new @(with) operator, allows match between side pattern
      and side object in parallel with main pattern and main object.
    - @(let) renamed to @(as).
    - clauses of @(and) now in same scope allowing back-referencing.
    - redesign of lambda-match, using special argument matching rather
      than a list pattern against the argument list.
      - functions based on pattern matching now perform much better
    - new :match parameter macro:
      - adds pattern matching to any function in any situation
      - supports mixture of regular arguments and pattern matching.
    - predicate pattern syntax and semantics redesigned.
      - predicates now have multiple arguments
      - variable can be inserted anywhere in a predicate call,
        including dot position
      - variable can be omitted, giving rise to the object being
        passed as the rightmost argument to the predicate call
    - @(op ...) pattern is removed:
      - not necessary due to improved predicate handling.

  - compiler:
    - new optimizations
    - error location reporting improved.

  Bugs

  - structural pattern matching
    - fixed bad hygiene in match-case due to not using gensym.
  - lib:
    - fixed crash in nullify and iterable, when argument is
      a C object that is not a struct.
    - fixed long-standing bug in multi-sort: when the list(s)
      are empty, it must return a list of empty lists, not nil.
      E.g. [multi-sort '(nil nil nil) less] now returns
      (nil nil nil) as documented, and not nil.



                                    TXR 250
                                   2021-01-31


  Features

  - structural pattern matching:
    - new @[...] predicate operator.
      - can capture object, as well as value of predicae
    - better code generation

  - compiler:
    - jump threading optimization
    - dead code removal
    - peephole optimizations


  Bugs

  - structural pattern matching:
    - numerous new test cases introduced showing various
      breakage, and fixed.
    - code substantially refactored
    - @(or ...) pattern handled in new way.
  - compiler:
    - fixed totally broken treatment of append-each operator
      - destructively catenating lists
      - not observing append semantics w.r.t. generic sequences.
  - sub-str: now subject to compatibility; -C 215 or lower
    restores the behavior of always copying the input string,
    even when sub-str covers the entire string.
  - lazy strings: instance of invalid substrucure sharing
    fixed in lazy-sub-str, causing incorrect behavior,
    showing up as strangeness in @(freeform) processing
    and anything else relying on lazy-sub-str.
  - fixed broken @(rebind) directive.
    - not removing variables from environment if left hand
      side is a pattern with multiple variables.
    - wrongly removing right hand side variable from environment.



                                    TXR 249
                                   2021-01-24


  Features:

  - structural pattern matching:
    - variables can now back-reference so that (@a @a)
      matches a two-element list whose items are equal.
    - @(some) and @(all) operators work with any sequences, not just lists.
    - New pattern-matching @(coll ...) operator for collecting
      from a sequence those objects which match.
    - New @(hash ...) operator for matching hash tables on keys,
      values or both.
    - Matching ranges using range objects is now supported,
      e.g. #R(@a @b) matches a range, and binds a and b to its from and to.
    - Trivial patterns (those containing no operators or variables) are
      now handled more efficiently. E.g. the pattern (1 2 3) or #(1 2 3)
      will just be tested using equal as an atom, rather than
      compiled into individual tests over the elements.

  - hashing:
    - hash-revget now uses equal equality for finding matching
      values in the hash table, rather than eql.


  Bugs:

  - structural pattern matching:
    - fixed order of evaluation problem in @(require)
  - iter-step: no longer traverses into terminators of improper lists, which
    caused situations like (each ((x '(1 2 . 3))) ...) to iterate indefinitely.
  - fixed a regression which caused carrayp, hashp, random-state-p, regexp and
    struct-type-p to indicate true as 1 instead of t.
    - internally, the way t is initialized when TXR starts up has also been
      improved as a result.
  - parser:
    - fixed badly designed low-precedence of the @ token: the one applied to
      expressions as in @(foo).
  - printer:
    - fixed the print/read ambiguity that both (rcons @a @b) and @(rcons a b)
      printed as @a..@b.
    - @(rcons ...) now prints as @(rcons ...) and never as the x..y notation,
      so only (rcons @a @b) prints as @a..@b.
    - we also know that only (rcons @(a) @(b)) prints as @(a)..@(b), and
      thanks to the parser fix mentioned above, @(a)..@(b) parses as
      (rcons @(a) @(b)).
  - places:
    - The function name call-delete-expander was wrongly in sys package, rather
      than the usr package, as documented.
    - Addressed runaway recursion in place expansion logic, causing, for
      instance the expansion of (let (a) (set a #1=(#1#))) to recurse
      infinitely.
  - manual: fixed wrong 2020 date.



                                    TXR 248
                                   2021-01-20


  Features:

  - hashing:
    - new hash-key-of function: get all keys that map to the specified value.

  Bugs:

  - compiler regression: incorrect reduction of (and <true-constant>) forms
    to t instead of <true-constant>.



                                    TXR 247
                                   2021-01-19


  Features

  - lib:
    - structural pattern matching introduced.
    - prog2 macro introduced.
    - progn, prog1 and prog2 are now also functions.

  - build:
    - configure's test for how to define inline functions fixed.
      - hopefully this will fix things for Brew.
    - linker options and library flags are now separate;
      there is a new platform-ldlibs configure option.
    - LDLIBS variable is now honored, not just LDLIBS.

  - gc:
    - finalizers now registered during finalization processing
      may be called in the same phase, if they are eligible.

   Bugs

   - show-stopper regression in mapcar/maprod.




                                    TXR 246
                                   2020-12-31


  Features:

  - Library:
    - shuffle and nshuffle functions take optional random state
      argument now.

  Bugs:

  - gc:
    - bug in finalization leading to assertion in garbage collector.
      - affects situations in which finalizers are explcitly called,
        rather than naturally occurring during garbage collection.
    - flaw in object finalization logic causing unnecessary full
      generation to be requested.
  - awk:
    - fixed regression in fconv macro (probably dating back several years):
      - the conversion shortcuts like i, x, o, r became unavailable
        due to being sys: symbols rather than usr: symbols.



                                    TXR 245
                                   2020-12-24


  Features:

  - Android is now a supported target platform: builds in termux environment.
     - TXR executable builds as PIE, which is mandatory on Android.
     - test suite passes nevertheless: PIE-related has not been observed.

  - System Interface:
    - env-hash now returns the same hash object every time it is called,
      whose contents are updated by setenv, unsetenv and getenv.

  - Build:
    - C compiler now operated in C99 dialect, except in maintainer mode.


  Bugs:

  - math: bad edge-case in int-flo function affecting 64 bit systems.
  - time: do not offer a make-time-utc function if we have neither timegm nor
    setenv in the C library; we don't simulate setenv with putenv any more.
  - printer: don't print leading zeros in characters printed in hexadecimal.



                                    TXR 244
                                   2020-10-10


  Features:

  - Build:
    - Dropped dependency on Bison/Byacc and Flex:
      - TXR now ships the generated parser and scanner source.
      - The --maintainer option must be given to configure to enable
        regenerating these sources, otherwise the shipped ones are used.

  - Lib:
    - New trim-left and trim-right functions for removing a suffix.
    - Time-related functionality moved out of lib.c into a new time.c module.
    - New time-nsec function for nanosecond-precision time.
    - PRNG uses nanoseconds now in seeding, rather than microseconds.

  - Listener:
    - New quip function produces a randomly selected humorous line,
      suitable for printing out of the ~/.txr_profile startup file.

  - Compiler/VM:
    - movi family of instructions (move immediate operand into register)
      are deprecated and no longer used by the compiler.
      - It is cheaper to the integer or character operand in a D register
        already, since no instruction needs to be executed to get it into a
        register.
      - The downside is that code which uses a large number of small integer
        literals can now run out of D registers, whereas previously
        it woudl have not run into any limit.

  Bugs:

    - output-side @(repeat) was still not finding Lisp variables embedded
      in braced expansions.
    - fixed two defects in the implementation of the WELL512a pseudo-random-number
      generator.
      - compat option (-C 243 or lower) restores broken PRNG behavior for
        reproducibility of old PRNG sequences.
    - regression in two-or-more-sequence form of mapcar: it was not
      converting the output to the type of the leftmost sequence.



                                    TXR 243
                                   2020-09-01


  Features:

  - TXR:
    - output-side @(repeat) directive more intelligent:
      - now identifies variables referenced in Lisp code
      - many uses of :vars now unnecessary
      - variables identified in expansion pass now, before query execution

  - OOP:
    - diamond problem in multiple inheritance addressed.
      - duplicate inheritance bases no longer cause multiple
        calls to :init, :postinit and :fini handlers.

  - Lib:
    - new reject funtion, complements select.

  Bugs:

  - FFI:
    - several bugs addressed in the allocation of bitfields.
    - documentation of Bitfield Allocation Rules also updated.



                                    TXR 242
                                   2020-08-14


  Bugs

  - TXR: fix serious regression introduced in TXR 235, affecting
    correctness of behavior in multiple places.
  - listener: fix regression introduced in TXR 239, causing funny
    behavior when invoking Tab completion on keywords and qualified symbols.



                                    TXR 241
                                   2020-08-08

                          Eleventh Anniversary Edition


  Features

  - MIPS (32 and 64 bit) is a a target platform now.
  - Lib:
    - New list-seq, ved-seq and str-seq functions.
    - New maprodo function: like maprod, but returns nil.
    - New each-prod, collect-each-prod and append-each-prod operators:
      - traverse cross product of the sequences rather than in parallel.
    - crc32 has initial crc argument, allowing multi-step
      crc32 calculation over multiple objects.
    - New iterable predicate function for detecting whether object is iterable.
  - Structs:
    - New iteration protocol
      - comes in two flavors, using either two or three methods.
  - System Interface:
    - New strerror and strsignal functions.
    - Argument of exit now optional, defaulting to success.
    - New opendir, readdir and closedir functions for lower-level directory
      traversal (complementing ftw and glob).
    - stat family of funtions can now fill an existing struct.
  - TXR:
    - @(if)/@(elif)/@(else)/@(end) syntax now supported in @(output).
      - @(if test then [else]) Lisp form still supported.
  - Listener:
    - new *-1, *-2, ..., *-20 macros for referencing prior values
      relatively.
  - Symbols:
    - packages can now be created weak. If a symbol is reachable only through a
      weak package, it can be garbage-collected.
  - FFI:
    - new cptr-get and cptr-out functions for accessing through a cptr.
  - Networking:
    - New address parsing functions inaddr-str and in6addr-str.
      - support for port number and / prefix notation.

  Bugs

  - listener: bogus permission complaint when .txr_history file missing.
  - structs:
    - static slot handling in autoload leading to spurious errors.
    - autoload on instance slots also to prevent spurious no such slot errors.
  - parser:
    - minor omission in syntax error diagnostic logic leading to internal token
      values being printed as if they were characters.
  - TXR: regression in vertical-horizontal fallback (see 7006ede9).
  - printer: bugs in printing uref and qref syntax.
  - parser:
    - fixed breakage on some platforms like newer Mac OS X due to Flex
      scanner containing an #include <unistd.h> in the middle of lex.yy.c,
      after we have included our headers which define numerous macros.
    - eliminated calls to isatty from the lexer.
  - cygwin:
    - broken cat-str and split-str family of functions when using a character
      object as a separator.



                                    TXR 240
                                   2020-06-06


  Features

  - New iteration paradigm for sequences.
    - iter-begin function takes an iterable, returns an iterator.
    - iter-more tests whether iterator has more items.
    - iter-item gets first available item
    - iter-step takes an iterator, returns either new iterator,
      or the same iterator, mutated.
    - integrated into sequence processing functions.
    - works for sequences, as well as integers and ranges.
    - e.g. [mapcar list '(a b c) 1] -> ((a 1) (b 2) (c 3))
  - each, collect-each, ... operators work with this paradigm.
  - mapcar, mappend, mapdo, maprod, maprend now optimized:
    - work well with sequences of all types
    - allocate parallel iterators on the native stack

  Bugs

  - maprod bug: wrongly reducing to mapcar, rather than mappend
    in the one-sequence case.
  - fixed interpreter segfault on (each ()) expression.



                                    TXR 239
                                   2020-06-02


  Features

  - Minor optimizations in library:
    - many instances of internal (format nil ...) calls replaced with cheaper
      string catenation operations.
    - consing reduced in the compiled implementation of string quasiliterals.
    - search, rsearch and update functions switched to seq_info.

  Bugs

  - compiler: showstopper bug fixed: operators in the each family, and the
    dohash operator were missing the implicit anonymous block.
  - vm: fixed interal bug: when diagnosing the situation that an anonymous
    block is not visible, format was called with excess arguments, hijacking
    the situation with a different exception.
  - lib: fixed broken rsearch function, and a minor flaw in the diagnostic
    generated by search and rsearch for a wrongly typed key object.
  - signals: fixed mismanagement of the sigaltstack memory.
  - streams: improved dubious integer format string detector logic that is
    invoked at global initialization time.



                                    TXR 238
                                   2020-05-18


  Features

  - Compiler:
    - optimization of load-time and fine-tuning of its semantics.
    - compiler now does lambda lifting: lambdas that don't reference
      lexical variables are created one time at load-time.
      - Now almost no penalty for moving a defun into a labels/flet,
        unless capture is introduced.
  - Lib:
    - Functions countqual, countql, countq, count-if, some, all, none
      now use the sequence iteration, so they are more efficient on
      non-list objects.
      - This is part of a slow-moving, on-going effort.
    - sort and shuffle are now non-destructive
      - the original destructive functions are available as
        nsort and nshuffle, respectively.
      - compat mode (value 237 or lower) restores destructive behavior.
    - New assert macro: something that has been conspicuously missing.
  - System Interface:
    - isatty function exposed.

  Bugs

  - sockets: bug in formatting IPv6 textual address.
  - symbol-function: fix failure to expand lambda expression arguments.
  - compile function no longer wastefully expands already expanded input.
  - configure: ./configure --help no longer clobbers ./reconfigure script.



                                    TXR 237
                                   2020-04-26


  Features

  - I/O:
    - get-line-as-buf function: read a line from a text stream
      as a buf object: saves storage compared to a string.
    - poll function now enables async signal handlers invocation,
      allowing it to beinterrupted.

  - Parser:
    - improvement in buffering of stream reads in lexical
      analyzer speeds up parsing.
    - compiled files (.tlo) load something like 75% faster.

  - Math:
    - relational functions =, <, >, <= and >= now work
      on sequences of numbers.
    - /= function avoids consing.

  - Sockets:
    - poll is now used for timed out connect and accept;
      select is a fallback if poll is not detected at config time.

  Bugs

  - Sequences:
    - uninitialized memory problem affecting the functions
      in, reverse, find, rfind, pos, rpos and tprint
      when used with vector-like sequences.
    - The function in is also affected when used with
      hashes.

  - Compiler:
    - fixed miscompilation of if form when the test is
      a constant expression that evaluates to false.

  - tags.tl:
    - fixed bug in file opening logic when following (load ...) forms.

  - Printer:
    - symbols with zero-length names now printed with package prefix,
      instead of nothing, so they enjoy read-print consistency.

  - Sockets:
    - broken timed-out connect fixed.

  - FFI:
    - some bugs fixed in carray code after a code review.



                                    TXR 236
                                   2020-04-18


  Features

  - open-file:
    - new "n" mode for non-blocking open.
    - now allows async signal delivery during open so blocking open can be
      interrupted.
  - New touch function, analogous to Unix utility.
  - Unicode:
    - map of characters that need two spaces on the terminal has been updated
    - now includes emoji in the U+1Fxxxx plane.
  - Listener:
    - Tab completion over Unicode identifiers works now.
  - Path testing functions now also accept integer file descriptor.
  - configure:
    - shell identification and re-execution logic in configure script
    - now avoids re-execution if the original shell seems good.

  Bugs

  - ignwarn: fixed neglect to handle warning exceptions
    with multiple arguments.
  - autoloading: definitions now trigger autoload, not only references.
    Otherwise if user code redefines some system entity that as not yet been
    loaded, a subsequent attempt to use that entity will trigger autoload,
    clobbering the user's definition.
  - open-socket-pair: fix broken function.
  - sockets: add missing shut-rd, shut-wr and shut-rw variables that are
    already documented.
  - unwind/signals: fixed signal mask restoring regression that first
    appeared in TXR 230.
  - txr-parse: release deferred warnings if erroring.
  - open-file: when "m" flag is in effect and POSIX open is used,
    use 0666 mode, not 0777, else the file will be created with
    execute permissios if the umask doesn't remove them.
  - regex: fix crash caused by duplicate regex character range.
  - vim: work around bug in Vim that causes it to treat "contains"
    (the name of a TXR Lisp function) as a reserved keyword in the syntax
    highlighting definition.



                                    TXR 235
                                   2020-04-12


  Features

  - Lib:
    - new txr-parse function, opening access to the
      parser for the TXR Pattern Language.
      - used by tags.tl.
    - path testing funtions now accept stream argument.
  - Exceptions:
    - unhandled non-error exception throws now simply
      return instead of terminating.
    - in pattern language unhandled @(assert) with
      a non-error exception behaves as failed match.
  - Parser:
    - more efficient handling of list syntax.
  - Listener:
    - Ctrl-X Ctrl-F command to force submission of unbalanced line.
    - dot file security tests improved.
      - permissions of .txr_history files checked also
      - if permissions on .txr_profile or .txr_history are
        bad, txr checks and diagnoses the user's umask.
  - tags.tl script:
    - now handles txr files: define and bind directives,
      as well as Lisp forms in @(do ...).
    - now follows load forms and processes defpackage.
    - each file read in new temporary package, and
      restores list of packages after each file.
  - Build:
    - Now builds cleanly with -Wextra under GCC 7+.

  Bugs

  - tags.tl:
    - backslashes not escaped in tags file.
    - macro-time forms not handled.
  - configure:
    - quote characters handled in config variable values.
  - Doc:
    - existing lineno argument of read and iread documented.
  - Hashing:
    - flaw in weak hash algorithm leading to spurious retention in situations
      when keys are weak, but values have reference to keys, or vice versa.
    - caused streams and parsers to leak.
  - Pattern Language
    - addressed spurious retention issues, causing memory
      growth proportional to the amount of input scanned.



                                    TXR 234
                                   2020-03-25


  Features

  - New base64url encoding:
    - :frombase64url, :tobase64url filters.
    - base64url-encode, base64url-decode and other functions.
  - Compiler:
    - When a TXR Lisp hash-bang script is compiled, the
      execute permissions are now propagated to the
      compiled file, too.
  - Editing support:
    - tags.tl script can now be compiled by compile-file,
      and no longer scans files twice.
  - GC:
    - small memory support: ./configure --small-mem.
    - reduces start-up footprint and size of incremental
      heap allocations.
  - Listener:
    - All major delete operations now yank the deleted
      text into the clipboard.
  - Hashing:
    - hash-uni function has two useful new functional
      arguments in addition to the join function.
  - Lib:
    - apf and ipf functions take additional arguments
      which are retained and inserted into the apply call.
    - search function now available under the name contains.
      - contains reverses the arguments:
        (search seq it) -> (contains it seq)
  - OOP:
    - more efficient stored argument in method and umethod.
      - (mapcar .(foo 1 2 3 ...) objlist) now allocates one
        special object that stores the 1 2 3 ... args
        compactly, rather than consing a list.
      - more use of this mechanism will be made going forward.

  Bugs

  - Regression in open-process dating to TXR 228.
  - The hash-count value of weak hashes was not maintained
    when the garbage collector removed lapsed entries.
    This was broken from the start; never implemented.
  - tags.tl: correctly take advantage of FTW_ACTIONRETVAL
    on glibc.
  - listener:
    - Del key not copying to clipboard, rendering it
      inequivalent to Ctrl-D.
    - Ctrl-W, when deleting a visual selection and the
      previous word, not recording undo history properly.



                                    TXR 233
                                   2020-03-08


  Features:

  - Lib:
    - crypt function now validates arguments rigorously
      before calling underlying C library function,
      which likes to crash with bad arguments.
    - new meq, meql and mequal functions for testing whether
      left argument is equal to any of the remaining arguments.
    - new assq and assql functions, so TXR Lisp now supports
      Ashwin Ram's (cdr (assq key a-list)) as written.
    - New "cumulative" option type in getopts:
      - multiple occurrences of cumulative option are
        accumulated into a list.

  - Vim support:
    - New utility: tags.tl is a utility for generating Vim-compatible
      tags from TXR Lisp sources.
      - can work in conjunction with ctags: ctags can add
        tags to a file generatd by tags.tl and vice versa.
    - Vim syntax files: the : character is no longer an identifier
      constituent.

  - Cygwin:
    - run and sh functions now use spawnvp instead of fork.

  - Listener:
    - Now appends new entries into .txr_history instead of
      overwriting it, helping uses who have multiple interactive
      invocations of txr.
    - History can be saved early at any time with :save command.
    - If no new lines have been entered when quitting, no
      history saving takes place.

  Bugs:

  - fixed broken inequality string comparison:
    - problem caused by string comparison functions misinterpreting
      the return value of cmp-str, which happens to work in the
      expected way on newer Glibc versions.
    - affected functions were str<, str>, str<=, str>= and less;
      indirectly, anything using any of these by default like
      sort, sort-group and so on.
  - @(line) directive now obtains correct line number
    in horizontal mode instead of zero.
  - chmod tests now work on platforms where sticky bit
    manipulation is restricted.
  - Fixed broken semantics of less comparison for symbols, allowing
    both (less a b) and (less b a) to be false, when a and b are
    different symbols having the same name.
  - Fixed breakage in getopts: processing of short options.
  - Fixed missing fnm-extmatch variable (related to fnmatch function)
    which should be defined on platforms that have FNM_EXTMATCH.



                                    TXR 232
                                   2020-02-09


  Features:

  - POSIX:
    - chmod function now supports symbolic modes of the chmod utility
    - chmod and stat nown work on streams and file descriptors
      - fstat now just alias for the same function as stat
    - added utimes, lutimes functions for updating timestamps
    - added mkfifo function
    - added chown and lchown
    - added rmdir
    - ftw now throws exception on failure
    - new copy-file and copy-files funtions
    - new recursive processing functions:
      - recursive copy: copy-path-rec
        - can copy symlinks, preserve timestamps, perms, ownership
      - recursive chmod: chmod-rec
      - recursive chown: chown-rec
      - recursive delete: remove-path-rec

  - Packages:
    - new merge-delete-package function

  - Build:
    - config.log file no longer generated by configure
    - New reconfigure script is generated
      - run reconfigure to conveniently repeat the same configuration

  - Exceptions:
    - New retry and skip exceptions under restart hierarchy

  - Buffers:
    - file-get-buf now has optional byte count and offset params
    - file-put-buf takes optional offset argument
    - new function file-place-buf: like file-put-buf but doesn't
      truncate if file exists

  - I/O:
    - new mode supported by open-file: "m": open for modification:
      - like "w" but doesn't truncate when file exits
      - E.g. "m+b": open for writing and reading, binary, don't truncate

  - Misc: - ensure-dir returns nil when directory already exists, t otherwise
    - with-resources macro takes multiple cleanup forms for each resource
    - New coded-length function for calculating UTF-8 length of string
    - open-files and open-files* now take an optional mode argument
    - numerous documentation fixes

  Bugs:

  - Fixed regression: @(skip :greedy) broken.
  - FFI: broken handling of undimensioned character arrays
    (no UTF-8 conversion)
  - mknod: third argument now optional, as documented
  - ensure-dir: fail if object exists and is not a directory
  - compiler: bug in compilation of catch form, causing
    "frame level mismatch" exception
  - packages: fixed lack of documented defaulting of package argument in
    several functions
  - copy-file: now detects source object is a directory, and avoids
    creating the target object in that case before failing
  - the internal c_str function now rejects symbolic arguments
    - some functions in TXR that were documented as requiring strings
      had the undocumented feature of accepting symbols, due to this
      behavior of c_str
  - listener now catches exceptions during gathering of completions,
    preventing TXR from bailing in that case
  - fixed incorrect return value of fill-buf and fill-buf-adjust
  - buf-set-length was not consistently setting newly allocated bytes
    to the requested initial value



                                    TXR 231
                                   2020-01-12


  Features:

  - compiler:
    - New function: compile-update-file for compiling
      a file only if necessary.

  Bugs:

  - gc:
    - aarch64 corrupt behavior due to not scanning for
      roots sufficiently far into the topmost (lowest address)
      stack frame.
  - build:
    - problem building on musl: sysif.h header
      referencing undeclared type off_t.
    - build breakage on big endian systems when
      libffi disabled.
    - double definition of FLO_MAX_DIG in config.h
      when configuring under musl.
  - misleading diagnostic when the name of builtin macro
    is defined as a function or vice versa.
  - incorrect FFI test cases (targeting glob function),
    leading to crash on musl.
  - hash:
    - equal-based hashing not traversing the key field
      of a tree node.



                                    TXR 230
                                   2019-12-20


  Features:

  - build: PIE (position-independent executable) builds are disabled.
    - PIE caused a crash in non-local transfer logic.
    - causes an 22% or more penalty on 32 bits x86.

  Bugs:

  - FFI: fixed bug in implementation of newly added zchar type.
  - mitigated crash in non-local control transfer logic (extended_setjmp)
    caused by PIE executable compilation
    - PIE is now enabled in some leading distros.



                                    TXR 229
                                   2019-12-14


  Features

  - OOP:
    - multiple inheritance now supported.
  - FFI:
    - FFI structs now allow initforms in slots.
      - limited evaluation semantics
    - New zchar type for defining arrays char that
      are optionally null terminated.
  - math:
    - hyperbolic functions and their inverses added.
  - buffers:
    - buf-list function: convert buffer to list of bytes.
    - buffers support list ops like car, cdr.
  - getopts:
    - new define-option-struct macro for simplified
      specification of command line options.
  - path testing:
    - new path-dir-empty test for empty directories.
  - disassemble: improvement in output.


  Bugs

  - issue with .? not parsing as a top-level expression.
  - listener: serious bug in balanced line check.
  - intern-fb: bug in optional argument handling.
  - load: wastefully gathered source loc info for .tlo files.
  - OOP: serious stability bug in static slot inheritance logic.



                                    TXR 228
                                   2019-11-19


  Features

  - Syntax:
    - New null-safe slot access operator .?:
      - a.?b means: (if a a.b), with a evaluated once, of course.
      - .?b means (lambda (arg) (if arg arg.b)).
  - Hashing:
    - New hash-invert function for reversing a hash table
      (values become keys and vice versa).
    - New hash-reset function to restart a hash iterator,
      possibly with a different hash.
  - Lib:
    - New identity* function; like identity, but with flexible
      arguments.
  - Expander:
    - expansion now interruptible with Ctrl-C
  - System Interface:
    - stat function now exposes high resolution time stamps.
    - open process supports a new < > syntax in the mode string, for
      arranging file descriptor redirections.
      - E.g. redirect stderr of gcc to stdout, like shell's 2>&1:
          (open-process "gcc" "r>21" '("foo.c" "-c"))
    - new open-subprocess function
      - like open-process but allows caller to specify Lisp funtion to execute
        in child process, before the specified program is executed.
      - executing a program is optional in open-subprocess
  - GC:
    - GC now gives memory back to malloc when all objects in a heap
      block are freed; on GNU/Linux this results in a munmap which
      gives back the memory the OS.
  - Buffers:
    - new functions for buffer-integer conversion: buf-int, buf-uint,
      uint-buf, int-buf.
  - FFI:
    - These carray functions were renamed: carray-unum, carray-num,
      unum-carray and num-carray.
      - "num" changes to "int"

  Bugs

  - Expander:
    - fixed a situation producing bogus undefined variable warnings.
  - Evaluator:
    - bugfix: eval was expanding the form in a null macro environment,
      yielding spurious warnings when eval is used with an eval argument.
    - now expands in a macro environment derived from the passed-in
      eval environment.
  - op macro:
    - Wrongly producing backwards-compatible behavior for compat values
      up to 255, rather than up to 225.
  - System Interface:
    - bugs fixed in path-file-p, path-dir-p, path-symlink-p, path-blkdev-p,
      path-chrdev-p, path-sock-p, path-pipe-p as well as
      path-strictly-private-to-me-p.
    - close-on-exec regression: not setting close-on-exec flag for pipe.



                                    TXR 227
                                   2019-10-26


  Bugs

  - showstopper in configure script



                                    TXR 226
                                   2019-10-25


  Features

  - New data types: binary search trees and their nodes.

  - buffers:
    - now comparable for inequality with less function.
    - convenience functions buf-str and str-buf for
      converting between a string and a buffer holding UTF-8.
  - gc:
    - Heap objects are now more strictly aligned in memory,
      allowing for a faster in-heap test in the garbage collector.
  - hashing:
    - Better use is made of the hash seed for lists and vectors.
    - New feature: eq-based hash tables.
    - Performance improvements: recompile time of the .tl files
      in stdlib improved by 10%.
  - eval & environments:
    - symbol-function supports lambda expressions.
    - accessors now provided for additional function properties:
      - number of fixed and optional args
      - is the function variadic
  - op:
    - new @rec metavar for self reference, allowing anonymous recursion
    - do behavior revised in light of mismatch between documentation
      and implementation.
    - new macro ldo: version of do that inserts left argument.
  - lib:
    - copy-cons now copies lconses and is more efficient.

  Bugs

  - Build: added forgotten "alloca.h" header into version control.
  - Improved overflow detection in string catenation.
  - gc:
    - fixed bug in heap bounding box calculation, making
      the in-heap test less efficient.
  - func-get-name: bogus return for nil argument.
  - stdlib: numerous incorrect uses of compile-error.
  - circle notation:
    - on read, not handling circular refs in hash userdata.
  - lib:
    - memory leak in bit function.
    - fixed buggy type tests that application code could subvert.
    - affects hashes, carrays, random-state objects, regex char sets and
      struct types.
  - hash:
    - use unsigned type ucnum consistently for hash values.
    - do not negatively index into hash table vector.
    - traversal limit observed when traversing keys that are vectors
      and hashes.
    - strings keys now subject to traversal limit, at a rate of 4:1:
      four characters count as traversing one node in the object graph.
  - eval:
    - eval function wrongly passed eval environment to macroexpand.
  - lib/vm/compiler:
    - not handling excess number of function arguments, leading
      to overflow in the fixparam field in the function object.



                                    TXR 225
                                   2019-09-11


  Features

  - Lib:
    - tailp function added
    - Unicode BOM character object now prints as #\xFEFF rather than
      #\ followed by a literal zero-width non-breaking space.

  - OOP:
    - cons cell used in non-cached slot lookup now recycled.
    - access to common special methods like length now optimized.
    - objects with length or car method now recognized as subtypes
      of sequence.

  Bugs

  - Interpreter:
    - issue between in let* and continuations: copy-env throws error.

  - list-builder:
    - significant rewrite of some internals.
    - fixed broken self-appending and deviation from append semantics.

  - Type system:
    - subtypep now reports string and lcons as subtypes of sequence.
    - objects with only length method now reported as sequences.

  - Lib:
    - Incorrectness in digits and digpow functions.
    - bracket function incorrect when some or all arguments
      passed via apply mechanism.



                                    TXR 224
                                   2019-08-29


  Features

  - compiler:
    - load-time now optimized away if top-level form.
      - argument of load time top-level form if load-time is
    - improved code generation for destructuring.
    - case of wasteful nil-initialization of local variable elided.

  - lib:
    - list-builder now has dequeue capabilities:
      - delete item from head and tail
      - new buildn macro to complement build:
        - returns last form instead of constructed list
    - new functions find-symbol, find-symbol-fb:
      - find symbol in package, with or without fallback lookup.
    - new function intern-fb:
      - like intern, but with fallback lookup.
    - new function cptr-buf:
      - obtaining cptr object referencing buffer contents.
    - MD5 digest support.
    - State-object-based, multi-step SHA-256 and MD5 digesting.
    - More efficient SHA256 string hash (not using string-byte-input stream).

  Bugs

  - lib:
    - regression in where function: not working for non-list sequences.
  - parser:
    - symbols no longer interned within object suppressed by #; notation.
    - uninitialized flag field in parser structure:
      - affects TXR 157 through 223.
      - affects circular notation like #1=(#1#) embedded in the
        pattern language.
    - cosmetic issue in bad character diganostics from lexical analyzer.
  - build:
    - remove_flags configure option was broken;
    - compiler flags were duplicated in the commandline.
  - unwind:
    - GC problem: neglect to GC-protect global unhandled-error structure.
  - compiler:
    - miscompilation of infinite for loop: (for init (nil) step ...)
      - where terminating condition is explicitly given as (nil ...)
        rather than implicitly as ().
    - destructuring:
      - error mismatch diagnostics indicating wrong substructure.
      - inappropriate special handling of colon args to optional params.
      - incorrect scoping for optional param init-forms in destructuring.
  - trace:
    - failure to remove trace from traced function being redefined.
    - redefinition of a traced method resurrects old version, clobbering new.



                                    TXR 223
                                   2019-08-14

                             Celebrating Ten Years!

  Features

  - Pattern Language:
    - small performance improvement in @(collect) and @(coll)
    - important semantics improvement in :vars feature of @(collect)/@(coll).
  - lib:
    - base-name now takes second optional argument: suffix to strip away.
      - just like POSIX basename command
  - compiler:
    - better code generation for immediately-called lambda
    - improved code from pop macro
  - listener:
    - faster history saving due to taking advantage of buffered I/O
      instead of flushing each line.

  Bugs

  - Fixed issues in compilation of immediately-called lambda:
    - incomplete optional parameter support.
    - evaluation order problems.
    - subtle scope problems.
  - reverse function no longer complains about a #<garbage ...> object
    when given an unsuitable argument.
  - added missing autoloads for a number of macros:
    - test-set, test-clear, compare-swap, test-inc and test-dec
    - because of the way compilation of the library works, these
      documented operators were unavailable even when their containing
      module was loaded due to some other symbol.
  - fixed regression: lack of file and line number reporting for
    unbound variables.



                                    TXR 222
                                   2019-07-30


  Features

  - FFI:
    - type.a.b.c syntax for navigating struct and union types.
      - for instance given (struct foo (x int)):
        - foo.x denotes int
        - (sizeof foo.x) is same as (sizeof int)
    - elemtype is a type operator now, not only macro:
      - (struct foo (x int) (y (elemtype foo.x))) declares y of type int.
    - elemsize and elemtype work on enums.
      - worked previously, now documented.
    - structs and unions may now be self-referential:
      - (struct foo (datum int) (next (ptr (struct foo))))
      - type system will convert a Lisp linked list to C, and vice versa.

  Bugs

  - FFI:
    - null pointers handled in "in" operation:
      - e.g. when struct argument passed into a C function contains
        pointer that is nulled out.
        - struct is converted back to Lisp.
  - parser:
    - fixed failure to pinpoint start of unterminated expression,
      when it starts on line 1 of the stream.



                                    TXR 221
                                   2019-07-23


  Features

  - FFI:
    - Structures with flexible array at the end ("flexible structures")
      are now supported.
    - FFI types now have a dynamic size.
      - this can be explored with two-argument form of sizeof operator,
        which takes a prototype Lisp object as an argument.
        - (sizeof (array uint32) #(1 2 3)) -> 12.
    - Previously undocumented ffi-out function is now documented.
  - hashes:
    - New hash-zip function for constructing a hash from
      a separately given sequence of keys and sequence of values.
  - lib:
    - relate function optimized with hashes.

  Bugs

  - FFI:
    - Buffer operations ff-put and others now work with variable length arrays
      instead of accessing out of bounds.
  - TXR:
    - Fixed 2019-04-21 regression causing the file name to be missing
      from error messages.



                                    TXR 220
                                   2019-07-08


  Features:

  - New make-byte-input-stream function for abstracting byte streams
    creation over objects of different kinds.
  - sha256:
    - program can specify buffer where sha256 is placed to avoid
      allocating a new one.
  - sha256, crc32:
    - stream hashing operations internally use recycled I/O buffer.
  - New function buf-put-buf: more efficient way to plant one buffer's
    contents into another.

  Bugs

   - @(define): fixed problem in parametr list code walk, leading to spurious
    undefined variable warnings.
   - @{var1 var2}: fixed November 2011 regression: not working when var2
     is bound to a regex or string list.
   - Broken carray-replace repaired.
   - overlapping use of replace family of functions:
     - semantics addressed in documentation
     - implementation fixed to avoid overlapping memcpy
   - compile-file:
     - no longer silently ignores top-level forms that are atoms or that
       macro-expand to atoms.
     - top-level atoms are compiled to produce diagnostics; then
       the compilation result is discarded.



                                    TXR 219
                                   2019-07-01


  Features

  - Base64 functions now work on buffers.
  - New sha256 and crc32 functions.
  - Sequences improvements:
    - numerous internal changes for better maintainability and performance
    - buffers and carrays considered sequences
      - (append #b'...' #b'....) works
      - nconc ditto
    - nullify function handles hashes, buffers and carrays
    - empty function handles buffers and carray
    - in function allows testfun and keyfun on hashes
  - defset now provides temporary variable for store value, so store form
    doesn't have responsibility of once-only evaluation.

  Bugs

  - lnew: two regressions fixed.
  - at-exit-do-not-call: logically reversed return value fixed.
  - seq-begin: due to bug, worked only with lists.
  - :key parameter macro: fixed bug causing key values to go to
    wrong variables.
  - various macros that use the constantp function were calling it
    with a null environment.



                                    TXR 218
                                   2019-06-19

  Features:

  - Lib:
    - new hash-peek function.
    - New seq-peek function for peeking at next item in iteration.
    - Sequence functions sub, replace, and their list, vec and
      str specializiations have been substantially rewritten to
      tighter semantic specifications.
      - The sub- functions are also all accessors now.
    - cat-str, split-str and spl now accept character object as separator.
    - New bitset function for breaking integer into bit positions.

  - FFI:
    - sub-buf accessor and replace-buf function introduced.
    - Semantics of variable length zarray made more sensible.
    - carray-sub accessor is improved; the syntactic place works
      via carray-replace, rather than generic replace.

  - Compiler:
    - A "--lisp" argument in the hash bang line of a source file
      is translated to "--compiled" in compiled file's hash bang line.

  Bugs:

  - Command line:
    - regression: unsuffixed hash bang script wrongly treated as Lisp.

  - Lib:
    - Multiple bugfixes in replace-list, such as negative indices
      in index list assignment now follow the usual convention.
    - select function handles negative indices; internals rewritten.
    - logcount crashing for fixnum arguments on 64 bit builds.

  - FFI:
    - carray-replace now performs index list assignment like
      other replace functions.
    - carray-refset now allows negative indices, with usual conventions.
    - buffers likewise support negative indexing.

  - GC:
    - stability issues fixed in make-struct, make-package and
      the arithmetic function ash.

  - Expansion:
    - Several hygiene bugs fixed in defset.



                                    TXR 217
                                   2019-06-10

  Features:

  - Integrated POSIX fcntl function, supporting
    F_SETFD, F_SETFL and F_SETLK.
  - errno constants are now provided.
  - POSIX close function added.
  - Windows installer associates .txr, .tl and .tlo suffixes with the
    txr executable.
  - fixnum range now includes the most negative two's
    complement value that fits into its representation,
    rather than excluding it.
  - place macros: slight adjustment to expansion strategy.

  Bugs:

  - Fixed failure to handle most-negative integer value in situations
    when a Lisp integer is converted to a fixed C integer.
    - Fixes a regression in the minimal Windows program example, in which
      (defvarl CW_USEDEFAULT #x-80000000) appears.
  - path-private-to-me-p function was considering superuser as
    just another user
    - properly locked down root-owned file was not considered private.
    - same with path-strictly-private-to-me
  - list length: off-by-one error for huge lazy lists that overflow
    a pointer-wide counter.



                                    TXR 216
                                   2019-05-20


  Features

  - Doc: .cblk/.cble replaced by .verb/.brev and .mono/.onom.

  - Debugging:
    - crude debugger removed
    - work under way for new debugger
    - backtraces for interpreted code, enabled by --backtrace

  - Exceptions:
    - new catch** macro which provides a description of each
      clause

  - I/O and system interface:
    - Streams support third variant of indentation: "force indent off".
    - Streams support depth and length limitation on objects.
    - More nuanced exceptions: exception types distinguish permission
      from non-existence and other errors.

  - OOP:
    - New function, allocate-struct: no frills, fast allocation
      of instances.
    - New function struct-type-name.
    - New macros new* and lnew*: these evaluate type expression.
    - New "derived hook": a class function called derived
      is invoked when a class is the target of inheritence.

  - Lib:
    - Substring operation no-op case now returns original string
      instead of copying.
    - New window-mapdo function: non-accumulating window-map.

  - System:
    - New cptr-size-hint function informs the garbage collector of
      the size of a foreign array.
    - load function now tries suffixed versions of path first,
      (.tlo followed by .tl) then falls back on trying unsuffixed.
    - *load-path* is bound to the actual path used to open the file,
      rather than the unsuffixed input path.
    - compile-file now resolves relative paths relative to existing
      *load-path* value, just like load does.
    - it is documented that compile-file sets *load-path*.
    - Input file search strategy of compile-file is harmonized
      with that of load.

  Bugs

  - tagbody: code replication bug leading to excessively
    large translation instead of jumps into single code vector.
  - issue in interaction between @(output) and lazy-list-valued variables.
  - MPI: floating-point math eliminated from radix length calculation.
  - compiler:
    - bug leading to "frame level mismatch" in VM execution.
    - triggered by special variables used as optional parameters in lambda.
  - build: allow $(pwd)/configure to work.
  - long-running regression in apply function has been fixed.
  - parser: line numbers off by one for hash bang files.



                                    TXR 215
                                   2019-03-30


  Features

  - Math:
    - User-defined arithmetic types are now possible.
      - objects which implement certain methods accoring to the
        documentation can be passed into arithmetic functions.

  Bugs

  - Listener:
    - we now ensure that the .txr_history as well as the temporary
      files created by the Ctrl-X E command (edit in external editor)
      are readable only to the user: perms rw-------.



                                    TXR 214
                                   2019-03-22


  Features

  - Improved expt function
    - raising integers to negative integers works.
    - raising zero to negative exponents throws division by zero.

  - Floating-point error checking
    - Infinity and NaN results are turned into exceptions rather than
      propagating as #<bad-float>

  - New generic sequence iterator objects.
    - seq-begin, seq-next

  - Function where becomes lazy.

  - Optimization in various lazy list processing functions.

  - Lazy cons improvements:
    - New lcons-car and lcons-cdr functions can access
      fields in a lazy cons without triggering the update function.
    - make-lazy-cons takes two optional arguments to initialize
      the car and cdr fields
    - thus, propagation of state in lazy list generation can use
      the lcons itself as temporary storage.

  - OOP:
    - Type struct introduced:
      - all struct instances have struct as a supertype

  Bugs

  - Parser:
    - out of range floating-point tokens now trigger error
      rather than turn to nil.



                                    TXR 213
                                   2019-03-08


  Features

  - new load-for function:
    - loads another module conditionally on a variable,
      function, struct or package not being defined.

  - listener:
    - input limit raise from 1023 to 4095 characters.

  - new defset macro:
    - like defsetf in ANSI CL; define function-like syntactic places easily.

  Bugs

  - listener:
    - fixed some lingering line wrap glitches in optimized
      character append logic.
    - fixed buffer overflow when loading history, when lines
      are too large for the maximum input length.
    - fixed hang when evaluation produces cirular object,
      even though *print-circle* is on.

  - library symbol regression:
    - two library symbols regressed into the sys package: the --
      delimiter in :key parameter lists and the lnew (lazy new)
      for instantiating structs lazily.

  - disassembler:
    - operands of getlx, setlx instructions disassembled wrongly.

  - compiler:
    - fixed two cases of incorrect handling of lambda expressions
      that are immediately called.
    - fixed (fun (lambda ...)) operator yielding an interpreted function,
      even though it's compiled.

  - core semantics:
    - lambda expressions are no longer fboundp.
    - incorrect macro environment handling when expanding tree-bind.



                                    TXR 212
                                   2019-02-24


  Features

  - OOP:
    - more efficient new operator: now avoids extraneous consing.

  - Printer:
    - changed conditions for when symbols are printed with a package
      prefix.
    - the code is also optimized, and handles more cases when symbols
      should be printed with the #: uninterned prefix.

  - Lib:
    - pprof macro generates much smaller code.
    - faster "highest bit set" calculation, using GCC primitives.
    - new bracket function.

  Bugs

  - GC:
    - fixed GC bug in the parser, in relation to parsing circular notation.
    - fixed GC bug in clearhash function.
    - fixed two GC bugs in FFI: in the enum type and cptr type.

  - Compiler:
    - Fixed miscompilation of (prof <form>) in cases when <form>
      is known at compile-time to return nil.

  - Listener:
   - Fixed hang issue that occurs when evaluation produces a circular
     object even though *print-circle* is turned on.
   - Fixed Ctrl-X Ctrl-P not being mentioned in the "cheatsheet".



                                    TXR 211
                                   2019-02-18


  Features

  - App delivery:
    - new function save-exe.
    - new txr-exe-path variable.

  - Regex:
    - new functions scan-until-match and count-until-match, related
      to read-until-match (scanning for regex inside I/O stream).

  - Lib:
    - new functions fill-buf-adjust and buf-alloc-size.

  Bugs

  - GC:
    - Objects on which finalizers were invoked were being retained until the
      next full GC, instead of being reclaimed at the next incremental GC.

  - Listener:
    - Fixed buffer flow in reading external file.
    - When editing in external editor, preserve the file if it is too large
      to be read back into the command line.
    - Fixed vertical skip problem in multi-line mode, related
      to the recent regressions.

  - OOP:
    - When struct types are removed, their IDs are now recycled, preventing
      struct ID exhaustion.



                                    TXR 210
                                   2019-02-14


  Features

  - Hashing:
    - New functions hash-symdiff (symmetric difference) and hash-from-alist.
    - Performance optimizations.

  - Library:
    - diff, isec and uni work efficiently for non-list sequences, and
      support hashes.
    - New function symdiff (symmetric difference).

  Bugs

  - hash-uni was wrongly calling the join-func also for keys that are only in
    the left hash, rather than just keys that are in both hashes.
  - Listener regression in TXR 209: hitting Enter in multi-line mode causes
    ^M to appear instead of advancing to the next line.



                                    TXR 209
                                   2019-02-08


  Features

  - Compiler:
    - string literals and bignums now de-duplicated in compiled files.
    - caseql generates slightly better code in the integer jump table case.
    - new function dump-compiled-objects
      - allows applications to programmatically generate compiled files
        out of individually picked compiled forms.

  - Library:
    - The sum and prod functions now take an optional keyfun argument.
      - Example: add up sizes of "*.txt" files:
          (sum (glob "*.txt") [chain stat .size])

  Bugs

  - Compiler:
    - The defvar/defparm macros didn't take into account compilation, only
      marking the symbol special at expansion time, but neglecting to emit the
      code to do that when the expansion is executed.
      - This works for interpreted code, of course, but under compilation it
        means that if we compile a (defvar x) in a file with compile-file, the
        resulting compiled file will produce a global lexical x, not a
        dynamically scoped x.

  - Build:
    - The library is no longer compiled twice: the .tlo2 files are gone.
      - The idea that there could be a legitimate difference in the files
        compiled by a partially-compiled image, versus a fully-compiled image
        was wrong-headed. They are in fact the same, unless there is a bug.
        The interpreted compiler must produce the same results as the compiled
        compiler, period.
      - In fact, there was a difference between the "stage1" and "stage2"
        compiled files: it was caused by the above defvar bug.

  - Pattern Language:
    - When a call to a user-defined @(function ...), all on a line by itself
      (vertical mode) faces the end of input (EOF), the function was not being
      called.
    - Functions were able to shadow horizontal directives.

  - Listener:
    - November 2018 regression that caused screen update glitch when a long
      line wraps.
    - The caret notation ^@ was not used for the NUL character; it was sent to
      the terminal as-is (ignored by most terminals), but counted by our editor
      as having a display width of 1.
    - The ^@, ^A, ... caret notation was not being used for control characters,
      when these were inserted at the end of the line in the optimized
      no-refresh case.

  - Parser:
    - In string literals, handle embedded byte properly, mapping it to \pnul.
    - In string literals, diagnose bad UTF-8.

  - FFI:
    - make-zstruct/znew were blowing up when the FFI struct type has padding
      slots, indicated by the symbol nil.
    - deffi-cb-unsafe macro was not being auto-loaded.
    - ffi-make-closure's safe-p parameter's defaulting was mishandled, causing
      it to be always true even when given a nil argument.
      - thus deffi-cb-unsafe behaved like deffi-cb.
    - In FFI closure dispatch, clear previous state related to exception
      handling, which covers situations when we return to foreign code
      due to an exception, but the foreign code calls down again into
      a closure rather than itself bubbling up to Lisp.



                                    TXR 208
                                   2019-01-28


  Features

  - The -f command line option can be used with the Hash Bang Null Hack.

  Bugs

  - Showstopper bug in copy-hash also affecting hash-diff.
  - Pattern Language:
    - Bug in @(next) directive's :nothrow
      - @(next "file" :nothrow) wrongly reading from standard input
        if opening "file" throws.
    - @(next expr :nothrow) not catches error exception
      thrown by Lisp code.
      - The documentation can be interpreted as requiring this
        and the expectation is intuitive.
      - Same with @(next :list <expr> :nothrow) and
        @(next :string <expr> :nothrow).



                                    TXR 207
                                   2019-01-26


  Features

  - Internal code structure and performance improvement in the areas of FFI,
    integer types and bignums.

  Bugs

  - FFI: fixed bugs in the be-int64 and le-int64 types,
    making these usable.
  - Build problem: "make install" failing for compiled .tlo
    files when using a separate build directory.



                                    TXR 206
                                   2019-01-18


  Features

  - deffi, deffi-var and deffi-sym macros now helpfully diagnose if they
    require a surrounding with-dyn-lib macro that is missing.

  Bugs

  - fixed bugs in vec-carray and list-carray functions.
  - fixed bug in addition involving a bignum and small integer.
  - fixed bug in random and rand function: not generating values
    over the full range specified by the modulus.



                                    TXR 205
                                   2019-01-15


  Features

  - New function square for squaring a number; faster for bignums.
  - FFI:
    - array handling is more forgiving: Lisp sequences shorter than the array
      can be converted without error; the array is null padded.

  Bugs

  - build:
    - fixed problem related to alloca.h, reproduced under the Musl C library.
  - compiler/assembler:
    - fixed several bugs that prevent the compilation of functions with
      deeply nested lexical scopes or large numbers of local variables,
      yet well within the VM limits.
  - FFI:
    - Fixed issue in (array n char) type's put operation: this FFI type
      does not null-terminate, but was doing it when truncating strings
      longer than n.



                                    TXR 204
                                   2018-12-18


  Features

  - New function nzerop: negates zerop so we don't have to
    write (not (zerop x)).
  - Turning off -fstack-protector gcc option foisted by some distros
    - improves VM performance about 7% in loop benchmark.

  Bugs

  - defvar:
    - fix variable being in a state of limbo if the
      initializing expression throws.
  - build:
    - we were ignoring the LDFLAGS variable from
      the make command line or environment.
  - character handling:
    - fix UTF-8 decoder bug causing failure to decode four-byte
      sequences correctly.



                                    TXR 203
                                   2018-11-29


  Features

  - Optimizations in vm.
  - pprint keeps colon on keyword symbols.
  - New functions in-range, in-range*.

  Bugs

  - logxor: broken function fixed.
  - caseq*/caseql*/casequal*: fixed broken handling of
    clauses containing multiple keys: (caseql* x ((a b ..) ...)).



                                    TXR 202
                                   2018-11-22


  Features

  - Some optimizations in arithmetic library, compiler and virtual machine.
  - New function copy-fun:
    - copies functions, making a duplicate of their environment.
    - can take a "snapshot" of a closure.

  Bugs

  - compiler:
    - compile function now correctly handles functions that carry a lexical
      environment.
      - interpreted environment gets compiled into VM environment.
  - Build issue upstreamed from Void Linux distro:
    - On Musl library, <sys/select.h> header is required for fd_set.



                                    TXR 201
                                   2018-11-07


  Features

  - load now tolerates and ignores hash bang lines instead of
    trying to parse them as syntax.
    - previously, hash bang was only supported in files invoked
      from the txr command line.
  - some internal improvements related to gc.
  - improved type mismatch diagnosis in many library areas
    - more instances of which function triggered mismatch.

  Bugs

  - compiler:
    - compile-file was incorrectly handling situation with a defpackage
      followed by symbols from that package in the same file,
      resulting in a file that won't load.
  - load:
    - exception no longer thrown when file is empty.
  - a few instances of error messages containing a quoted
    function name.



                                    TXR 200
                                   2018-11-05


  Features

  lib:
  - The form expander is now a public, documented feature,
    including expand-with-free-refs, which informs about free variables
    occurring in a form.
  - New copy-buf function, called by copy for buf objects.

  compiler:
  - Better code generation for dwim forms.
    - global functions and global lexical variables in dwim
      forms are handled more efficiently.
      - no more lisp-1-style dynamic lookup at run-time; compiler resolves
        references to function or variable bindings.
    - a global function in the first position is dispatched the same as a
      regular call, resolved at compile time to the function binding; so
      [mapcar list '(1 2 3)] generates exactly the same code as
      (mapcar (fun list) '(1 2 3)) using the gcall instruction.

  listener:
  - performance improvements in multi-line edit mode:
    - refresh operations are avoided for cursor movements, incomplete line
      warning flash, and character appends at the end of the line.
    - much better copy and paste experience, and better experience on
      slow/lagged remote connections and serial lines.
  - uses temporary file for saving history.

  doc:
  - HTML table of contents "collapse all" logic doesn't
    hide the entire table, keeping the major sections visible.

  Bugs:

  - listener:
    - fixed abort on window resize (regression from Unicode work
      earlier in the year).
    - history now saved using temp file which is renamed after
      being successfully written.



                                    TXR 199
                                   2018-10-28


  Features

  - compiler:
    - hash bang in source files translated into compiled files.
    - more constant folding optimizations in equality comparisons.
    - de-duplication of code when compiling switch form whose branches
      share source code substructure (the basis for tagbody).
    - faster access to global lexical variables via two new VM instructions.
    - semantics change in handling of free variables:
      - undeclared variables treated as lexical rather than special.
      - defvar/defparm now warn if the variable was already used.

  - OOP:
    - improved diagnostics in uslot and umethod.

  - math:
    - new function random-float which produces evenly-distributed
      pseudo-random values in the range [0, 1).
    - functions exposed for floating-point rounding control.
    - new signum function.

  - lib:
    - list-builder methods rewritten for semantics and efficiency.
    - op-related macros rewritten in Lisp.
    - hashing function for floating-point values rewritten for efficiency.

  - evaluation:
    - top level forms under evaluation and compilation handled
      incrementally:
      - thus: if (prog A B) is a top-level form, then A will be
        macro-expanded and evaluated before B, so B can rely on
        A's expansion and compile-time effects to have occurred.

  Bugs

  - compiler:
    - fixed miscompiled empty test in for loop.



                                    TXR 198
                                   2018-07-06


  Features

  - Hashes:
    - Hash tables and the hash-equal function now use a hashing function keyed
      with a seed, providing a tool against hash collision DoS attacks.
    - New *hash-seed* special variable, gen-hash-seed function.
    - make-hash and hash-equal take optional seed argument.
    - hashes implicitly take their seed from *hash-seed*, which is initialized
      to zero (for repeatability).
    - seeding hashes is the application's responsibility; TXR will not
      automaticaly seed hashes.

  Bugs

  - Listener:
    - crash in selection yanking. This regression is
      a result of the recent "unicodization" of the listener.
  - VM:
    - compiled code now follows the situation when a function binding
      is deleted with fmakunbound and then a new binding is introduced
      for the same symbol.
    - source location info is no longer wastefully recorded for the forms
      that occur in compiled files.
  - Hashes:
    - equal function broken comparing two hashes: incorrect logic.
    - copy-hash not copying equal function pointer, causing garbage
      function pointer to be dereferenced when copied hash is
      compared for equality.
  - POSIX interface:
    - ftw funtion discovered broken (from initial implementation).
      Callback mechanism allocated four words on the stack, then
      put five arguments there. This was previously undetected, but
      recent improvements in args handling now caused ftw to assert.
  - Awk macro:
    - fixed nonworking (next); a regression caused by the Lisp compiler
      optimizing away (block ...) construct.



                                    TXR 197
                                   2018-05-27


  Features

  - logcount function:
    - counts one bits in non-negative integers, zero bits in negative ones.
    - closely based on ANSI CL logcount.

  Bugs

  - listener:
    - regression in 196: fatal exception if .txr_history
      file doesn't exist.
  - compiler:
    - failure to handle block* special form, and therefore also tagbody.
  - awk:
    - autload issue: compiled file containing awk expression won't load.



                                    TXR 196
                                   2018-05-18


  Features

  - Both the TXR Pattern Language and TXR Lisp now allow Unicode
    in identifiers.
    - Un-braced variables like @abc in the pattern language and
      string quasiliterals are excluded from this change.
    - Braced variables and Lisp symbols, including packag prefixes,
      may use Unicode characters.
    - Unicode spaces cannot be used in identifiers, and neither can
      various invalid characters.
  - The Interactive Listener now supports Unicode input.



                                    TXR 195
                                   2018-05-04


  Bugs

  - Overhaul of handling of parameters that are special variables.
    - was not implemented at all in interpreted destructuring.
      - compiled destructuring implemented it by using let.
    - had subtly wrong scoping semantics, not affecting most code.
    - was broken completely due to a regression in TXR 190
  - MacOS and Solaris ports:
    - fixed broken method for getting TXR's executable path, which
      caused TXR not to work unless invoked via full path.



                                    TXR 194
                                   2018-04-30


  Bugs

  - FFI:
    - issue causing inability to to encode the most negative signed
      32 bit integer on 32 bit platforms, and the 64 bit one on 64
      bit platforms.
  - compiler:
    - fixed situations when compiler generates immediate move instructions
      for integer operands that are too wide to be used as immdiate literals.
  - assembler:
    - fixed a situation in which a bignum integer was encoded as a literal
      using its bitwise pointer representation.



                                    TXR 193
                                   2018-04-26


  Features

  - compiler:
    - load-time special form, similar to load-time-value in ANSI CL.
      - evaluates an expression on file load whose value is treated as a
        literal object.
      - program doesn't have to define a top-level variable; load-time occurs
        anywhere in code.
    - code improvement in translation of
      - string quasiliterals
      - destructuring (tree bind, macro arguments, ...).
    - compiler now removes (block ...) constructs that look as if they are not
      needed.
  - vm:
    - big improvement in stack usage of running VM.
    - addressed some spurious retention issues.

  Bugs

  - autoload
    - fixed programs experiencing errors due to some library modules not
      loading.
      - caused by situations when the dependency from a library module A to B
        modules was keyed only to the macros provided by B, not B's run-time
        functions generated by the macros.
      - of course, compiled code doesn't refer to macros any more.
  - compiler:
    - fixed (return x) being mis-compiled as if it were (sys:abscond-from nil x).
  - awk: fixed multiple expansion of path/command argument in I/O redirection
    macros ->, ->>, <-, !> and <.



                                    TXR 192
                                   2018-04-19

  Features

  - compiler:
    - compiled files now marked with byte order indication
      - TXR compiled on big-endian will load compiled files made by TXR on a
        little-endian machine and vice-versa.
    - caseq/caseql/casequal optimized to table dispatch for characters and
      integers in dense range.
    - inline lambdas (lambdas that are immediately invoked) are now open-coded
      into let-based binding blocks.
  - parser:
    - Unterminated form errors now show the starting line number of the
      top-level form being read.
  - VM:
    - architectural change: display max depth reduced from 256 to 64 frames,
      but frames with maximum widened from 256 words to 1024 words.
    - object file major version bumped from 0 to 1:
      - compiled files from TXR 191 won't load.
  - lib/VM:
    - wasteful consing eliminated from apply function.
  - continuations:
    - documented differences in compiled vs intepreted behavior with respect to
      mutated lexicals.
    - new macros hlet and hlet* provided for binding lexical variables that are
      based in off-stack storage that isn't captured in continuations.

  Bugs

  - compiler:
    - fixed miscompilation of unwind-protect.
    - missing ((lambda ()) ...) call forms now handled
      - also optimized by open-coding.



                                    TXR 191
                                   2018-04-10


  Features

  - TXR Lisp now has a compiler and virtual machine.
    - individual forms and functions can be compiled
    - TXR Lisp .tl files can be compiled into .tlo object files
    - the Lisp parts of the library are now compiled.
      - TXR starts up some 3.5X faster when most of the
        library auto-loading is triggered.
  - Library:
    - new bignum-len function; get the "size" of a bignum efficiently.
    - ldiff function redesigned with more nuanced semantics.
  - Symbols/Packages:
    - package-prefix-interning now allowed in packages that have a
      fallback list.
    - application code is now read in a package called pub, not in
      the usr package.
    - usr package is devoid of spurious symbols; the Lisp library is
      read in the sys package.
  - Macros:
    - defmacro forms are no longer hackily evaluated at macro-expansion time:
      - evaluated normally, in apparent lexical env.
      - code which does things like:
        (progn (defmacro foo ...) (foo ...)).
        now requires (macro-time ...) around the defmacro.
    - optional parameters in macro-style parameter lists no longer support the
      colon hack for explicitly specifying a missing parameter.
      - only function calls have this feature now.
   - Printer:
     - improved line breaking of aggregate objects.
     - new function force-break exposed, related to this.

   Bugs

   - buffers: buf-get-* functions were not allowing the last byte of a buffer
     to be extracted.
   - structs: post-inits and finalization registrations are now correctly
     performed by reset-struct.
   - trace: several bugfixes in method redefinition check.
   - bignums: fixed broken single-digit bignum multiplication.
   - functions: fixed regression in function argument processing causing the
     failure to diagnose too many args.
   - expander: fixed neglect to add sequentially-bound variables to the
     expansion-time environment when they lack an init-form.
   - expander: fixed some neglected expansions in the sys:for-op special
     operator that implements the iteration forms like each and for.
   - expander: bugs/regressions in handling nil in parameter list expansion.
   - expander: optional parameters of functions were not being expanded in an
     environment in which the previous params are visible.
   - listener: fixed poor treatment of regex syntax in the code which prevent
     lines from being submitted when they
     are ill-formed.
   - gc bugs: fixed some incorrect mutations that break generational gc.
     - some in struct code
     - some in datagram socket code.
   - tagbody: fixed; was broken due to a regression.
   - packages: read/print consistency issue related to packgage prefixes fixed.
   - regex: read/print consistency problem related to double quote.
   - regex: double-free corruption bug related to use of canned
     character classes like \w.
   - hash: fixed broken with-hash-iter.



                                    TXR 190
                                   2018-02-18


  Features

  - Annoying limitation removed: lisp load now handles .txr files.

  - Listener:
    - new *listener-pprint-p* variable turns on use of pprint for
      evaluation results.
    - new *listener-greedy-eval-p* variable turns on a cascaded
      evaluation: values are subject to additional rounds of evaluation,
      whose results are also printed.


  Bugs

  - fixed bug "unbound function sys:l1-val" when using lop operator.
  - fixed expander bug causing (do set [@1 x] y) to be wrongly expanded.
  - autoload bugfix: symbols used for struct slots in standard library modules
    are now interned even if those modules are not loaded, so that they are
    treated properly under the package system.



                                    TXR 189
                                   2018-02-06


  Features

  - read and iread no longer record source-code location info
    unconditionally
    - now controlled by new *rec-source-loc* special variable.

  - OOP:
    - better abstract sequence support:
       - new: special methods rplaca and rplacd.
       - sub and replace function now redirect to lambda and
         lambda set methods.
       - car and cdr fall back on lambda method now if
         object has no car or cdr method.
       - refset defined for objects that have car method.

  Bugs

  - Fixed regression in read-print consistency of hash tables.
  - Fixed bug in sequence classification logic that caused
    objects to be reported as non-sequences.
  - Fixed nthcdr continuing to iterate up to n even after
    end of list reached.
  - Fixed neglected autoload registration for socket functions.
  - Fixed bug in source location recording, causing errors in
    code to be rported against incorrect file names and line
    numbers.



                                    TXR 188
                                   2017-12-19


  Features

  - New funtion grade
    - like grade up/down operators in APL.
    - returns indices into sequence in sorted order.
  - New macro feature: lexical macros can decline expansion.
    - lexical macro can decline to expand by returning original form.
    - lexical scope is searched outwards to find and try another macro.
  - Big hash change:
    - hash function now defauilts to :equal-based.
    - :eql-based keyword specifies hashing based on eql.
    - functions which take hash arguments follow suit: group-by, etc.
  - Streams new feature: structure delegate streams
    - OOP interface for creating objects that substitute into
      stream I/O operations.
    - stream-wrap base implementation for easily wrapping and
      adapting streams.
  - New functions rlist and rlist*: express discontinuous ranges easily.

  Bugs

  - append* and mappend*:
    - fixed unintentional, undocumented destructive behavior
    - fixed non-termination on infinite lists.
  - tail function now handles improper lists.
  - macro expansion bug fixed:
    - neglect to expand the output of a declined macro
    - must be treated as a function call or possibly a special operator
      - either way, may have constituent expressions that
        need expansion
  - prof: deal with overflowing performance counters.
    - we use a 64 bit type if we have it, and convert to bignum
      if and when required.
  - trace: fixed spurious "previously traced" warning on methods.



                                    TXR 187
                                   2017-11-18


  Features

  - Functional library:
    - lop:
      - "left op": new variant of op macro.
      - inserts free arguments on left rather than right.
  - Control flow library:
    - caseq, caseql and caseql expand to better code.
  - Sequences library:
    - find, find-if, find-max, pos, pos-if, pos-max, posq, posql, posqual,
      rfind, rfind-if, rpos, rpos-if, rposq, rposql and rposqual:
      - rewritten with optimization for vectors and strings and proper support
        for vector-like struct objects.
  - Awk macro:
    - five new range operators
    - some optimizations
  - FFI/buffers/carray:
    - carray indexing handles negative indices now according to usual vector
      convention.
    - New convenience functions for I/O between files/streams and buffers.
  - Build:
    - improved handling of test targets in Makefile
    - in condensed mode ("CC file.o" output) if the build step fails, the
      failed command is printed in detail.
  - Windows port:
    - Cygnal DLL updated to Cygwin 2.9.0 baseline from 2.5.2.
  - Vim:
    - % is correctly considered a symbol constituent.

  Bugs

  - partition, partition*, split and split* handle infinite lazy
    lists of indices; issues in their < TXR-171 compatibility
    have been addressed.
  - tprint function and -t command line option deal with lazy lists
    in constant memory now.
  - completely broken copy-hash fixed.
  - Awk macro: fixed hygiene problem in expansion.
  - carray: stability: missing type checks added in several functions.
  - open-command now accepts "b" mode flag even on POSIX platforms whose
    popen function rejects it with a failure.




                                    TXR 186
                                   2017-09-16


  Features

  - math:
    - new cum-inv-norm function for calculating inverse of
      the normal distribution.
    - new poly and rpoly functions for evaluation of single-variable
      polynomials, given coefficients and domain value.
  - macros:
    - new macroexpand-lisp1 and macroexpand-1-lisp1 functions
      for expanding forms in an assumed Lisp-1 style evaluation
      context.
  - regex:
    - new regex-prefix-match function
      - determines whether string is a prefix of a possible match,
        even if it is not itself a match.
    - optimizations implemented to reduce NFA graph size.
    - printed representation of regexes based on original
      source code, not AST-optimized version.
  - command line:
    - txr -i <file> now goes to REPL even if loading <file> throws
      exception.
  - listener:
    - Visual feedback is now given when Enter is pressed at
      the end of a line that is not accepted due to unbalanced syntax.

  Bugs

  - listener:
    - Enter pressed in Ctrl-X context now correctly leaves
      Ctrl-X context (in situations when line is incomplete
      and not submitted).
  - Lisp syntax:
    - precedence of range .. now lower than referencing dot,
      so a.b .. c.d parses in intuitive way.
  - regex:
    - fixed incorrect printing of | relative to catenation
      - e.g. #/abc(def|ghi)/ was printing as #/abcdef|ghi/
      - recent regression
  - syntactic places:
    - if form [m ...] is used as a place, m is now correctly
      macro-expanded in a Lisp-1 context.



                                    TXR 185
                                   2017-08-30


  Features

  - The op/do macro implementation has been rewritten
    in Lisp:
    - Substitution of the @1 notation to anonymous lambda
      argument terms now leverages local macros, so that
      it follows a correct code walk.
    - Will not get stuck in an infinite loop if quoted
      literals occur that contain circular structure.
  - Meta expressions like @foo and @(bar) can now be used
    in the dot position of a function call
    - Example:
      (macrolet ((sys:expr (x) ^(quote ,x)))
        (list . @(a b c)))
      -> (a b c)
    - related to the op rewrite, which relies on it
      to preserve the behavior of forms like (op fun . @1)
      previously implemented in op itself.

  Bugs

  - Fixed a five-and-half year old bug in replace-str,
    introduced between TXR 54 and 55. This affects other
    operations such as (append "str1" "str2").



                                    TXR 184
                                   2017-08-23


  Features

  - TXR ported to 64 bit ARM8 ("aarch64").
  - out-of-memory handling revised:
    - throws exception rather than aborting.
    - code for this was very old and long neglected.
  - lib:
    - set-diff is called diff now; old name deprecated
    - isec and uni functions provide intersection and union.
      - names harmonize with hash-diff, hash-isec and hash-uni
    - len synonym for length
    - spl and tok functions: variants on tok-str and split-str,
      with argument order more suitable for currying.
  - math:
    - new functions digpow and digits
      - (digpow 1234) -> (1000 200 30 4)
      - (digits 1234) -> (1 2 3 4)
      - other bases than ten via optional second arg.
    - new functions sum and prod for adding or multiplying
      sequence of numbers without having to apply or reduce
      through + or *.
    - new divides function for divisibility testing.
    - bit functions logand, logior and loxor allow character operands.
    - function bit can test bit of character
  - control flow:
    - new macros doloop and doloop*
    - trivial case of tagbody optimized away.
  - extraction language:
    - bi-directional string tree match semantics for non-variables
      in @(bind) and other contexts.
  - FFI:
    - new buf-carray-function
    - new functions for reading and writing FFI types from and to streams.
  - I/O streams:
    - New stream type for doing I/O from and to a buffer.
    - Functions for Base64 encoding and decoding from one stream to another.
    - length argument in truncate-stream function now optional
      - defaults to current read/write position
  - parser:
    - more efficient treatment of string literals.
  - improvements in Vim syntax coloring.

  Bugs:

  - listener:
    - recognizes incomplete buf literals properly as open syntax.
  - tagbody:
    - tagbody was setting up anonymous block, which it must not.
  - pad function
    - spurious instances of nil were occurring in its output.
  - n-ary math-functions:
    - were not checking the one-arg case, e.g. (+ "foo") -> "foo"
      which should be an error.
  - tok-str:
    - wrongly permitted a call with just one argument.
  - streams:
    - seek-stream was not working when :from-end specified.
  - buffers:
    - buf-put-uchar was broken.
  - parser:
    - fixed "yacc stack overflow" when compiled with Byacc.
    - fixed broken #; syntax handling when compiled with Byacc.
    - fixed broken handling of empty buffer literals.
  - buffers:
    - fixed infinite loop in buf_grow function.



                                    TXR 183
                                   2017-07-19


  Features

  - Extraction Language:
    - New :lists parameter in @(collect)/@(coll)
      - Specifies variables which are are ensured as bindings
        to lists, even if they match nothing, without the
        full blown discipline of :vars.
  - FFI:
    - carray-buf, ffi-get, ffi-put-into, and ffi-in get
      an offset parameter for added flexibility.
  - Environment:
    - The accessors symbol-function, symbol-value and symbol-macro
      can now create bindings that don't exist, when assigned,
      rather than throwing errors.
    - Storing to a (symbol-function (meth ...)) place can define
      a method now.
  - I/O:
    - The format function can now pad floating-point numbers with
      zeros, if a leading zero flag is specified on the precison.
    - remove-path: exception semantics adjusted.
    - New path-cat function for easy catenation of paths.
  - getopts:
    - New argument type :text for an option whose argument is
      a string that is treated as raw text, and not TXR Lisp
      literal syntax as with the :str type.
  - List/Sequence processing:
    - New function, relate: turns corresponding elements from
      a pair of sequences into a translation function.
    - New accessor nth, like ANSI Lisp nth.
    - find and pos functions optimized and improved in
      support of objects that implement sequences.
  - Filters:
    - New *filters* special variable exposed. This holds the
      named filters used in the extraction language, as a hash
      table.

  Bugs

  - Fixed spurious warnings occurring in some situations when
    functions are invoked using square bracket syntax.
  - Fixed runaway recursion when trace macro used
    to trace the * or format functions.
  - regex: regex printing no longer renders superfluous parentheses
    around character classes.
  - getopts: fixed broken custom option type.



                                    TXR 182
                                   2017-07-09


  Features

  - Lisp:
    - Lambda expressions are function names now, improving compatibility
      of TXR Lisp with other dialects.
  - FFI:
    - Support for preparing zero-filled objects for foreign functions:
      - New functions zstruct and zero-fill, and new macro znew.
    - Relaxation in cptr type allowing a nil-tagged cptr null pointer to
      convert to foreign pointer through a cptr FFI type bearing any tag.
  - OOP:
    - New functions provided for accessing and storing a struct type's
      initfun and postinitfun.
    - The keywords :init and :postinit can be used in the place of
      method names, allowing a struct type's initfun and postinitfun to be
      redefined using defmeth syntax, and also referenced using
      the (meth type slot) syntax.
  - Doc improvements:
    - FFI restructured into major section with better divisions.
    - Better HTML TOC: [+] [-] open/collapse UI rearranged.

  Bugs:

  - OOP:
    - bugfixes in static-slot-ensure also affecting defmethod.
  - Listener:
    - newlines occurring in material pasted with Ctrl-X P (result of previous
      evaluation) are properly treated now as line breaks.
  - build: configure script triest to detect deviant libffi installations,
    like that of Arch Linux.
  - call-super-method function deprecated.



                                    TXR 181
                                   2017-07-01


  Features

  - FFI:
    - new cptr functions cptr-cast and int-cptr.
    - new macro deffi-sym
    - enums can be based on types other than int.
    - make-union can specify an initial value, and optionally specify the
      member for that value (defaulting to the first member).

  - Lib:
    - New Cartesian product mapping functions: maprod and maprend.

  Bugs

  - FFI:
    - fixed broken "in" semantics of zarray types.
    - fixed failure to null terminate zarrays.
    - fixed broken struct/union returns on big endian.
    - fixed bool types reporting as integers in the
      printed #<ffi-type ...> notation.
    - fixed more bugs in bitfield layout leading to
      incorrect placement and retrieval of bitfield values.
    - fixed union types reporting as struct types
      in the #<ffi-type ...> notation.



                                    TXR 180
                                   2017-06-25


  Features

  - FFI:
    - new types: bool, longlong, ulonglong.
    - support for C unions.
    - improved support for type-tagged cptr.
    - some performance optimizations.

  Bugs

  - Fixed regression in horizontal @(trailer) introduced in 170.
  - Fixed broken append redirection operator ->> in awk macro.
  - FFI:
    - fixed broken float put operation.
    - fixed broken handling of cptr when parametrized by tag symbol.



                                    TXR 179
                                   2017-06-18


  Features

  - FFI:
    - carray-sub function becomes accessor.
    - New functions num-carray and unum-carray to treat
      carray as a binary blob holding an integer,
      which is extracted.
    - New functions carray-unum and carray-num, which
      convert the binary image of an integer into a carray.
    - New copy-carray function, hooked into copy function.
  - Listener:
    - Multi-line mode is now default.
    - New Ctrl-X ? displays "cheat sheet" of interactive commands.
    - Open syntax is now detected:
      - when Enter is pressed in incomplete expression, a line
        break is inserted.
  - Sequences:
    - Functions length and empty now check whether a structure has
      a method called length and use it.
    - New concept being introduced: sequence that are not vectors, strings or
      lists can be "vector-like" or "list-like".
      - A struct is a vector-like sequence if it has lambda and length
        methods.
    - reverse and nreverse handle generalized sequences:
      - can be applied to carray
    - ref and refset now work on structs, via lambda and lambda-set.
      - could be considered a bugfix.

  Bugs

  - Numerics:
    - Fixed sign-extend function, broken for bignums.
    - Hardened the MPI library:
      - Clamped the maximum digit size to prevent numeric overflows
        in bignum sizes and bit counts.
      - Introduced new MP_TOOBIG error into MPI library, which is
        is handled in TXR Lisp runtime.
      - bit count argument of ash function range checked,
        since it must fit into the C type int.
  - Fixed neglect to autload place macros.
  - FFI:
    - fixed bugs in bitfield layout.



                                    TXR 178
                                   2017-06-12


  Features

  - FFI:
    - carray objects greatly extended:
      - element selection with select
      - assignable indexing and range selection
      - integration with the [...] syntax, ref, refset, sub and replace.
      - carray-get and carray-put functions make carrays
        more convenient for handling C arrays across FFI.
      - length function supports carray.
      - carray-pun function lets carray be reinterpreted as
        an array of a different element type.
      - carrayp function for testing whether object is carray.
    - if libffi is missing at build configure time, much more functionality
      from the FFI module is now retained.
  - Buffers:
    - ref and refset indexing supported, along with [...] syntax.
    - bufp function.
  - Awk macro:
    - new fconv conversions c and cz for C notation 0x... hex, 0... octal.

  Bugs

  - Added missing overflow checks in memory allocation code in various
    places in library: FFI, streams, system interface.
  - Fixed bug in vector function, allowing the negative sizes -2 and -1
    to get through.
  - Awk macro:
    - fixed broken rng (basic both-endpoint-inclusive form)
  - FFI:
    - fixed failure to trigger string conversion for arrays whose
      element is a character typedef rather than direct character type.
    - fixed broken get semantics of incomplete (zarray char),
      and likewise for (zarray bchar) and (zarray wchar).
      - was getting a vector rather than string.



                                    TXR 177
                                   2017-06-07


  Features

  - FFI:
    - bitfields:
      - struct members may be bitfields, using 1, 2 or 4 byte storage cells.
    - enums:
      - enum types convert between sets of symbols denoting numeric values,
        and FFI type int.
    - align operator in type language:
      - the alignment of types can be customized to achieve effects like
        packed structures, or conformance with unusual alignment requirements.
    - endian types:
      - big and little endian versions of int16, uint16, ... int64, uint64,
        float and double.
      - FFI transparently handles conversion.
    - new macros: alignof, offsetof, arraysize, elemsize, elemtype
    - numeric values in type language such as array sizes are now
      evaluated expressions.
    - new val type for transparently passing raw Lisp values.
  - Streams:
    - New put-buf and fill-buf functions for I/O based on buf type.
      - FFI-type-driven conversions to/from buffers combine with buf I/O,
        allowing TXR to deal with binary data in files and over networks.
  - Command Line:
    - new *args-eff* variable provides access to transformed command
      line arguments.
    - "Hash bang" support rewritten, and now features a "hash bang null hack":
      - Additional arguments to TXR may be encoded in a hash bang line
        after a null byte.
  - lib:
    - mkstring's <char> argument now optional, defaulting to space.

  Bugs

  - FFI:
    - lingering broken assumption that alignment of pointers is the same
      as their size.
    - GC integrity issue in carray and cptr objects.
    - Another GC integrity issue affecting basic FFI types.
    - fixed incorrectly coded exception throws affecting code which
      misuses one of the four functions that connect FFI and buffers.
    - slots named nil in a FFI struct are now culled when making the
      corresponding Lisp struct type.
    - fixed broken handling of return values on big-endian platorms,
      related to a historic quirk in libffi.
    - fixed some broken conversions and range checks affecting some
      integer types.
    - fixed broken get semantics for arrays of bchar.
      - failure to null-terminate decoded string.
    - fixed clockid-t type not being defined on platforms that do have
      the corresponding clockid_t C type.
  - Build system:
    - "make tests" doesn't cache output of failed tests, so they are repeated
      when re-invoked.



                                    TXR 176
                                   2017-05-21


  Features

  FFI:
  - New tagged variant of cptr type, for improved safety.
  - New carray type for handling arrays of unknown size,
    where FFI's automatic memory handling isn't of help.
  - deffi-type is just called typedef
  - New ffi macro providing a shorthand for ffi-type-compile.
  - Variable length arrays that are null-terminated (zarray <type>)
    now have useful semantics: the type can extract an arbitrarily
    long null-terminated array from foreign memory.
  - Previously undocumented ffi-call function is now documented,
    and has undergone an API change.
  - deffi macro now generates Lisp functions with fixed number of
    arguments, so a mismatch in number of arguments is caught
    at the wrapper level, rather than down inside ffi-call.
  - New deffi-var macro for defining a Lisp variable connected
    to a foreign variable.
  Awk macro:
  - New (again) operator for repeating all the rules against
    the same record.
  Filesystem:
  - New functions dir-name, base-name and variable path-sep-chars.
  - New function realpath, wrapper for the POSIX one.

  Bugs

  - fixed corrupt line numbers being reported in some
    situations, like unbound variables inside quasi-word-list literals.
  - FFI:
    - fixed broken in semantics of buf type.
    - fixed broken alignment of basic types leading to wrong
      struct layouts.
    - nil value now handled by FFI buf type, mapped to null pointer.
    - A ffi call now releases up temporary local memory when an
      exception occurs in the argument preparation phase.
    - A ffi callback similarly releases any temporary memory
      allocated during the preparation of the return value, if
      the preparation terminates due to an exception.
    - Defense in the type system against incomplete (i.e. zero sized)
      types being passed or returned by value, or used as array
      elements or struct slots.
    - Fixed wrong documentation about variable-length arrays corresponding
      to pointers.
    - FFI calls are now checked for proper number of arguments.



                                    TXR 175
                                   2017-05-15


  Features

  - New: Foreign Function Interface (FFI)
    - Declare bindings to C-compatible functions in other software
      components (dynamic libraries).
    - Use Lisp functions as C-compatible from foreign software
      components.
  - New :prompt command in listener, nicknamed :p, which
    turns on prompts, useful in the plain mode listener.
  - stat structure has a path slot now, for convenience;
    - answers question: if the stat was obtained from a path,
      what was that path?
  - Built in functions and macros can now be redefined:
    only a warning occurs, rather than error.
  - New buffer data type.
  - Functions related to cptr type exposed.
  - Funtions dlopen, dlsym and related functions exposed.
  - OOP:
    - new and lnew macros now check nonexistence of base type at
      expansion time and generate immediate warning.

  Bugs

  - Printing issue with embdedded symbols in quasiliterals.
  - Fixed broken printing of quasi-word-list literals.
  - @{expr [index]} substitution syntax now indexes into
    any kind of sequence, not only lists.
  - Tightening in parser to reject certain unassigned syntax
    like #[], and better error checking over hash literals.
  - Bugfixes in area of processing TXR pattern language in context
    of user-defined package.
  - OOP print methods can now disable *print-circle* over
    recursive print calls.
  - Unintering built-in symbols is now possible without
    catastrophic results.
  - Fixed error in macro-expander's traversal of the special
    forms return-from, sys:abscond-from and block*.
  - Fixed bug in expander for suspend macro.
  - Fixed bug in the ash function when right shifting fixnum integers.
  - Fixed tostringp not behaving for float numbers in documented manner.
  - mkstring and vec-set-length defend against negative argument.
  - lognot and logtrunc defend against negative number of bits.
  - Fixed bug in --free-all logic when --vg-debug in effect.
  - Fixed incorrectly ordered logic in make-catenated-stream, exposing
    a Lisp object to premature reclamation.
    - Reproduced as actual issue on Darwin, under the --gc-debug
      GC torture test.



                                    TXR 174
                                   2017-04-04


  Features

  - TXR Pattern Language:
    - The special phrase forms like @(collect) and @(end) are now integrated
      with the package system.
  - opip macro:
      - forms like .a.b or .(meth x y) occurring in opip
        now evaluate to functional pipeline terms as expected.
  - Lexical syntax:
    - Dubious run-on lexical forms like 0.1.2 and .1.1 now diagnosed.
  - Time:
    - New functions time-parse-local and time-parse-utc.
  - Listener:
    - The -n option now has the additional effect of forcing the listener
      into plain input mode (no editing, history, or completion) even if
      the input device is a TTY.

  Bugs

  - Fixed broken support for building in separate directory.
  - Floating-point constant regression: .123 being misinterpreted as a slot
    access if preceded by whitespace.
  - Fixed rejection of 0.1..0.2 range syntax with floating-point operands.
  - Fixed a...b syntax error. This is a .. .b.
  - Fixed apply and iapply broken behavior: not splitting non-list
    sequences into individual arguments, like documentation says.
  - Linenoise issue fixed: when reading from a non-tty mode without
    editing, the continuous instantiation of a new buffere stream
    was causing input data to be discarded.
  - Scanner issue fixed: `@@1abc` was being interpreted as `@{@1}abc`
    rather than `@{@1abc}`.



                                    TXR 173
                                   2017-03-25


  Features

  - Listener:
    - Completion is now sensitive to slot or method context: .(abc[TAB] and
      .abc[TAB] searches appropriate spaces.
  - TXR Pattern Language
    - Unbound variable followed by directive is now bound to partial
      match result while searching for match for directive.
  - GC:
    - Finalizers may now invoke call-finalizers; behavior no longer unspecified.
  - Lisp code processing:
    - Warnings issued when expanding code that accesses nonexistent struct slots.
      - Not a form of type checking at all, but catches many typos.
  - Windows:
    - Improved 16x16 icon.

  Bugs

  - Lisp code processing:
    - Fixed missing warnings when main module is a .txr file.
    - Fixed missing unbound variable/function warnings for unbound symbols that
      are the direct operands of [...] syntax.
    - Fixed wrong name being printed in trace messages, when trace is used
      to simultaneously enable tracing for two or more functions.
  - Windows:
    - Start menu shortcut now starts in user profile dir, rather than
      incorrectly in TXR standard library installation dir.



                                    TXR 172
                                   2017-03-19


  Features

  - Argument of umask function is optional
    - if omitted, function returns current umask.
  - OOP:
    - new static-slot-home function
      - reports the base class which actually
        defines a slot.
  - Sandboxing support:
    - New *package-alist* variable gives application control
      over what packages exist over a dynamic scope.
      - Makes possible safe evaluation of TXR Lisp code obtained
        as input from untrusted source.
      - Special behavior worked into exception handling to
        close a potential sandbox hole.
  - Tracing:
    - trace now canonicalizes a method name to the
      base class which defines a method and produces
      a warning if this is different from what was requested.
      - E.g. (trace (meth dog speak)) is issued, but dog
        just inherits (meth animal speak) which is what is
        actually traced.
    - warnings issued when traced functions are redefined.
  - Windows:
    - New icons, redesigned from scratch.
    - SVG logo now in source tree.

  Bugs

  - Parser fix in relation to new unbound reference
    dot syntax: now it may be a top-level expression,
    so entering .a.b.c into the REPL isn't a syntax error.
  - Missing documentation for opt function added.
  - Windows:
    - Fixes from Cygnal:
      - dir and shell fields in password structure
        returned by getpwent are Windows paths that
        make sense.
      - HOME environment variable has same value as USERPROFILE.
      - Fixes issue when Windows Vim is invoked out of txr,
        of Vim being confused by nonsensical HOME value.
    - Linenoise fix: Ctrl-X Ctr-E (edit in external editor)
      - Now temp file closed before spawning external editor.
      - Fixes issue of editor reporting that the file is
        in use by another application and not being able to save.
      - Fixes issue that Vim reports the file as readonly.



                                    TXR 171
                                   2017-03-14


  Features

  - New unbound referencing dot syntax: .a.b.c.d
    corresponding to (uref a b c d) macro operator
    - Produces a function which curries slot references,
      binding them to an object passed to it as argument.
  - Command line:
    - The argument - (dash) is no longer required to specify
      that standard input is to be scanned; it is default behavior.
  - TXR access from Lisp:
    - last two arguments are now optional in match-fun.
  - OOP:
    - new functions struct-from-args and struct-from-plist
      provide slightly simplified interfaces to make-struct.
    - A structure's print method can now return : (the colon symbol)
      to indicate that it declines printing, so the built-in structure
      printing takes place.
      - suppresed by -C 170 (or lower) compat option.
  - Sequences library:
    - new rmismatch function: compares tails of sequences and
      reports mismatching position as a negative value.
    - new functions starts-with and ends-with.
    - split, split*, partition, partition*: now allow negative
      indices.
      - previous behavior of ignoring negative indices can be selected
        using -C 170 (or lower).
  - TXR Pattern Language:
    - New directive @(mdo): "macro-time do": evaluates Lisp code
      immediately after being parsed and disappears from syntax tree.
    - New @(in-package) directive, allows pattern language files to
      succinctly express being in an alternative package.

  Bugs

  - Fixed spurious warnings about :vars set up in @(repeat)
    being unbound as well as the :counter variable in @(collect).
  - Fixed lack of macro-expansion on the init expression
    in @(collect :counter (var init)).
  - The TXR matcher now refuses to open input sources that are
    streams, or standard input default, for non-matching directives,
    in the same manner that file name sources are treated.
    Thus @(next s) (where s is a stream) not cause any input
    to be pulles from s until a matching directive is encountered.
  - match-fun: @(next) in the invoked pattern function now correctly
    switches to the first file in the list of files passed
    to match-fun.
  - Fixed numerous instances of improperly terminated formatted
    printing in the TXR internals (missing "nao" argument).



                                    TXR 170
                                   2017-02-28


  Features

  - Horizontal-mode @(throw) directive.
  - Horizontal @(block)...@(end) syntax.
  - Second argument of trunc function is now optional:
    (trunc -1.5) yields -1.0.
  - floor and ceil functions take optional second argument,
    which acts as a divisor: (floor 10 3) -> 3; (ceil 10 3) -> 4.
  - New round function: (round 0.7) -> 1; (round 3 4) -> 1; (round 1 3) -> 0.
  - New functions floor-rem, ceil-rem and round-rem.

  Bugs

  - Requirements for special interaction between @(accept)
    and @(next), function calls, and @(finally) have been
    identified and implemented.
  - Fixed segfault (C null pointer dereference) when nil
    symbol used to look up a struct slot.



                                    TXR 169
                                   2017-02-11


  Features

  - Improvements in area of warnings and deferrable warnings.
    - Representation of deferrable warnings changes; the defr-warning exception
      type derived from warning is used.
  - Awk macro:
    - Now provides a warning when a rng expression appears to refer to a local
      variable or function that is unreachable due to the code relocation.
  - New functions rassoc and rassql.

  Bugs

  - compile-warning function: added missing catch in compile-warning
    functionfor continuing after warning is handled.



                                    TXR 168
                                   2017-02-05


  Features

  - Mutation of lexical functions is forbidden and diagnosed.
    - e.g. (set (fun f) ...) when f is lexical.
  - Improved diagnostics during place expansion and when
    exceptions occur at macro-expansion time.
  - New function rlcp-tree.
  - New macro whena, complements ifa and conda.
  - Functions remq, remql, remqual, remove-if, keepq,
    keepql, keepqual and keep-if were rewritten and work
    more efficiently for vectors and strings.


  Bugs

  - Fixed an issue in the the expansion of Lisp-1 forms as places.
  - Fixed ocurrence of "expansion at nil" diagnostic in some
    error traces.
  - Fixed printing of unnecessary package prefix on symbols which
    are visible in the current package, but not interned in it.
  - Fixed rehome-sym not removing symbol from hidden list of
    destination package, as documetned.
  - Fixed broken keepql function.
  - Fixed bug in poll function: rejecting stdio-stream type
    objects as non-streams due to strict type check rather
    than subtype.



                                    TXR 167
                                   2017-02-02


  Features

  - New functions defer-warning and dump-deferred-warnings.
  - Awk macro:
    - small convenience: an input source given in :inputs can now be a list of
      strings, which the macro converts to a stream.
  - Tightening in syntax:
    - When floating-point tokens are followed by a period and a non-period
      character, this is now a "trailing junk" syntax error:
        SYNTAX         OLD BEHAVIOR             NEW BEHAVIOR
        1.$            "trailing junk" error    "trailing junk" error
        1.0.$          (qref 1.0 $)             "trailing junk" error
        1.0.a          (qref 1.0 a)             "trailing junk" error
        1.0.0          1.0 0.0                  "trailing junk" error
        1.1.<EOF>      generic syntax error     "trailing junk" error
    - Spliced symbols are diagnosed as "bad token" syntax errors
        SYNTAX         OLD BEHAVIOR             NEW BEHAVIOR
        :a:a           :a :a                    "bad token"
        @a@a           @a @a                    "bad token"
        usr:foo:bar    usr:foo :bar             "bad token"
   - These changes are not subject to -C option: code must be fixed
     if it contains these incorrect lexical forms.

  Bugs

  - The sort function now actually implements a stable sort over lists,
    as has been documented for a long time.
  - Missing autoload registrations for catch* and handle* added.
  - Parameter list macros now recognized in the parameter list of a catch
    clause.
  - Fixed incorrect printing of a symbol that is not visible in the current
    package due to being hidden by a like-named symbol: such as symbol must be
    printed with its package qualifier.
  - Fixed issue: Lisp files loaded from the command line were showing spurious
    undefined warnings that wouldn't appear if the same files were loaded with
    (load ...).



                                    TXR 166
                                   2017-01-26


  Features

  - Deferred warnings
    - System of deferred warnings implemented allowing forward references
      to functions, variables and anything else (extensible).
  - New error reporting convenience functions for macro writing: compile-error,
    compile-warning, compile-defr-warning.
  - A parameter list macro called :key is provided, allowing functions
    and macros to easily take keyword parameters.
  - New memp function for searching a property list.
  - New functions plist-to-alist and improper-plist-to-alist.
  - New macros catch* and handle* which provide catches and handlers access
    to the exception symbol.
  - Local macrolets established by the build macro such as add, pend,
    pend* and others are now functions.
  - Awk macro:
    - *stdin* now bound to current input stream.
    - new fname variable analogous to FILENAME.

  Bugs

  - Unbound functions diagnosed consistently between
    dotted (fun ... . x) forms and ordinary.
  - *stderr* bound on entry into the repl, so errors sent to *stderr* go
    to the repl's output stream.
  - Better error reporting for nonexistent base in defmeth.
  - Fixed broken supertype check in make-struct-type also affecting
    defstruct, a nonexistent base to be treated as if it were nil.
  - Fixed compound forms not being expanded in quasiliterals. This is a
    TXR 160 regression breaking `@(macro ...)` usage.
  - Muffle expansion-time warnings in op macro expander.
  - Fixed missing macro expansion of TXR Lisp forms in collect, coll, gather,
    output, and numerous other TXR directives.
  - doc: missing documentation for :var argument of @(next) written.
  - Fixed small ambguity issue in expansion of keyword args in
    @(repeat)/@(rep).
  - Fixed an expansion issue affecting output vars.
  - *package* subject to rebinding in @(load) just like in the Lisp
    load function.
  - Cleaned up sloppy expansion in braced variables.
    The argument of the :filter keyword isn't expanded.
  - Fixed poor expansion order of parameter list macros, and a related bug.
  - Fixed :whole and :form arguments in macro parameters lists not allowing
    destructuring (due to an exception being thrown at expansion time
    if their arguments are not bindable symbols).
  - Fixed init-forms of optional arguments being expanded in an
    incorrect macro environment, in which earlier arguments are not
    visible as they should be.
  - Fixed broken termination tests in take-while and take-until.
  - Fixed wrong form being taken as the to-be-destructured form in
    mac-param-bind.



                                    TXR 165
                                   2017-01-10


  Features

  - New Lisp concept: parameter list expander macros.
    - customize function behavior with attribute-like keywords which invoke
      custom expanders to transform bodies and parameter lists.
  - Throughout the TXR pattern language parser, checks against empty clauses
    have been eliminated. Empty clauses in numerous situations are not
    considered syntax errors.
  - The last variable in whilet can be omitted in the same way like in iflet
    and whenlet.

  Bugs

  - Fixed missing space between attribute keywords in the printed
    representation of a hash.
  - Windows native version picks up fix for Cygnal issue 15.



                                    TXR 164
                                   2017-01-01


  Features

  - Awk macro: new variable fw for delimiting records according to fixed field
    widths.
  - The last variable may now be omitted in the bindings list of iflet, whenlet
    and condlet, leaving just the controlling expression, not bound to a
    variable.
  - Various syntax checks over function and macro parameter lists, and variable
    bindings, have been moved out of run time and into expansion time.

  Bugs

  - Build: "make clean" now removes txr-win.exe
  - Fixed a lingering bug in the handling of special variables in parallel
    binding, not fixed in the work done in this area for the previous release.
  - Fixed a bug in the handling of optional-argument presence indicating
    arguments: not binding them dynamically when they are special variables.
  - Fixed inconsistency in the regex-source function: the source of the
    (compound "str") regex was reported as "str", which isn't the same thing
    when fed to the compiler.
  - Fixed completely broken quasi-quoting over #R range literal syntax.
  - Fixed a read/print consistency problem in quasiliterals.
  - Fixed a problem with catch operator form not being fixed-point stable
    under repeated passes through the expander. To fix the problem, catch
    has turned into a macro which expands to an internal sys:catch operator.



                                    TXR 163
                                   2016-12-20


  Features

  - New equot macro: quote after macro expansion.
  - CL compatibility:
    - New function endp.
    - New function mismatch.
    - New prog and prog* macros.
  - Signal handling:
    - If an async signal is caught and handled by Lisp code during gc, gc is
      canceled.
      - Allows recovery from segfault due to stack overflow during gc.
  - Exception handling:
    - New function find frames.
  - Awk macro:
    - New awk local macros -rng, rng- and -rng-, providing endpoint-exclusive
      variants of rng.
  - Redesigned binding of special variables.
    - Fixes subtle bugs
    - Reduces number of variable binding special forms.
    - Removes special var handling responsibility from binding special forms.

  Bugs

  - Method lookup doesn't throw on nonexistent slots.
  - Fixed find-max not handling interpreter literal strings.
  - Expansion bugfix in tagbody.



                                    TXR 162
                                   2016-12-07


  Features

  - Awk:
    - Awk prn macro is now a function: can be used as a functional argument

  - Regex:
    - New functions fr^$, fr^, fr$ and frr.


  Bugs

  - Awk:
    - fixed assignment to field list f not yielding the new value as a result,
      returning another object instead.
    - input processing loop containing no cond-action clauses was being elided,
      even if it contained :begin, :end, :beginfile or :endfile clauses which
      must be executed.
    - awk macro implicitly obtaining its input sources from the command line
      wasn't consuming the command line, causing problems when macro is used
      from the command line.
  - Syntax, input:
    - Fixed robustness issue in handling of out-of-range hex/octal character
      escapes.
      - This fixes a crash that could be triggered in the regex module by
        a regex containing out-of-range character escapes in a character class.
    - Stray debug printf removed from lexical analyzer.
      - Occurred only when diagnosing certain invalid floating-point syntax.
    - Fixed syntax error being reported when last item in a Lisp source
      file or :read paste in the REPL is an object erased with #; notation.
  - Syntax, output:
    - Fixed ^(a . ,b) being printed as ^(a sys:unquote b).
    - Fixed ^(,* a) and ^(, *a) both printing as ^(,*a).
  - Exceptions:
    - fixed handle macro's deviation from documented syntax.
      - subject to compat option.



                                    TXR 161
                                   2016-11-28


  Bugs

  - Regression: awk macro spews warnings.



                                    TXR 160
                                   2016-11-27


  Features

  - New hash table function clearhash.
  - TXR Lisp macro-expanding code walker now generates warnings
    about unbound variables and functions.
    - ignwarn macro provided for ignoring warnings.
  - macro-time macro now interleaves expansion and evaluation, so that the
    evaluation effects of forms occurring earlier in the
    macro-time form are visible to the macro-expansion-time of later forms.
  - New exception-subtype-map function for retrieving type symbol hiearchy.

  Bugs

  - Fixed numerous bugs in macro expander:
    - not including symbols in macro-time environment:
      - macrolet arguments
      - dohash key and value variables
      - function name in defun
      - the auxiliary Boolean parameters that can exist on optional parameters
        which indicate whether the optional argument is present.
    - not expanding:
      - mac-param-bind special forms at all.
    - wrongly traversing and expanding:
      - @var and @(expr) syntax
    - incorrectly expanding:
      - arguments of op using Lisp-2 expansion style rather than Lisp-1.
  - Fixed a number of library functions broken due to using nonexistent
    variables: test-inc macro, str-inaddr-net, str-inaddr6-net,
  - Fixed broken read-print consistency of quasiliterals.
    - example: `@@@a` would print as `@@a` which is a different object.
  - Fixed op and related macros not handling @rest in the dot position.
  - Fixed interaction between circular notation and hash literals.
    - literals denoting eql-based hash tables which contain themselves
      as keys now work.
    - literals denoting equal-based hash tables doing the same thing
      are not supported for now; they produce junk hash tables.
  - Build system:
    - Changes in 159 caused builds to fail on some systems unless lex
      was manually specified.
      - On some systems the $(LEX) make variable points to something
        which isn't GNU Flex compatible.
      - On some systems $(LEX) points to a nonexistent lex even if
        Flex is installed.



                                    TXR 159
                                   2016-11-21


  Features

  - Tweaks in generational GC.
  - Rounding out of package system with "fallback" concept.
  - TXR Lisp now has a tagbody macro.
  - Macro bindings now hold first-class functions.
  - Global macros have (macro <sym>) function names
    - symbol-function works with (macro <sym>).
    - Possible to (trace (macro <sym>)) to trace a macro.
    - Posible to (defun (macro <sym>) args body ...) to
      write a raw macro expander as a plain function.
    - func-get-name applied to global macro expander function
      calculates its (macro <sym>) name.
  - Trace macro now throws error if an undefined function occurs
    in the argument list.
  - The previously deprecated -b option has been revived and repurposed:
    - use "-b sym=obj" syntax to pre-define a Lisp variable.
  - Build system:
    - TXR now honors standard Make variables like CC and CFLAGS.

  Bugs

  - Fixed macro-expansion bug in which forms are expanded
    at macro time, to determine whether or not they are constant,
    wrongly using the global macro environment rather than
    the lexical one.



                                    TXR 158
                                   2016-11-15


  Features

  - OOP:
    - New feature: dirty flag bit on struct instances. Code can tell if any
      instance slots were modified since last time dirty flag was cleared.
  - Packages:
    - New in-package macro.

  Bugs

  - Interactive txr switches *package* to user package before entering
    the listener, in case the specified script file alters it.
  - Fixed broken bignum addition.
  - Fixed breakage in fixnum to bignum conversion affecting 64 bit targets.
  - Fixed invalid mutation of applied argument list, affecting
    some functions. Test case: [apply lcm (list 1)] mutates (1) to (nil).



                                    TXR 157
                                   2016-11-14


  Features

  - New #; syntax for commenting out Lisp object.
  - #: syntax for uninterned symbols now works as an input notation.
  - Packages:
    - Overhauled implementation with increased scope.
    - New *package* special variable holds current package.
    - New concepts in package system: foreign symbols, hidden symbols.
    - New functions: package-local-symbols, package-foreign-symbols, use-sym,
      unuse-sym, use-package, unuse-package, unintern.
    - New defpackage macro.
  - Improvements in Vim syntax coloring; don't forget to install new txr.vim
    and tl.vim files.
  - New convenience functions for file or process I/O in one call: file-get,
    file-put, file-append, file-get-string, file-put-string,
    file-append-string, file-get-lines, file-put-lines, file-append-lines,
    command-get, command-put, command-get-string, command-put-string,
    command-get-lines, and command-put-lines.

  Bugs

  - Fixed an infinite loop in the processing of syntactic places: regression
    introduced in 156.
  - Fixed bug in processing of nested syntactic places like [place arg] where
    the inner place is a macro.
  - Fixed regression in awk macro introduced in 156, related to the above bug:
    not being able to assign to a field as in (set [f 3] "foo"). The bug was
    there before, but the change suddenly removed the accidental circumstances
    which protected the awk macro from reproducing the problem.
  - Fixed some additional problems in circle printing, in the printing
    of package objects and and interpreted functions.
  - A few GC-unsafe mutations were found in the TXR kernel, by inspection, and
    fixed. No actual instability was reproduced.
  - Fixed a bug in the caseq, caseql and casequal macros: single-atom key
    values were being exposed to evaluation rather than taken as themselves.
    This behavior can still be obtained with the compatibility switch;
    but it is recommended to first see whether switching to one of the new
    case constructs caseq*, caseql* or casequal* is feasible.



                                    TXR 156
                                   2016-11-05


  Features

  - time-parse function defaults to epoch time.
  - new accessors nthlast and butlastn.
  - sub function is now an accessor.
  - last and butlast functions are accessors, and get optional index argument.
  - Awk macro:
    - now supports pipe/file redirection.
  - Function tracing support: trace, untrace macros, *trace-output* stream.
  - symbol-function accessor can refer to methods via (meth ...) syntax.
  - restrictions in dwim places relaxed:
    in (set [x y] z), x doesn't necessarily have to be a place.
  - OOP:
    - new lambda-set method can treat [obj ...] expressions as places when obj
      is a struct.
    - new slots function for getting complete list of slots of a struct type.
  - New neq, neql and nequal functions for negated equality tests: for all
    those times you hate writing (not (equal a b)).
  - New command-line argument processing library.
  - Improved printing of error location, and tracing locations across place
    expansions.

  Bugs

  - quasiquote now works properly over struct literals.
  - wrong return value of nthcdr place fixed.
  - fixed circular printer blocking unwinding.
  - tok-str semantics adjusted once again to eliminate
    spurious empty tokens in some situations.
  - fixed broken tok-where (regression).
  - fixed potential incorrect evaluation order in dwim places.
  - fixed bugs in circular printing that traverses hash tables and objects with
    print methods
  - *stdout* now flushed when processing unhandled exceptions, so that
    diagnostics sent to *stderr* appear properly ordered w.r.t. prior
    *stdout* output.



                                    TXR 155
                                   2016-10-21


  Features

  - Common-Lisp-style circle notation supported now both on input and output.
    - *print-circle* special variable now exists.
    - supported across print methods.
  - OOP:
    - print methods now take three arguments rather than two, and are called
      for readable and pretty printing, not only pretty printing.
  - env-fbind and env-vbind functions allow nil env argument to denote toplevel
    bindings; thus they can be used to bind global variables.

  Bugs

  - fixed regression: inability to work with places denoted by compounded
    referencing dot; e.g.  (set a.b.c val)
  - fixed showstopper regression: inheritance of static slots causes assertion
    and crash at garbage collection time (while simply checking for a condition
    that is harmless in and of itself).
  - reduce-left: initial value pulled from the input list itself was not passed
    through key function.
  - fixed some places where a volatile qualifier on a local variable was
    missing, found by inspection: actual impact not determined.
  - Listener was sending error traces to *stderr* stream instead of the
    listener's configured output stream; that was causing confusing output
    sometimes.




                                    TXR 154
                                   2016-10-15


  Features

  - OOP:
    - Functions method and umethodk, and the macros meth and umeth,
      now take additional arguments which are curried into the method call.
  - Regex:
    - In the regex abstract syntax, the and and or operators are now
      n-ary, rather than being strictly binary.
    - New regex-from-trie function.
  - Listener:
    - New Ctrl-X Ctrl-P feature to paste the result of the previous
      evaluation into the current command line.
  - Time:
    - time struct supports gmtoff and zone fields, on systems where these
      are available in the C struct tm.
  - Hash tables:
    - the hash user data is now included in the printed notation for hash
      tables; thus, hash literals can specify user data.
    - new hash construction keyword :userdata supported alongside :equal-based
      and others, so hashes can be constructed with user data in various
      situations.
    - New function hash-userdata is an accessor (serves as a place);
      get-hash-userdata is deprecated.
   - Sockets:
     - address structures (sockaddr, sockaddr-in, sockaddr-in6, sockaddr-unix)
       now all have a family slot, so programs don't have to switch on
       the object type to map to a numeric address family.

  Bugs

  - Bugfix in argument handling affecting struct method calls.
  - Listener:
    - Fixed bug in Ctrl-X Enter (submit historic line and stay in history).
      - If the line being submitted is a duplicate, it would not submit
        the line, and the position in history wouldn't advance to the next.
  - OOP:
    - Fixed various situations in which abstract sequence objects
      (object supporting car, cdr and nullify methods) didn't work as expected.
      - for instance: length, sub and where functions.



                                    TXR 153
                                   2016-10-07


  Bugs

  - GC-related regression in static-slot-ensure fixed,
    affecting code which uses defmeth also, causing
    instability.
  - Fixed long-time GC-related issues in replace-struct
    and clear-struct which threaten stability.
  - Check for self-assignment in replace-struct.



                                    TXR 152
                                   2016-10-04

  Features

  - Licensing:
    - All license headers in source files reverted to BSD 2-Clause,
      not just the LICENSE file.
  - OOP:
    - Inheritance model for static slots has been revised.
      This is also a bugfix.
  - Range objects support a degree of arithmetic, and can be
    queried with zerop, length and empty.
  - Regexes:
    - Improvements in search-regex function and functions
      based on it: support for negative indices and more.
    - New rr function: regex search which returns a range,
      like range-regex, but better interface for currying.
    - New rra function: return all regex matches as range
      objects.
  - Awk macro:
    - New convenience clauses :set and :set-file,
      to reduce the verbosity of (:begin (set fs ":" ofs ":")).
      to just (:set fs ":" ofs ":").

  Bugs

  - Interactive listener:
    - VT100 arrow key can be issued after Ctrl-X extended mode prefix:
      cancels the Ctrl-X and is carried out.
  - OOP:
    - New static slot inheritance model fixes issues like
      method redefinition with (defmeth ...) inappropriately
      clobbering overridden derived methods differing from the
      original method being redefined.



                                    TXR 151
                                   2016-09-27


  Features

  - Licensing:
    - TXR returns to unmodified BSD 2-Clause
  - Better code generation for simple cases of place mutation.
  - Regex facelift:
    - regex objects are callable like functions.
    - Support for negative start or end positions in regex matching
      operations.
    - regsub function takes functional argument for more flexibility.
    - Numerous new convenience regex functions: m^, m$, m^$, r^, r$,
      r^$, f^, f$ and f^$.
      - these simulate full matching and anchoring in various situations.
    - New regex-source function, for obtaining a regex's original AST.
  - Awk macro:
    - conditions in cond-action clauses and in (rng start-cond end-cond)
      expressions can be functions or regular expressions, which are
      invoked on the record.
    - New fconv conversions: iz, rz and others which yield a zero value
      for empty, nonexistent or junk fields.
    - orec variable provides access to original record, useful when rec
      has been modified.
    - rs variable can be dynamically changed now, taking effect for the
      next record.
    - paragraph mode implemented based on POSIX description and
      observations of GNU Awk behavior.
  - Library:
    - New functions tointz and tofloatz.
    - New build macro for procedural list building.
    - New *load-path* special variable replaces the self-load-path
      symbol macro (which still exists but simply expands to
      *load-path*).
    - load is now a function rather than macro.
    - @(load)/@(include) directives now pull parent path from
      *load-path* variable, rather than own source location.
    - loading uses stricter criteria for deciding what relative paths
      are automatically resolved relative to *load-path*.
  - Streams:
    - New strlist input streams: treat a list of strings as multi-line
      text stream.

  Bugs

  - Awk macro:
    - fixed broken updating assignments to awk variables, such as
      (push item f).
    - awk now exits if there are no cond-action clauses.
  - Regex:
    - match-regex function now returns match length as documented.
    - Broken return value of match-regst fixed.
    - Type of a regex object is now regex, rather than sys:regex.
    - Exception in pretty-printing a correct expression, due to bug in
      handling the & operator.
  - Lists:
    - out-of-range negative indices over lists now yield nil rather than
      the first item.
  - Command line:
    - -Dvar=val binding are now visible to Lisp files.



                                    TXR 150
                                   2016-09-18


  Features

  - Awk macro:
    - New ft variable to optionally specify field tokenization
      as alternative to field separation via fs.
    - New kfs variable to arrange for field separators to be
      retained and represented as fields.
    - New krs variable to keep record separator matched by rs
      as part of record.
    - New fconv operator for succinct and flexible
      conversion of awk fields.
    - Don't rebind *output* if :output clause not specified.
  - New place-mutating macro: upd.
  - New keepq, keepql and keepqual functions.
  - Functions remq, remql and remqual take key argument.
  - split-str take boolean arg to keep separators, like tok-str.

  Bugs

  - Fixed incorrect behavior of functionsremq, remql, remqual, remove_if,
    and keep_if on strings.
  - Fixed broken regex complement operator.
  - Fixed broken while* and until* macro expanders.
  - Fixed bugs in split-str and tok-str.
  - Windows:
    - TXR's standard input, output and error will now be text
      streams, CR-LF externally.
      - This comes from a fix in the Cygnal library being picked up
        into the installer package.
    - Interactive mode uses USERPROFILE env variable for
      location of home directory for edit-in-editor feature.



                                    TXR 149
                                   2016-09-12


  Features

  - Implementation of Awk paradigm in Lisp syntax, in the form of awk macro.
    - TXR programs can now integrate the strategies used in Awk
      as part of their logic.
    - Awk one-liners from the command line possible.
  - New place-mutating operators:
    - pinc and pdec provide post-increment and post-decrement.
    - test-set, test-clear and compare-swap provide a conditional update of a
      place with useful return value.
    - test-inc and test-dec provide increment combined with a test
      of the value.
  - New slet and alet macros
    - companions to rlet, providing more aggressive ways
      than rlet for eliminating unnecessary temporary variables
      in macro expansions.
  - Change in trim-str function: what it considers whitespace.
  - Doc improvements:
    - Formatting problems.
    - Table of contents display issue under Chrome web browser.
    - meta-keywords now italicized in nroff man page output,
      allowing them to be colorized via customizing the less pager.

  Bugs

  - Fixed regression: @(rep) wrongly complains about an empty
    clause when it's not in fact empty.
    - Workaround: use @(coll) or add parameters inside @(rep).
  - Fixed bug in nthcdr defplace: not obtaining macro environment
    in valid way, breaking the test whether the list argument
    is a place.
  - Fixed symbol macros not being expanded in the X position
    of (set [X i] Y) and related situations.
  - Fixed semantic issue in the expansion of place macros.
    - Place macro calls are put only through at most one round of
      regular macro-expansion before being tested again for
      place macro expansion.
    - This allows macros to produce place macro calls.
  - Changed order of calls to :postinit handlers in struct
    instantiation: base first, then derived.




                                    TXR 148
                                   2016-09-01


  Features

  - time-parse function
  - time-string and time-parse methods on time struct
  - optimization added to quasiquote expander to generate better code.

  Bugs

  - Broken defvarl and defparml marking variables special, thus behaving like
    defvar and defparm, respectively.
  - Put limit on numeric range of @<num> arguments in op/do syntax, because
    this generates huge formal parameter
    lists. Found by AFL(fast) fuzzing tool.
  - Fixed generation of huge lists by trivial cases of nested quasiquote
    like ^^^^^^^^^^x. Found by AFL(fast) fuzzing tool.
  - Fixed runaway recursion that can occur in lazy struct initialization when
    cycles are present.
  - Fixed broken Lisp macro expansion in @(if) and output-side
    @(repeat) directives.
  - Rewrote poor, incorrect documentation of @(merge) directive.



                                    TXR 147
                                   2016-08-12


  Features

  - 64 bit Windows/Cygwin port.

  Bugs

  - Fixed native Windows TXR trying to use HOME environment
    variable when run from Cygwin.



                                    TXR 146
                                   2016-07-20


  Features

  - Time and space optimizations in execution of NFA regexes.
  - POSIX uname function exposed.
  - Print syntax which looks like their read syntax implemented for
    quasistrings and quasi-word-list literals.
  - Windows version ships with Cygnal 2.5.1.99 for better
    windows native support.

  Bugs

  - Text streams are not open with stdio "t" mode on Cygwin.
    This was a mistaken change present in 144 and 145.



                                    TXR 145
                                   2016-07-03


  Features

  - The Windows installer version of TXR is now packaged
    with the Cygnal DLL, which is the result of a new project:
    http://www.kyheku.com/cygnal.

  Bugs

  - Fixed crash in getaddrinfo when host is not found.
  - Issues in Windows version fixed by Cygnal project:
    - Fixed unwanted console window suddenly popping up when the
      console-less txr-win spawns a process.
    - Command spawning (sh function, open-command) doesn't require
      sh.exe shim executable any longer to switch to cmd.exe.
    - Fixed issue of messed up REPL display in multi-line mode,
      when lines reach the right edge of the display.




                                    TXR 144
                                   2016-06-29


  Features

  - TXR bids adieu to MinGW: the MinGW-based port to Windows is dropped.
    - Now that Cygwin is under the LGPL, the installer-based TXR
      for Windows is based on the Cygwin version of TXR, and includes
      all the required DLL's.
    - The benefits are great: the Cygwin port of TXR is much less crippled,
      thanks to the excellent POSIX support in Cygwin.
    - The interactive listener now works!
  - Improvements in the support for treating structs as sequences.
  - New --free-all command line option to get TXR to free all malloced memory
    before exiting.
  - Improved semantics of makunbound function: more similar to Common Lisp.
  - @(collect)/@(coll) take a :counter parameter now, with an optional starting
    value, for more streamlined enumeration of collected values.
  - Most TXR-style expression evaluation in the pattern language replaced
    by Lisp evaluation, reducing the need for @ noise.
  - Improved Valgrind support in garbage collector: Valgrind backtraces
    can be printed for interesting objects.


  Bugs:

  - Regression fix: @(catch) and @(finally) clauses can be empty once again.
  - Various memory leaks fixed: in handling of bignums, in syslog streams,
    dgram sockets and in the Lisp parser object.
  - Fixed out of bounds memory access in bit function.
  - Fixed broken (del (symbol-value 'sym)).
  - defsymacro removes existing special marking from symbol.
  - Fixed potential crash caused by bogus stray code in the GC marking
    function for syslog streams.
  - Fixed possible object leak in GC by managing free list in more
    disciplined way.



                                    TXR 143
                                   2016-06-04


  Features

  - Structs:
    - Structures can now support custom pretty-printing
      via a print method.
    - car, cdr, nullify, and from-list methods on structures allow
      them to behave as if they were sequences.
  - TXR Pattern language:
    - The "!command" and "$dir" convention for opening command pipe
      and directory steams has been removed: this will not be
      recognized on the command line or the @(next) or @(output)
      directives.
    - The "-" convention for denoting standard input is now
      only available from the command line, not from the @(next)
      or @(output) directives.
    - @(output) now evaluates the destination as a Lisp expression;
      no need to use the @ escape.
    - @(repeat) sees variables in more places:
      - In the output variable syntax @{a b [c..d]}, if b, c and d are
        variables, they are recognized by the directive and treated
        accordingly.
      - Previously @(repeat) would know about a, but have to be informed about
        the others via :vars (b c d).



                                    TXR 142
                                   2016-05-29


  Features

  - The remove-path funtion takes additional Boolean argument
    to suppress exception.
  - Better reporting of expansion locations across expansions
    of the op, do and related macros.
  - Support for deploying stand-alone executables.
  - Optimizations in hashing.
  - Support for byte-oriented stream operation instead of
    UTF-8 decoding.

  Bugs

  - Bugfix in clumped option processing: test case -B-c.
  - Uses of POSIX sleep function were removed. These occurred
    in tail streams implementation. This function can interact
    with the SIGALRM signal.
  - Fixed broken argument defaulting in take-until function.
  - Fixed regression from TXR 42 (!) in pattern
    function argument passing. This bug has evaded detection for
    100 public releases, over 4.5 years.
  - Added support for adherence to ISO C rules regarding switching
    between input and output operations on update streams,
    hiding this issue from TXR programs.  This seems to be needed
    on all tested platforms other than the GNU C library.



                                    TXR 141
                                   2016-05-20


  Features

  - Support for Unix terminal handling (termios).
  - New functions at-exit-call and at-exit-do-not-call, for registering
    actions to take when process exits.
  - New self-load-path symbol macro, allowing code to interpolate its load
    location.
  - Interactive listener now supports two behavioral styles of visual
    selection, controlled by new *listener-sel-inclusive-p* variable.

  Bugs

  - Incorrect argument defaulting in record-adapter function.
  - Incorrect argument handling in - and / functions,
    triggering error in [[flipargs -] 2 1]
  - Fixed gc-related bug in structs.
  - Fixed gc-related bug in recent cons recycling
    optimization.



                                    TXR 140
                                   2016-05-08


  Features

  - New fixnum-min and fixnum-max variables.
  - Improvements in pseudo-random number generator.
  - TXR extraction language:
    - New @(call fun ...) directive provides indirection on pattern
      functions, via symbols.
  - Unix security:
    - added setgroups, getresuid, getresgid, setresuid and
      setresgid where available.
    - added the setgroups function, where available.
    - added support for setgid operation.
    - New --rexec option to help with setuid on some platforms.
  - Process execution:
    - The standard input, output and error descriptors of subprocesses
      are now derived from the current *stdin*, *stdout* and *stderr*
      streams, making useful redirection tricks possible.
  - TXR now correctly calculates its sysroot even if the executable
    is renamed (within the same directory).
  - New filesystem access testing functions:
    path-readable-to-me-p, path-read-writable-to-me-p,
    path-strictly-private-to-me-p.

  Bugs

  - Serious bug fixed in bignum integers: incorrect treatment
    of negative values at the boundary between fixnum and bignum.
  - Fixed issue of TXR binary requiring an executable stack on
    GNU/Linux platforms.
  - Fixed broken setuid privilege dropping.
  - Bugfix in path-writable-to-me function.
  - Fixes in Vim syntax highlighting definition.
  - self-path, *args* and *args-full* now have bindings in
    the listener.



                                    TXR 139
                                   2016-04-23


  Features

  - Change of rules regarding Lisp variable visibility in TXR
    Pattern language.
  - unget-char now allows more than one character of pushback.
  - The POSIX fnmatch function is now available.
  - Rules used by object printer for deciding which character objects
    and string constituent characters to print using hex escapes
    have been harmonized together, with some changes to both.
  - path-private-to-me function avoids making unnecessary call
    to getgrgid, which is somewhat heavy-weight.
  - A list can now be passed as the path argument to the ftw
    function; it will recurse over it.

  Bugs

  - Issue of certain macros not expanding in @(output) blocks.
  - Macro not expanding as argument of @(if) directive.
  - Newline not being allowed in string fed to regex-parse.
  - Broken unget-char operation over string input streams.
  - Rewrite of horribly broken read-until-match function,
    which also fixes broken record streams feature
    (record-adapter function).
  - Fixed optional argument in get-string not defaulting
    properly.
  - Out of range character escapes are diagnosed better.
  - regex-parse was silently returning nil upon syntax
    errors; now throws exception.
  - regex-parse was not handling non-UTF-8 bytes in the
    string: are now mapped to U+DCXX block now and
    incorporated as literal characters.
  - Numerous memory leaks fixed which could occur in various
    functions if a type mismatch exception occurs after
    some local resource has already been allocated.



                                    TXR 138
                                   2016-04-16


  Features

  - New accessor sock-set-peer, and sock-peer becomes
    an accessor so (set (sock-peer sock) addr) is possible.
    - Allows "soft connected" datagram sockets:
      - send to different destinations with same socket
        by altering sock-peer address.
  - Dot position in function calls is now defined in terms
    of transformation to apply:
    - dot position expr can now be a symbol macro.
    - value of dot position is no longer applied as
      a list of arguments if it is a non-list sequence.
  - Better tracking of form expansion origins, leading to
    improvement in error diagnostics.
  - New fmt function for terse formatting to a string,
    shorthand for (format nil ...).
  - New open-socket-pair function, providing access to socketpair.
  - proper-listp function now known as proper-list-p.
    - old name still there, but deprecated.
  - New obtain* and obtain*-block macros.
  - New ftw function for fire tree walking, providing access to POSIX nftw.

  Bugs

  - Fixed issue in the UTF-8 encoding of Unicode strings, which TXR
    uses when calling API's that require char * strings:
    - U+DC00 pseudo-null produces the NUL character, which appears
      to terminate the char * string even if more characters follow,
      which is a problem.
    - Now, if U+DC00 occurs in a string that is being converted
      to UTF-8, an exception is thrown.
  - "Abstract" UNIX socket addresses properly supported on Linux.
  - defstruct:
    - now diagnoses use of nonexistent struct as supertype.
    - also fixed some minor diagnostic issues in defstruct.
  - symbol macros:
    - replacement forms were wrongly being expanded at bind time, and then
      possibly again at sustitution time.
    - now replacement forms are only macro-expanded during substitution.
  - glob function:
    - error callback hardened against continuation capture,
      absconding exits and re-entry of glob.
    - non-local exits allowed from error callback.
    - possible memory leak fixed.
  - Access to lib-version variable wasn't triggering its auto-load.
  - Fixed broken argument handling in umethod, also affecting
    umeth macro.
  - Invalid open mode strings in socket functions now diagnosed.
  - Fixed broken error handling in datagram case of sock-accept.
  - Source files processed by the load function, @(load) directive
    or by invocation of txr are now closed immediately after parsing.
  - TXR language:
    - fixed bug in data source opening logic leading to a mishandling
      of a case like @(bind x "a")text at top of script.



                                    TXR 137
                                   2016-03-30


  Features

  - Heads up: @(if) directive changes semantics.
    - no longer a syntactic sugar for @(cases)/@(require).
  - Rightmost-match variants added for various search
    functions: rfind, rpos, rmember and numerous others.
  - New macro lset for assigning consecutive elements of
    a sequence to multiple places.

  Bugs

  - Fix in lazy string implementation:
    - printing lazy string was not observing the string's limit
    - see limit-count param in lazy-str function.
  - Fix in error location reporting across macro expansions.



                                    TXR 136
                                   2016-03-20


  Features

  - I/O stream mode handling improvements:
    - "i" interactive mode specifies line buffering
    - New "l" and "u" mode letters for specifying line buffered
      and unbuffered mode on streams.
    - Decimal digit character in mode string specifies stream
      buffer size as a binary exponent with implicit 1024 multiplier.
    - Mode strings have a more permissive syntax; everything
      is optional with defaulting based on stream type.
  - Sockets:
    - sock-connect returns socket instead of useless t value.
    - New functions sock-recv-timeout and sock-send-timeout
      for setting the timeout options on socket.
      - I/O timeouts throw exception of type timeout-error
    - sock-connect and sock-accept have new parameter for
      timing out.
    - socket open mode is r+b by default, not r+.
  - TXR Extraction Language:
    - @(output) destination can be a stream object now
    - @(repeat) and @(rep) can now bind new variables, via
      extension to :vars syntax and semantics.

  Bugs

  - unget-byte sets errno to zero to avoid false errno
    association with failure.
  - Bugfix in @(repeat)/@(rep) internals: destructive manipulation of lists.
  - Tail streams honor all aspects of mode for re-opened
    stdio streams.



                                    TXR 135
                                   2016-03-10


  Features

  - The umask function is now provided.
  - Special new stream type for datagram sockets, allowing
    datagram programming to be very similar to and in some cases
    identical to stream socket programming.
  - A nil value in setenv now does unsetenv.
  - Improvements in sockets:
    - printed representation of sockets.
    - error messages.
    - error handling.

  Bugs

  - The get-string function closing a stream when told not to via a
    nil value of the close-after-p optional argument.
  - The setenv function had a similar bug, ignoring the overwrite-p optional
    argument being passed as nil.
  - Fixed cases of an incorrect error string from file streams returned by
    get-error-string.
  - Fixed gc-related instability caused by mishandling a field in an internal
    parser structure with regard to the ephemeral gc rules.



                                    TXR 134
                                   2016-03-01


  Features

  - Unhandled exceptions now unwind; so programs which terminate due
    to an unhandled exception have their cleanup performed.
  - Setuid support:
    - A setuid TXR executable supports setuid TXR scripts, even if
      the underlying OS doesn't allow setuid scripts.
    - When not running a setuid script, the setuid TXR executable
      drops privileges early in its execution, reducing the
      risk that it can be exploited.
  - New --eargs option, allows script name to be embedded among options
    in a hash bang line.
  - Networking support: TXR now supports IPv4, IPv6 and Unix socket
    communication.
  - Useful @(next nil) variant of @(next) directive to suppress unwanted
    treatment of a command line argument as a data source.
  - New functions expand-left and nexpand-left.

  Bugs

  - Expressions in @(require) were not being evaluated in the
    correct context.
  - Fixed destructive append behavior in append-each.



                                    TXR 133
                                   2016-01-21


  Features

  - New function, split*; like split* but keep empty pieces.
  - New function random-state-get-vec to get vector representation
    of random state.
  - vec-list now takes sequences as inputs, not just lists.
  - New functions base64-encode and base64-decode.

  Bugs

  - Bug in env-hash with values containing equal sign.
  - Bugfixes in partition* function.
  - More robust handling of invalid modulus values in rand
    and random.
  - Internal fixes in rand and random.
  - Serious regression in get-char on string input streams.
  - Missing syntax highlighting for some TXR symbols.
  - Bug in signal handling (synchronizing cached signal mask with
    OS signal mask) causing signals to be ignored after jumping
    out of a signal handling lambda with a dynamic control transfer.



                                    TXR 132
                                   2016-01-16


  Features

  - Unix crypt function exposed.
  - The identity function gets an alias named "use", for a
    readability improvement in certain functional coding scenarios.
  - The / function becomes n-ary, allowing forms like (/ 12 3 4).
  - New :mandatory keyword in until/last clauses, makes them a
    required match.

  Bugs

  - Fixed lack of location info for unbound variable error in dohash.
  - *print-flo-format* variable was affecting output of integers.
  - @(gather :vars ()) was behaving the same as @(gather); that is,
    as if :vars wasn't specified at all.



                                    TXR 131
                                   2016-01-13


  Bugs

  - Configuration with --valgrind now builds again.
  - Invalid lazy string optimization introduced in TXR 118
    has been re-worked. This affects the conformance of
    the @(freeform) directive to documentation.
  - When a macro declines to perform an expansion by
    returning the :form, the form was recorded as its own
    macro ancestor; now, nothing is recorded.
  - Fixed issues in how regex objects are printed:
    - Control characters and certain other characters were
      being dumped literally.
    - Now certain characters like newline print using
      the escape codes like \n.
    - Other control characters, as well as U+7F (ASCII DEL)
      and characters in the U+DCXX surrogate range are
      printed as hex codes.
    - [ and ] in a character class are properly escaped.
  - Fixed issue in string literals: semicolon character
    effectively disappearing after control character that
    is converted to hex escape.



                                    TXR 130
                                   2016-01-05


  Features

  - Interactive listener:
    - New Ctrl-X Enter command: submit line, but stay in history
      and advance forward by one line.
  - I/O:
    - New record-adapter function creates a "stream adapter" virtual
      stream object based on an existing stream.
      - The adapter changes the semantics of get-line to support
        delimiting of records via a regular expression (which is stored
        in the adapter), rather than the newline character.
      - With this, TXR can now process streams delimited in alternative
        was as if they were line-oriented.
    - New read-until-match function: extract characters from a stream,
      accumulated into a string, until a match for a regex occurs in
      that stream, and discard the match.
  - OOP:
    - In defstruct, function slots now initialized before other static
      slots regardless of order of specifiers.
  - Library:
    - New chr-digit and chr-xdigit functions: like chr-isdigit and
      chr-isxdigit, but returning the digit value instead of the
      t symbol.

  Bugs

  - Interactive listener:
    - Fixed recent regression in Tab completion: missing completion on special
      operators and macros.
    - Fixed Ctrl-X commands not recognized in a history search.
  - OOP:
    - Access to static slots of a lazy struct was triggering
      instantiation; this is fixed.
  - Library:
    - Recent change in chr-isdigit and chr-isxdigit return value
      semantics has been reverted, due to potentially breaking code
      which relies on (eql (chr-isdigit #\0) (chr-isdigit #\1)).



                                    TXR 129
                                   2015-12-30


  Features

  - TXR pattern language:
    - @(line) directive now works in horizontal mode
    - New @(data) and @(name) directives for capturing/matching
      raw data, and name of data source.
    - :counter in @(repeat)/@(rep) can now be given a starting value.
    - Quasiliterals in the pattern language are now evaluated as Lisp
      quasiliterals.
      - the compatibility mechanism provides the previous evaluation mode.
    - The same applies to @(output): variables now follow Lisp rules,
      similarly to variables in quasiliterals.
    - @(repeat) and @(rep) now "see" Lisp globals; no need to list these
      using :vars.
  - Lisp library:
    - chr-isdigit and chr-isxdigit now return the integer digit value
      when the test is true, rather than just t.
  - Object printing:
    - Lazy strings are now printed in a reasonable way, not shortened
      to the #<lazy-string ...> notation.
    - New special variales for global control over how floating-point
      objects are rendered: *print-flo-format* and *print-fo-format*.
  - OOP:
    - with-slots macro added.
  - Yet improved location and macro ancestry tracing in unhandled
    exception diagnostics.

  Bugs

  - Vim syntax highlighting files: fixed regression in genvim.txr
    causing missing identifiers.
  - Four-year-old bug in @(collect)/@(coll) fixed, causing the
    @(last)/@(until) clauses to be evaluated with an empty list
    of variable bindings whenever the main clause fails.
  - Fixed exception in @(freeform) directive when scanning from
    an interactive input stream.
  - Bugfixes in pattern language debug tracing (-v).



                                    TXR 128
                                   2015-12-19


  Features

  - Further refinement of function and macro coexistence:
    - symbol-function, fboundp and fmakunbound operate only on function
      binding.
    - new symbol-macro function.
  - The :whole and :form parameters now accept a destructuring parameter
    list as their argument, no longer insisting on nothing but a symbol.
  - OOP:
    - defstruct now supports a :postinit slot specifier, which allows
      additional actions to be taken after an object is constructed, and the
      slots are fully initialized.
    - make-struct-type has a new argument related to the above change:
      a <postinitfun> function.
  - Place manipulation macros now propagate ancestry information from
    the place forms on which they operate to the generate place-accessing
    operations, as if those operations were macro-expansions of the places.
    (Which they are not, at least not exactly). The benefit is that errors in
    those place access operations can consequently be traced to the original
    place forms, for more meaningful diagnosis.
  - dot notation like a.b.c now prints back as a.b.c rather than
    (qref a b c).
  - Doc:
    - HTML section numbers are now hyperlinks which jump back to the
      right place in the table of contents.
    - On jump-back, the table of contents expands sufficiently to
      reveal the target entry, if that is not already showing.

  Bugs

  - Fixed incorrect behavior of (replace seq val nil), also affecting
    replace-list, replace-vec and replace-str. The nil was wrongly
    treated as as a zero <from> argument (acting in complement to a
    missing <to> denoting the end of seq), instead of an empty <idx-list>.
  - Fixed broken assignment to [h x] when h is a hash and x is a vector
    or list.
  - Fixed dot syntax like a.b not recording source location info into
    the (qref ...) form when its constituents are atoms, such as symbols.
  - Fixed neglect to propagate macro ancestry information across
    non-macro code transformations.
  - Fixed situations in which the debugger fails to report the
    source file and line number.
  - Fixed annoying debugger behavior of stepping through the macro expansion
    time evaluations of a query by making that behavior subject to
    a new option (--debug-expansions). Debugger will now stop on
    the first line of the TXR language query like it used to.



                                    TXR 127
                                   2015-12-10


  Features

  - OOP:
    - defun can define methods now, using a compound naming syntax,
      as alternative to defmeth.
    - func-get-name function works on methods and produces compound name.
    - defmeth returns compound name, and so does defun when defining a method.
    - improved semantics in static-slot-ensure
  - Large file support: TXR now uses 64 bit file offsets in functions like
    seek-stream and truncate on Linux platforms where this is
    a compile-time switch.
  - regex-range now returns a range object.
  - Macros:
    - Improvements in macro expansion tracing for unhandled
      exceptions, or those caught in the REPL.
    - New macro-ancestor function for programmatically retrieving
      the form from which a given form was derived by macro expansion.
    - New mboundp and mmakunbound functions for inquiring
      about and removing a global operator macro binding.
    - Global operator macros can now coexist with functions of the
      same name.
  - Doc:
    - HTML man page now has a collapsible table of contents, thanks
      to Javascript embedded in the document.
    - Sections have been reorganized.
    - Smattering of corrections.

  Bugs

  - Fixed new struct types failing to inherit static slots that
    were added to ancestor types using implicit or explicit use of
    ensure-static-slot (such as methods defined outside of defstruct).
  - Fixes to the anaphoric ifa macro: the condition can be a dwim form, and
    with special handling.
  - Fixed incorrectly implemented less comparison for range objects.
  - Fixed crash in get-line when invoked on a closed file stream.
  - Fixed ftruncate not being detected and used on Solaris.



                                    TXR 126
                                   2015-11-29


  Features

  - New functions window-map and window-mappend for filtering sequences
    with a sliding window context surrounding the current element.
  - New macro define-accessor for easily extending functions
    to be accessors (supporting assignment).
  - Diagnostics for unhandled exceptions, and those caught in the REPL,
    now include a detail trace of the macro-expansion which created the
    form in which they originate.
  - Increased stack size on Windows (MinGW and Cygwin).

  Bugs

  - Regression in super function: when called with a struct instance, was
    returning its type rather than supertype.
  - Incorrect behavior (failure) in split and partition functions when index
    argument is a function, and returns nil.
  - Fixed regression in transpose function, causing it to be destructive.
  - Fixed sethash: it was returning a boolean rather than the stored value,
    as documented.
  - Improved clarity of error messages which identify destructuring mismatches
    in macro calls and macro-like binding constructs.
  - Fixed poorly informative diagnostic when defmeth is used on a nonexistent
    struct type.



                                    TXR 125
                                   2015-11-20


  Features

  - OOP improvements:
    - New uslot function and usl macro for functional indirection
      on struct slots.
    - New functors feature: define a lambda method for struct types
      which lets structs be invokd as function.
    - Lazy structs feature:
      - New lnew macro (and make-lazy-struct function) for lazily
        instantiating a new structure.
      - Self-referential, and mutually referential structures can
        be instantiated in one step using the existing mlet and
        lnew.
    - New Equality Substitution feature:
      - An equal method defined on a struct type allows objects to
        to be compared with equal or less, and to be hashed with hash-equal
        (and thus :equal-based hash tables).
      - The method simply returns an object which is used in place of
        the struct for the purpose of the comparison or hash.
  - TXR Extraction Language:
    - @(rep) now available as shorthand for @(coll :vars nil)
    - In @(next source), source can be a Lisp expression without leading @.
    - :to_html and :from_html filters now called :tohml and :fromhtml;
      old names will continue to work.
    - :tohtml filter now also translates ' (ASCII 39 apostrophe) to &#39;.
    - New :tohtml* filter, leaves quotes alone.
  - New butlast function.
  - New html-encode* function.
  - The last function is generic now, applying to strings and vectors.
  - New TXR_COMPAT environment variable, alternative to -C option.

  Bugs

  - Fixed missing autoload registration for meth, umeth and defmeth symbols.
  - Fixed spurious retention issues in various library functions like
    mapdo, preventing them from processing lazy lists in constant memory.
  - Fixed type hole in the equal function, which treated two COBJ objects of
    different types using a comparison function which assumes they are both
    of the same type.
  - Fixed buggy less function, which was comparing and ranking objects that
    should not be comparable according to the documentation.



                                    TXR 124
                                   2015-11-14


  Features

  - New iread function for reading an object from a stream
    in an interactive-friendly way.
  - Median-of-three pivot selection added to quicksort to
    avoid degenerate cases.
  - Scoping rule for implicit nil block in the for operator
    has changed: the block now surrounds the variable
    initialization forms.
  - New block* operator and functions return* and sys:abscond*,
    which allow blocks to be defined and referenced
    using symbols computed at run-time.
  - New function group-reduce for flexible decimation of a sequence
    to a hash table.
  - The (rcons x y) syntax is printed as x..y now.
  - nreverse handles strings and vectors now, and reverses them in place.
  - reverse handles vectors and strings in more efficient way,
    and can reverse lazy strings.
  - Functions revappend and nreconc added.
  - New *print-flo-precision* special variable for controlling precision
    applied when printing floating point objects.
  - New *print-base* special variable for controlling base in which
    integer objects are printed. (Only binary, octal, decimal and hex
    are supported.)

  Bugs

  - Fixed object printer throwing exceptions when meeting unexpected syntax
    in forms that have special printed notation like quote and whatnot.
    The correct behavior is to avoid the notation and print the raw syntax.
  - Fixed ~o format specifier, broken with respect to bignum operands
    in TXR 120, when ~b was introduced.



                                    TXR 123
                                   2015-11-06


  Bugs

  - Fixed regression introduced in TXR 115, in the search_regex
    function and functionality built on it.



                                    TXR 122
                                   2015-11-05


  Features

  - New type: range.
    - range is similar to a cons cell, but is an atom.
    - has two fields called from and to.
    - the dotdot syntax a..b  now produces a range, not a cons.
    - printed notation looks like #R(0 10)
    - related functions: rcons, rangep, from, to.

  - sys:capture-cont API altered to call/cc style: passes
    continuation to specified function when capturing,
    returns value when resuming.

  - New interface to delimited continuations: suspend macro.

  - TXR pattern variables now appear dynamic to embedded Lisp
    expressions, rather than lexical. The scoping rule is
    documented.

  - The yield and yield-from operators can omit the argument
    form, in which case they retrieve the value passed in from
    the resume function without yielding an item.

  - Architecture support: Power PC 64.



                                    TXR 121
                                   2015-10-30



  Features

  - TXR Lisp now has delimited continuations.
    - easy to use via obtain/yield macro operators.
  - New function truncate-stream for truncating files.
  - Reduced stack usage on glibc systems by shrinking unwind
    frames, achieved by replacing the 128 byte wide sigset_t
    type with a much smaller type.
  - The way place macros are expanded has improved, making
    them more useful.
  - Macro parameter lists have a :form keyword now for capturing
    the whole form.

  Bugs

  - Implemented missing second argument of zap macro.
  - Assignment to *listener-hist-len* in ~/.txr_profile was not
    correctly taking effect prior to loading history, causing
    truncation to 100 lines.
  - Fixed typo causing with-hash-iter macro not to autoload.
  - Fixed crash in hash-next.


                                    TXR 120
                                   2015-10-18


  Features

  - Structs:
    - Finalizers (specified by :fini) are now registered early in the
      object initialization (at a given inheritance level). This allows
      finalizers to clean up abandoned initializations.
    - If initialization of a struct is abandoned, the finalizers are invoked
      immediately, as part of unwinding.
    - New defmeth macro for defining methods outside of a defstruct.
    - New static-slot-ensure function for adding a new static slot to
      a struct (and its inheritance descendants).
    - static-slot and static-slot-set can take struct type name in place of
      struct type.
  - New functions hash-begin and hash-next, for iterating hash table,
    and with-hash-iter macro.
  - Listener:
    - TXR now launches listener if no arguments are given.
  - Exceptions:
    - New way of handling exceptions without unwinding: handler-bind and
      handle operators.
    - Introspection over exception frames: get-frames and find-frame
      functions can inquire about frames, and invoke-catch can transfer
      control to a chosen catch frame.
  - New ~b conversion specifier in format function for printing integers
    in binary.
  - The typecase macro has been added, similar to Common Lisp's.
  - Some functions have been renamed for consistency, but remain available
    under old names: list-vector -> list-vec, vector-list -> vec->list,
    chr-num -> chr-int, num-chr -> int-chr.
  - The sh function isn't implemented using the C library function
    system any more.

  Bugs

  - Fixed use of nonexistent functions in error handling cases
    of defstruct macro.
  - Fixed bug in the overflow check in the chk_grow_vec function,
    used by string-extend, the get-line function of many stream types,
    and string output streams.
  - Fixed unterminated format argument list issue affecting interactive
    listener. (Reproduced on Mac OS/X).



                                    TXR 119
                                   2015-10-10


  Features

  - Interactive listener:
    - New Ctrl-X Ctrl-R to insert entire previous line.
    - Word/Atom from previous line works relative to recalled history line.
    - New Ctrl-X Tab for substring-searching completion.
  - Empty loops can be interrupted by signals: (for () () ()) is now
    interruptible at the interactive prompt.
  - New umethod and umeth function for indirecting on a method in a way
    that is detached from an object instance.
  - Boa construction of structures can have optional arguments now.
  - copy and copy-str now copy lazy strings as lazy strings, rather
    than forcing to regular string.
  - New functions for sequence manipulation: take, take-while, take-until,
    drop, drop-while, drop-until.
  - New function ginterate for lazy generation which includes the terminating
    item.
  - New function expand-right for lazily generating a sequence in a roughly
    opposite way to a reduce-right reduction.
  - New function call-finalizers for explicitly invoking and clearing the
    registered GC finalizers for an object.
  - New functions clear-struct and reset-struct for clearing all slots
    of a structure to nil, or reinitializing a struct to default values,
    respective.
  - New function replace-struct for changing and slot contents and type
    of a struct to match an example object.
  - Missing promisep function added to test whether an object is a promise
    created by the delay macro.
  - New defex macro, to define exception subtype relationships out of TXR Lisp.
    (Previously available only in the TXR pattern language).
    - Also useful surrounding functions: exception-subtype-p,
    register-exception-subtype.
  - New macros for working with streams in lexical scopes:
    with-out-string-stream, with-out-strlist-stream with-in-string-stream,
    with-in-string-byte-stream, with-stream.
  - New with-objects macro for scoped finalization of objects,
    somewhat like destruction in C++.
  - Vim syntax highlighting file sets "lispwords" option for
    more accurate indentation of TXR Lisp.

  Bugs

  - Fixed symbol-function throwing error on builtin macros.
  - macro-time is now special-operator-p.
  - Named block around bodies of methods and functions declared
    in defstruct.
  - slot-p renamed to slotp (old name supported in compatibility mode).
  - Bug in structure initialization: boa arguments were applied first,
    before other initialiations, rather than last.
  - The conses function works on vectors and strings.



                                    TXR 118
                                   2015-10-01


  Features

  - Interactive listener:
    - Parentheses matching jump (Ctrl-]) now finds the closest parenthesis,
      bracket or brace if the cursor isn't on one already.
    - Tab completion recognizes .( and (( context in front of symbol
      being completed, and doesn't restrict to function names.
    - Parenthesis-matching "jump" is now performed on backspace also,
      if cursor lands on or next to a parenthesis.
    - Ctrl-A and Ctrl-E (or Home and End) keys have now have a useful behavior
      in multi-line mode, allowing a jump to the start/end of the current line
      as well as start/end of the edit buffer.

  - Optimizations in regular expressions:
    - In particular, prefix matches involving the complement operator now
      indicate termination rather than wastefully consuming the remainder of
      the string.
    - Algebraic reductions performed on regexes. In some cases, these
      reduce an expression which contains exotic operators such that it
      can be compiled to NFA.

  - Structures:
    - Structures can now have static slots: slots shared among all instances
      of the same type (but not other types, not even derived types).
    - Static slots are now the preferred the basis for implementing functions
      and methods.
    - The defstruct syntax has a richer syntax which lets static slots
      be expressed, as well as methods.
    - Construction and finalization code can be specified in defstruct.
    - Many new functions related to structures.

  - Optimization in lazy strings: forcing lazy strings is more efficient.

  - String input streams do not force lazy strings now.

  - The "matches nothing" regular expression represented in the
    abstract syntax by the object t now handled by regex printer,
    and rendered as [].

  Bugs

  - Fixed a silly delete-previous-word behavior in multi-line mode:
    not treating the line-break as a whitespace character that separates words.

  - Fixed various problems in screen update and cursor positioning behavior in
    interactive listener, affecting multi-line mode.

  - Fixed two bugs in the ifa/conda macros.

  - The return and return-from operators do not abort TXR when a label is not
    found, but properly throw an exception.

  - Garbage collection: if GC is triggered in response to a malloc
    delta, a full GC is now performed. This prevents runaway memory
    allocation behavior in code which manipulates large arrays, strings
    or integers.

  - Fixed strangely compounded error message issued in the situation that
    unbound variables occur in the TXR pattern language.

  - Various "internal error" situations in the regex module now throw
    exceptions. Consequently, TXR will not die if a bad abstract syntax
    tree is passed to the regex compiler.

  - Regex printer was throwing an exception when printing a character
    class containing \w, \s or \d.



                                    TXR 117
                                   2015-09-23


  Features

  - Interactive listener improvements:
    - Visual selection of text, with copy and paste:
      Ctrl-S, Ctrl-Q, Ctrl-X Ctrl-Q, Ctr-^.
    - Undo feature with separate undo per history line.
    - Security checks on ~/.txr_profile permissions.
    - Location reporting when exceptions caught.
    - Syntax errors pinpointed to line in multi-line entry.
    - Ctrl-X Ctrl-V "super verbatim" mode.
    - Temp file used by Ctrl-X Ctrl-E has .tl suffix now for
      correct syntax highlighting.
    - Ctrl-X <n> Ctrl-W: insert word from previous line.
    - Ctrl-X <n> Ctrl-A: insert atom from previous line
    - Delete to beginning of line or to end of line now limited
      to current physical line in multi-line mode.
    - Ctrl-X Ctrl-K to delete current physical line.
    - Visual Parenthesis matching works forward now as well as reverse.
    - Ctrl-] jump to matching parenthesis.

  - Unix group database functions added: getgrgid, getgrnam, getgrent.

  - New path-private-to-me-p function to detect whether a file
    is writable to users other than the owner.

  - New flatcar and flatcar* functions. Variants of flatten which
    handle improper lists and preserve nil atoms.

  Bugs

  - Correct tab alignment in multi-line.

  - Fixed screen untidiness on Ctrl-Z and Ctrl-C in multi-line mode.

  - sub function and [] indexing were not handling lazy string objects.

  - sub-str wasn't handling defaulted optional arguments correctly for
    lazy strings.



                                    TXR 116
                                   2015-09-17


  Features

  * Interactive listener improvements:
    * Ctrl-R reverse search has been implemented.
    * Tab completion now works anywhere in a line, not only
      at the very end.
    * Parenthesis matching: cursor jumps briefly to matching bracket,
      brace or parenthesis.
    * Multi-line mode, with proper history support for
      lines containing embedded line breaks.
    * Ctrl-C cleanly cancels completion, and navigation keys
      smoothly transition from completion to edit mode.
    * Ctrl-X Ctrl-E edits line in external editor.
    * Ctrl-Z suspend and Ctrl-L clear work in completion mode.
    * New :read command for parsing pasted material from terminal.
    * Dynamic resizing of the terminal is now obeyed (SIGWINCH signal).
    * A ~/.txr_profile file is now read on interactive start-up,
      and Lisp forms are evaluated from it.
    * multi-line mode and history length are configurable via special
      variables.

  * Removed arbitrary limit on regular expression size (number of states).

  * Small regexes are processed with a smaller memory footprint due to
    exact allocation of certain arrays and stack allocation is used
    in some cases instead of malloc.

  Bugs

  * Fixed memory leak of blank lines in listener.

  * Comment lines entered into the listener do not produce a syntax
    error and are entered into history.

  * Fixed memory leak in NFA regular expressions.

  * Fixed a counter wraparound bug in NFA regular expressions, resulting
    in incorrect operation after 4.2 billion state transitions (2**32
    characters fed to the same regular expression, whether in a single
    job or across multiple jobs.)

  * Addressed some minor issues in unwinding and signal handling.



                                    TXR 115
                                   2015-09-11


  Features

  * Sixth anniversary edition!

  * New REPL on Unix platforms: an interactive listener with line editing,
    history recall, completion and exception/interrupt trapping.
    This is started with "txr -i".

  * Improvements in error reporting.

  * New function, raise, for raising a signal, eliminating
    the (kill (getpid) sig) workaround.

  * New functions subtypep and typep for testing subtype relationships
    between types, and between an object and a type.

  * New abstract types usable in conjunction with subtypep and typep.
    For instance, integer and number are types. A fixnum is a subtype
    of integer, which is a subtype of number. Type hiearchy documented in
    detail.

  * The printed representation of function objects is much more
    informative than before.

  * The variable *args* is now not only bound when evaluating Lisp
    expressions from the command line (with -e and related options)
    but it is also modifiable.  Command line expressions can rewrite the
    remaining arguments by updating *args* and these arguments
    instantly take effect.

  * Some section restructuring in the documentation.

  * New functions for working with package objects: package-alist,
    package-name, package-symbols.

  Bugs

  - Fixed serious problem in implementation of signal handling:
    the function to manipulate the signal mask in a cached way
    wasn't actually calling into the OS to set the real signal mask.

  - Fixed another serious problem in signal handling: a Lisp function
    throwing an exception out of a signal handler would cause an
    imbalance in an internal signal reentry counter, causing later
    signal handling to stop working properly.

  - Fixed an assertion occurring in the Flex-generated scanner if the parsing
    of a stream is aborted by an exception, and then the parser is called
    again.

  - Fixed regression dating back to TXR 105: the TXR pattern language
    failing to use a "real-time" stream for standard input, when it
    is a TTY, thus breaking the specials upport for pattern matching
    into interactive input.

  - Removed an accidentally committed debug print, producing output
    in situations when a function is called with the wrong number of arguments.

  - Fixed (eval 'sym) reporting the unbound variable sym against the wrong
    source code location.

  - Fixed random state objects being of type *random-state* rather than
    of random-state. The earmuffed symbol was never intended.

  - The accessors fun, symbol-function and symbol-value were completely
    broken for use as syntactic places.

  - Fixed multiple evaluation of the slot argument when slot used as
    syntactic place accessor: (inc (slot x y)) now evaluates y only once,
    just like x.

  - Fixed another gaping bug in the finalization hook mechanism: objects
    being promoted into the tenured generation had their finalizers
    called while still remaining reachable.

  - Fixed the self-path variable not being bound when evaluating Lisp code from
    a .tl file or command line arguments like -e.

  - Fixed *args* not being bound when evaluating Lisp expressions from
    the command line with -e and related options.

  - Fixed missing :tointeger filter. It was actually registered under the
    misspelled keyword symbol :toinger, and never existed as :tointeger.
    It has actually been renamed to :toint.


                                    TXR 114
                                   2015-09-03


  Features

  ! Note: TXR code base converted to new way of handling variadic function
    (variable-length struct args, defined on stack).

  * New function shuffle: Fisher-Yates/Knuth on lists and vectors.

  * Numerous documentation improvements.

  * Improved diagnostic in situations when an error exception is
    thrown at code parse time, pinpointing file and line number.

  * New feature: structs! TXR now has typed data structures with named
    slots. Structures can be related by single inheritance, and
    single-dispatch OOP is easily expressed.

  * stat, lstat and fstat functions return a stat structure now.

  * New functions: time-struct-local and time-struct-utc return
    a structure instead of a list of fields.

  * Unix password database functions: getpwent, getpwuid, getpwnam.

  Bugs

  * Fixed regression: broken treatment of [hash x..y] place.

  * Fixed finalize function, which was found to be fundamentally broken.
    Advertized as a new feature in TXR 101, it now actually works.



                                    TXR 113
                                   2015-08-20


  Features

  ! Note: txr builds and works with Berkeley Yacc again.

  ! Note: txr is starting to make use of the alloca function.

  * regex-parse function allows unescaped slashes and treats them
    as verbatim characters, in recognition of slash delimiting being
    needed only by regex literals.

  * Better argument number mismatch reporting in certain indirect
    function call situations.

  Bugs

  * Serious quasiquote regression fixed (from TXR 110): function call
    syntax interpolated into a quasiliteral not working for TXR pattern
    language quasiliterals, when the function is called with exactly
    one argument; e.g. @(bind x `abc @(list 1)`).

  * Serious parser problem fixed affecting Lisp code being read from
    streams. The wrong kind of weak hash table was used to associate
    parsers and streams, causing a disruption when garbage collection
    kicks in, precipitating a false syntax error.

  * Nested meta-variable references now work in quasiliterals.  If a
    quasiliteral is nested in two layers of op syntax, it can use notation
    like @@@1 and @@@rest to reach the outer parameters, and so on.

  * Minor spurious retention issues addressed (garbage collection).

  * Numerous markup errors fixed in documentation (thanks to
    Dave Love of Fedora Project).



                                    TXR 112
                                   2015-08-14


  Features

  ! Note: the ChangeLog is discontinued. Description of changes, going
    forward, is maintained in git commit messages only, in a hybrid format
    which conforms to ChangeLog and git conventions at the same time.

  ! Note: txr doesn't work correctly if parse.y is built with Byacc.
    GNU Bison must be used. This will be addressed in the next release,
    hopefully.

  - Support for display width concept: identifying Unicode characters which
    occupy two print positions on tty-like display and printing devices.
    - Indentation, and field formatting in the format function obey display
      width, rather than naive string length.
    - The new display-width function calculates the display width of
      characters and strings.

  - The a..b syntax is slightly revised; it can occur outside of a list now,
    and in the terminating position of a dotted list. It correctly associates,
    so that a..b..c denotes (cons a (cons b c)).

  - New function clamp for clamping numeric and other values to a range.

  - New "qref dot" syntax: a dot flanked by expressions and no whitespace
    denotes a new syntatic sugar such that a.b.c.d denotes the form
    (qref a b c d), and a.b.(x y).z denotes (qref a b (x y) z).
    However, this qref syntax has no assigned meaning yet (coming soon).

  Bugs

  - Regression in format function introduced in 111 is addressed: geneating
    superfluous left padding when formatting non-numeric fields.

  - Bad consing dot syntax like (a . b c) and (a . b . c)
    is properly diagnosed instead of silently producing
    strange (though consistent) results.

  - Tokens with a package prefix but empty name like abc: are correctly
    handled now by interning a symbol with the name "" (empty string)
    in the given package.

  - Fixed some minor bugs in lexical analysis of floating-point constants:
    actual behavior was interpreting as valid certain forms that were
    documented as erroneous.

  - Fixed stream close bug in catenated streams.



                                    TXR 111
                                   2015-08-08


  Features

  - Nested structural objects (list structure, vectors, hashes) are now printed
    with line breaks and indentation.

  - Introducing global lexical variables, introduced with defvar
    and defparml. Global lexicals are not marked special, and so local
    bindings of the same symbols are ordinary lexicals and not dynamic.

  - Numerous variables in the library are now global lexical rather than special.

  - pi and e are now provided as %pi% and %e%, global lexical.
    The *pi* and *e* specials are retained, and obsolescent.

  - New hash-revget function for reverse lookup through hash tables.

  - New function func-get-name for obtaining name from function.

  - New ~! format directive for controlling hanging indentation.

  - format conversions now support ^ character for centering within
    a field.

  - Output streams now support indentation. This is used by the object
    printer and by the ~! format directive, and also exposed by
    a group of new functions like set-indent-mode.

  - TXR Lisp documentation sections re-arranged for better organization,
    and other improvements in documentation.

  - Improvements in matching error exceptions to source code location,
    and some other diagnostic improvements.

  - New wrapper functions for Unix lstat and fstat for inquiring about the
    properties of symbolic links, and open files.

  - New Unix wrappers for uid/gid functions: getuid, setuid, etc.

  - New functions for conveniently testing for file existence, type, ownership
    and permission, and relative age.

  - Debugger won't step into auto-loaded library code now, unless
    requested with new --debug-autoload command line option.

  Bugs

  - Fixed parsing bug in txr-case macro: throwing error on correct syntax.

  - Discovered that an object initialization pattern believed to be
    correct is flawed in the face of generational GC. Fixed instances
    in hashing and regex module.

  - Documented special variable *args-full* is now actually implemented.
    It was implemented as *full-args*, which is retained, but obsolescent.

  - Operations on an output string stream which overflow throw
    exception instead of returning nil.

  - Fixed incorrect handling of negative field widths in format,
    when specified dynamically via *.



                                    TXR 110
                                   2015-07-25


  Features

  - New relational predicate functions hash-subset and hash-proper-subset.

  - New functions hash-from-pairs and hash-list.

  - Improvements in quasiliterals:
    - compound @@ now supported on numbers and symbols, improving utility of
      quasiliterals in multiply nested op syntax.
    - \@ escape introduced for encoding literal @ in quasiliterals.
    - @<num> notation allowed in brace variables (more of a bugfix).

  - Optional trailing semicolon punctuator supported on hex and octal
    characters in string and quasiliterals, like it already is on hex and octal
    characters in the TXR pattern language.

  - The op syntax positional arguments @1, @2 ... and @rest are now
    syntactic places: they can be assigned, etc.

  - Powerful new binding macros placelet and placelet* for creating lexical
    aliases for syntactic places with once-evaluation semantics.

  - The "it" variable in the anaphoric ifa is now a place if the form that
    it denotes is a place. The place is evaluated exactly once no matter how
    many times the it variable is accessed or updated in its scope.

  - Hash-bang support in .tl files.

  - With only a few sensible exceptions, most unimplemented stream operations
    now throw exceptions, rather than silently doing nothing.

  - Improved printed representation of stream objects.

  - New split function similar to partition, but keeps empty subsequences.

  - Deletion of a (cdr ...) place now has different semantics, symmetric
    with deletion of a (car ...) place.

  - The accessors caar, cadr, cdar, cddr, ... are all provided now, in
    all combinations down to five levels deep.

  - The functions second, third, fourth, ... are all accessors now,
    and are provided up through tenth. They work with vectors and strings.

  - New feature, "place macros": special macro expansions which apply
    only to syntactic place forms, making it a cinch to define
    to define new places in situations when they are expressible as a
    syntactic transformation to existing places.

  - The nthcdr function from Common Lisp is introduced, with the
    added functionality that it behaves like an accessor.

  - New with-resources macro for block-scoped acquisition and release
    of multiple resources.

  - Backslash-newline continuation in word list listerals (WLL-s) and
    quasiword list literals (QLL-s) now separates words. An unescaped
    newline is not allowed.

  Bugs

  - TXR 97 regression in quasiliterals fixed: `@{(expr) modifier}` ignores
    modifier whenever (expr) is an expression that undergoes expansion.

  - Fix in printed representation of a stdio stream.

  - define-modify-macro was not registered for auto-loading.

  - Fixed broken unget-char and unget-byte on catenated streams.

  - Fixed broken lexical analysis of consecutive top-level forms,
    like 4(x) where one call to the parser consumes 4(, so the
    next call sees x).

  - Fixed bug in print and pprint: wrong return value when printing a dwim
    form. These functions must always return their leftmost argument.



                                    TXR 109
                                   2015-06-21


  Features

  - New anaphoric macros ifa and conda.

  - New function have, synonym of true. Usefully expressive with anaphoric ifa.

  Bugs

  - equal-based hashing function is improved so list and vector permutations
    do not collide to the same value.

  - cat-str function detects overflow in the calculation of the total
    string length to allocate, and throws an exception.

  - Fixed neglected null termination in mkstring function.

  - Fixed garbage collector crash introduced in TXR 108, when traversing
    syntax_tree member of the parser_t structure.



                                    TXR 108
                                   2015-06-13


  Features

  - POSIX poll function exposed.

  - Entirely new macro-based framework for syntactic places (forms denoting
    locations that can be assigned): better featured, extensible than
    previous hard-coded hacks.

  - New macro: define-modify-macro.

  - New pset operator: assign to places in parallel.

  - rplaca and rplacd handle vectors and strings.

  - replacement sequence in replace function can now be a vector.

  - symbol-value retrieves bindings of symbol macros.

  - boundp returns true for symbol macros.

  - New functions: makeunbound and fmakunbound.

  - New concept: deletable places: locations that can not only be accessed, but
    which can be deleted. Existing del operator which contained special case
    hacks is now powerful, general macro that can delete any deletable place.

  - New defparm operator to accompany defvar.

  - symbol-function, symbol-value and fun forms are assignable places.

  - Debug instrumentation code made light weight, leading to big improvement
    in the execution speed of TXR Lisp.

  - New functions catenated-stream-p and catenated-stream-push.

  - New function: load for loading TXR Lisp files. TXR Lisp programming can
    now take place using multiple files containing code that doesn't have
    to be wrapped with @(do ...).

  - @(load) and @(include) directives can also load TXR Lisp now.

  - TXR files which have a .txr suffix can be invoked without the suffix now;
    this is automatically resolved.

  - New --lisp command line option makes TXR source files which have no
    filename suffix be treated as TXR Lisp code rather than TXR Pattern Language.

  Bugs

  - Fixed exception being thrown when trying to print (lambda . atom).

  - Dangling unquotes and splices now receive source location info.

  - Fixed memory corruption caused by disabling garbage collection
    for too long.

  - Better syntax checking in flet, labels, lambda, defun, quote.

  - Addressed clash between flip operator and flip function by renaming
    latter to flipargs.

  - Fixed regression in Verison 106 causing apply calls not to diagnose
    the too many arguments case, and allow a stack overrun.

  - chr-str-set checks for literal strings, which cannot be modified.

  - Fixed runaway recursion in keep-if* and remove-if*.

  - Fixed mismanagement of dyn_env variable leading to spurious
    retention of memory in TXR builds configured without debugger support.
    (Bug exposed by the lighter weight debug support.)

  - Critical bugfix in handling of hashes having both weak keys and values,
    leading to memory corruption.



                                    TXR 107
                                   2015-04-26


  Features

  - Change in representation of promise objects. The force function
    now detects recursion and throws an error.

  - New mlet macro: a step beyond Scheme's letrec.

  - A trivial optimization in the keywordp function more than doubles
    the interpretation speed of TXR Lisp.

  Bugs

  - Fixed regression in the garbage collector introduced in October 2014,
    TXR 100. This would cause runaway memory growth, due to the garbage
    collector creating unnecessary new heaps.



                                    TXR 106
                                   2015-04-21


  Features

  - New function tprint; like pprint but prints lists of strings as
    lines of text.

  - New stream opening option letter "i" for marking streams interactive.

  - New command line option -n which makes standard input noninteractive
    even if it is a TTY.

  - New command line option -P which is like -p but based on pprint.

  - New command line option -t for printing Lisp value using tprint.

  - Stream argument in get-lines is optional, and defaults to *stdin*.

  - The Unix fork and wait functions are exposed for use.

  - New function open-fileno for opening a stream on a Unix file descriptor,
    and fileno for retrieving a file descriptor from a stream which has one.

  - New functions dup (interface to Unix dup and dup2), chmod, exec
    and pipe.

  - New exit* function which calls _exit.

  - Added getenv, setenv and unsetenv functions for environment manipulation.

  - New operator zap for overwriting a place with nil, and returning its
    prior value: good for losing a reference to an object while passing
    it to a function, and other uses.

  - New whilet (while + let) macro for variable binding plus iteration.

  - New iflet and whenlet (if + let, when + let) macros for variable binding
    plus conditional evaluation.

  - New while* and until* loops which unconditionally execute one
    iteration.

  - New dotimes macro for simple iteration.

  - New lcons macro for writing expressive, concise code around lazy conses.

  - Brace variable notation can now contain quotes and quasiquotes.

  - Quasistrings can contain quasiquotes: `prefix @^(,x ,y) suffix`.

  - Fixed regression introduced in TXR 81, causing the argument parts of
    brace variables embedded in quasistrings to disappear.

  - The backslash in regular expressions can now only be used for recognized
    escape sequences, or for making regex special characters literal. If it is
    applied to any other character, it is diagnosed as an error.

  Bugs

  - Fixed stack array overrun in apply function.

  - The int-str function was recognizing the 0x C language convention in base
    16 conversions. Also, an error is now thrown on bases outside of the
    range 2-36.

  - Eliminated nuisance error message issue from the Makefile about git not
    being found; git is properly detected in configure.

  - Streams opened on TTY devices are not automatically marked as interactive.
    This is done only for the *stdin* stream on startup.

  - The ~X specifier in format was printing in lower case just like ~x,
    for bignum arguments.

  - Addressed spurious retention (garbage-collection-related issue) in
    function application.

  - Parser now diagnoses trailing junk in hex, octal and binary literals,
    like #xAD0Z, #o7778 or #b011003.

  - Fixed character escaping issues in open-process on Windows.

  - Fixed bug in error reporting, causing TXR sometimes to report that
    an error was thrown out of a form, when it wasn't in fact that form.

  - Fixed bug in the printing of regular expressions: empty expressions
    like #// or expressins with empty subexpressions like #/a|/ would
    result in an exception.



                                    TXR 105
                                   2015-03-14


  Features

  - New function lexical-lisp1-binding for improved macro-time introspection of
    environments.

  - New functions pad and weave.

  - New regex functions search-regst, match-regst and match-regst-right,
    to complement search-regex, match-regex and match-regex right.

  - Improved error reporting, particularly for errors ocurring during
    the expansion of a macro.

  - Streams have persistent error state. New functions: get-error,
    get-error-str and clear-error.

  - New ignerr macro for trapping exceptions of type error, and converting
    them to a nil return value.

  - New function ensure-dir: creates a directory in the filesystem,
    with all parent directories also created as necessary, and doesn't
    complain if the directory already exists.

  Bugs

  - Bugfixes in append* function: lack of error handling and inappropriate
    forcing of infinite lists in some circumstances.

  - Bugfix in match-regex-right: zero length matches must return zero rather
    than nil.

  - Fixed memory leak in open-process and run on POSIX platforms.

  - Fixed memory corruption bug in run function on Windows platform.



                                    TXR 104
                                   2015-02-08


  Features

  - Symbol macros are now shadowed by lexically scoped functions, when
    referenced from the interior of a form which uses Lisp-1 semantics (a []
    bracketed form, a form based on the op family of operators, or explicit use
    of the dwim operator).

  - New function, abort.

  - TXR now doesn't terminate abnormally (abort) on unhandled exceptions, but
    only terminates unsuccessfully. This provides a better experience on
    the MinGW-based Windows target, where we get an annoying dialog box on
    abort.

  - New *uhandled-hook* variable can be used to register a user-defined
    function which is called when an unhandled exception occurs.

  - New arithmetic function, trunc-rem.

  - When the numbered arguments of partial application under the op family of
    operators are interpolated into a string quasiliteral, modifiers may
    now be applied. For instance (op prinl `@{1 20} @{2 20}`) denotes
    a function which prints its two arguments in twenty-character-wide fields
    separated by a space.

  - Improvements in Windows installer: reduced broadcast delay in registerting
    environment variable. Improved messages in this area.

  - A txr-win.exe can be built now which avoids creating a console window.
    This is included in the installer.

  Bugs

  - Fixed bug in quasiliteral string evaluation in TXR Lisp, in conjunction
    with op arguments like @1, @2, ...  When a value interpolated from
    one of these arguments looked like a form, it was mistakenly subject to
    recursive processing and variable substitution as if it were part of
    the quasiliteral target syntax.

  - Fixed a serious bug in the op macro and all related operators like do
    and ap, in the handling of situations with missing argument numbers
    was broken: such as when @3 is referenced, but not @1 or @2
    (which must generate a function of at least three arguments, which
    ignores its first two). This key feature was discovered to be utterly
    broken.

  - Fix in internal representation of exceptions: (throw 'x "foo") is now
    the same as (throwf x "foo").



                                    TXR 103
                                   2015-02-02


  Features

  - New functions lexical-var-p and lexical-fun-p allow macros to
    inquire whether symbols are known to the macro-expander as
    lexical variable or function binding.

  - get-string now closes the stream after obtaining a string.
    It has a new optional argument which can defeat the behavior.
    The -C option can be used to request the old behavior.

  - New function, constantp.

  - New functions callf, mapf, dup and flip for more power and flexibility
    in function-combining expressions.

  - New function width, for computing the bit width of signed and
    unsigned integers.

  - New function sign-extend, for converting an a two's complement
    bit field of any width into the corresponding integer value.

  - Windows executable (MinGW and Cygwin) now has an icon and
    meta-data like ProductVersion and FileVersion.

  - MinGW-based Windows build is now distributed via an executable installer
    instead of a ZIP file.

  Bugs

  - Fixed regression introduced in 102, in the fix to the make-like
    function.  A one element list being converted to a string was treated
    as an empty list, leading to empty string.

  - Fixed small bug in macro argument list processing. The colon symbol
    was treated as "this argument is missing" for required arguments also,
    rather than just for optional arguments.

  - Fixed a bug in the code expander's handling of macro parameter lists.
    It was not recursing properly over nested patterns occuring in optional
    arguments, and throwing errors on keywords like :env present in
    the optional argument parts of macro parameter lists.



                                    TXR 102
                                   2015-01-13


  Features

  - merge function becomes generic: works over sequences rather
    than just lists.

  - New function glob is provided on platforms which have the Unix
    C library function of the same name.

  - New functions plusp and minusp. zerop accepts character argument.

  Bugs

  - Fixed incorrectly implemented horizontal flavor of the
    @(trailer) directive.

  - Fixed a bug in the make-like function which has consequences for
    the results of numerous sequence functions. This bug causes functions
    to return an empty list when the expected result is an empty string.
    For instance [mapcar identity ""] now returns "", consistent with
    [mapcar identity "abc"] returning "abc". Previously it returned nil.

  - Fixed a serious bug affecting the OS X port. The llvm-gcc compiler
    was discovered not to be consistently aligning wide character string
    literals on four byte boundaries, even though wchar_t is four bytes wide.
    As a workaround, a very similar trick is usd as what is used to handle
    literals on Windows, based on the assumption that we *can* depend
    on two-byte alignment. The bug leads to a failure of the OS X port
    of TXR to support the -p and -e options, for instance: txr -p '(+ 2 2)'.



                                    TXR 101
                                   2015-01-01


  Features

  - Finalization support in the garbage collector. Use the finalize
    function to associate a function with an object which is called
    when that object is found to be unreachable.

  - iff function can now be called with just one argument.

  - New function chand.

  - New macros opip and oand.

  - The min and max functions are more generic by using the less function
    instead of the < function.

  - The less and greater functions are variadic now.

  - Select accepts a function in place of the index list.

  - Arguments of where function reversed, with backward compatibility support.

  - New functions succ, ssucc, sssucc, pred, ppred, pppred for calculating
    small deltas.

  - New functions wrap and wrap* for clamping a number into a given range,
    with modular wrapping semantics.

  - New function sort-group for sorting and partitioning a sequence in
    a single operation.

  - New function in for generic membership testing over any kind of sequence
    or hash.

  - copy function extended to copy random state objects.

  - New function unique, which generalizes uniq.

  - New function aret: apply version of ret.

  - Build system improvements: debug and optimized TXR built at the same time,
    dependencies handled in a cleaner way, tidy make output.

  Bugs

  - Fixed incorrect registration of repeat function, lacking support
    for its optional argument.

  - Removed dependency on useless Flex library (libfl).

  - Overflow arithmetic fixes in some array resizing logic.

  - Incorrect argument defaulting in iff function

  - Garbage printed in type mismatch diagnostic in sub, ref,
    refset, replace, update and search_list.

  - Behavior of splitr-str was undocumented for the case of the empty
    separator string and was inconsistent.

  - The set-diff function was not handling nil elements.

  - The toint function identified itself as tofloat in error messages.

  - The toint and tofloat conversions conveniently treat a character as a
    string of length one.

  - Added missing documentation that make-random-state can take an existing
    random state and clone it.

  - Also, make-random-state was incorrectly doing additional scrambling after
    copying an existing random state.

  - Simple lazy streams now close a stream when it runs out of data.

  - Catenated streams close each stream that is popped from the list due
    to running out of data.

  - Fixed bug in replace-str and replace-vec: when the argument was an
    index list that was lazy and infinite, it was being forced, causing
    an infinite loop and exhaustion of memory.

  - The partition* function was found to be buggy.

  - Separate directory build issues fixed.



                                    TXR 100
                                   2014-10-22


  Features

  - New functions: chr-isblank and chr-isunisp

  - New generic less and greater functions, which are also used as
    default functions in sort, find-max, max-pos, and others.

  - New directives @(line) and @(chr) for binding or asserting the current line
    number or character position.

  - Lisp expressions allowed on left side of @(bind) and @(rebind) now.

  - New function lcm (lowest common multiple).

  - The gcd function now takes zero or more arguments instead of exactly two.

  - New @(include) for parse-time loading of code, useful for loading macros
    which are needed later in the same file.

  - Beginning of library external to TXR executable: macros txr-if, txr-when
    and txr-bind for more convenient access back into the pattern
    language from TXR Lisp.

  - New combinator function notf for negating a function.

  Bugs

  - Fixed December 2011 regression affecting @(freeform) directive.

  - Fixed GC-safety bug in abs-path-p function.

  - Fixed breakage in scanner and parser introduced in August.
    Caught by C++ compiler.

  - Fixed inappropriate printed rendering of list objects produced by
    interpolated TXR Lisp expressions in @(output) blocks, and in
    the quasiliterals of the pattern language. (TXR Lisp quasiliterals
    not affected.) Users who depend on the old behavior not wanting
    to fix their programs can use --compat 99.

  - Bugfix in the gcd and lognot functions: neglecting to normalize some
    bignum result to the fixnum type.

  - Bugfix in @(eof) directive: not matching the end of interactive
    streams.

  - Fixed abort due to assertion going off when GC is disabled and the array of
    new generation objects runs out of space. This could happen during
    large parses.

  - Fixed parser stack overflow and inefficiencies when handling large TXR
    programs.

  - Bugfix in match_fun causing memory accesses to automatic storage
    that has been released, as well as an invalid longjmp.

  - Hash table reorganization is prevented during hash table traversal,
    so existing items are not skipped or visited twice.



                                     TXR 99
                                   2014-10-05


  Features

  - Variables in the pattern language can be bound to regexes, in
    which case they perform regex matches when matched against
    input.

  - Representation for compiled regexes is streamlined.

  - Regex objects now print in regex notation.

  Bugs

  - Fixed August 11 regression affecting 96 through 98: broken matching of
    unbound variables followed by bound variables.

  - Fixed one more problem with andf function: (andf) not returning t. 



                                     TXR 98
                                   2014-09-26


  Features

  - New numeric constants giving pi, e and various limits of floating point
    representation.

  - New syntax-error exception type; syntax errors in expressions passed
    on the cmomand line with -p or -e throw exception how instead of silently
    producing nil.

  - New --gc-delta option and gc-set-delta function related to
    bugfix below.

  - New -C/--compat option for specifying compatibility.

  - New functions: partition and partition*.

  - Revamped documentation: nicely formatted with fonts and section numbering;
    HTML version uses proportional font now, and has internal hyperlinks.

  - Exception names like file_error have been renamed to use a dash
    like file-error.

  Bugs

  - Fixed bad memory performance when the program works with large
    heaped objects, by making GC aware of this memory.

  - Fixed broken return value semantics of orf and andf combinators.



                                     TXR 97
                                   2014-08-29


  Bugs

  - A few GC-related fixes after code review.

  - Fixed @(load), broken in TXR 94.

  - Fixed broken @{var mod} syntax Lisp quasiliterals, broken in TXR 96.



                                     TXR 96
                                   2014-08-14


  Features

  - Big change in pattern language in the variable binding logic.
    When unbound variables are followed by directives, then the full right hand
    context to the end of the line is used to determine the binding.

  - Internal functions related to tries exposed: trie-lookup-begin,
    trie-value-at, trie-lookup-feed-char.

  Bugs

  - Fixed bug in ret operator: was generating fixed arity functions
    rather than n-ary as documented.



                                     TXR 95
                                   2014-08-07


  Bugs

  - Fix major regression: bad syntax causing crashes in parser.



                                     TXR 94
                                   2014-08-05


  Features

  - New functions: giterate, partition-by, uniq.

  - reduce-left and reduce-right correctly work on strings and vectors.

  - quasiquote splices can now occur in string quasiliterals, directly
    as `xyz @,foo`,  `xyz @{,foo}`, `xyz @,(foo)` etc. Previously this
    syntax was rejected, requiring workarounds like (let ((x ,foo)) `xyz @x`).

  - POSIX functions exposed: getpid, getppid, kill, setitimer, getitimer.

  - The parser is now re-entrant. This means that macro expanders can
    safely recurse into the parser, for instance with regex-parse
    or read.

  Bugs

  - @(output) blocks were discovered not to be applying filters to the results
    of embedded TXR Lisp evaluations.

  - n-perm-k function was broken for values of k equal to 1.

  - Fixed situations when exceptions with bogus messages are issued when the
    arithmetic +, - and * functions are called with wrong type arguments.

  - Fixed grossly incorrect documentation of the repeat function, to
    reflect actual syntax and behavior.

  - Fixed situations in which some signal handlers that don't need to
    execute on a separate stack might do so.

  - Put in a guard against async signal nesting: a situation when
    an asynchronous signal handler performs some blocking operation
    which enables async signal handling triggering re-entrancy.

  - Fixed platform-dependent behaviors in random number seeding
    (make-random-state function).



                                     TXR 93
                                   2014-07-22


  Features

  - New list munging functions interpose, mapdo, and juxt.

  - New macros caseq, caseql and casequal based on Lisp's case construct.

  - New math function log2 for computing base 2 logarithm.

  - New function get-lines for obtaining list of lines from a stream.
    Actually this is not new; it is a nice synonym for lazy-stream-cons.

  - New functions put-lines and put-strings.

  - Missing function lconsp added for testing whether an object is
    a lazy cons.

  - Documented existing function hash-construct.

  - search-str now supports a negative starting position, which counts from the
    tail of the string.

  - The division function / can now be used with one argument, denoting
    the reciprocal operation.

  Bugs

  - Bindings created using -D command line option are now visible to code
    executed via -e or -p later in the command line.

  - Fixed broken @(eol) directive; was behaving as a complete match, so that
    subsequent directives are ignored.

  - Obscure bug-fixes in @(do) and @(require), involving code that invokes
    pattern funcions, and the visibily of bindings.

  - Fixed hash-construct so it correctly works on an empty vector.

  - Alternative stack (sigaltstack) is now automatically used for SIGBUS
    handlers, not only SIGSEGV.



                                     TXR 92
                                   2014-07-11


  Features

  - New operators ado and ido.

  - New command line option --license.

  - Long overdue flet and labels operators for lexical binding in the function
    space, added as macros.

  Bugs

  - apf and ipf functions fixed.

  - Uninitialized variable bug fix in select function
    and in the index list case of replace-list.



                                     TXR 91
                                   2014-07-02



  Features

  - @(load `@stdlib/ver`) brings in a definition of a new variable
    called *lib-version* which lets programs check what version of
    the library they are using.

  - New functions where and sel for working with multiple indexes
    into a sequence.

  - New function seqp for testing whether an object is a sequence of any type.

  - New functions pos-max, pos-min, find-max and find-min.

  - New character constant #\pnul denoting the U+DC00 code
    (TXR's  "pseudo null").

  - New function tuples for reorganizing a sequence into tuples.

  - New functions true and false, expressive in applicative programming:
    for instance [all true list].

  - New functions member and member-if.

  - New function multi for applying a one-sequence operation to
    parallel sequences.

  - New functions tf, nilf, retf, apf, ipf.

  - New macros ret, ip and ap.

  - New function iapply for applying improper lists.

  - New functions transpose and zip.

  - New functions tok-where and range-regex.

  - New function bit for testing bits.

  - [] indexing now allows element extraction by index list,
    as well as assignment by index list, increasing the "slicing power".

  Bugs

  - Fixed reliance on leading slash as indicator of absolute path in @(load).

  - Fixed breakage in range and range* function (regression introduced
    in TXR 89).

  - Fixed bug in dwim operator: Lisp-1 evaluation semantics being propagated
    into nested forms, contrary to documentation.

  - Line number of error correctly reported in some situations in which
    it previously wasn't.

  - Fixed macros not being expanded inside quasiliteral brace notation.

  - Fixed broken last function.

  - Fixed broken bignum bit operations, not handling negative values
    properly.

  - Fixed reversed logic of logtest function.

  - Fixed some memory leaks in MPI bignum integer operations.

  - Documentation fixes.



                                     TXR 90
                                   2014-06-11


  Features

  - TXR has been ported to FreeBSD 9 and Solaris 10. These operating
    systems are officially supported going forward.  TXR's configure
    and build system has better portability support as a result.

  - call operator is a function now, like it should be.

  - Traling backslash in a dynamic regex is rejected as an error.

  - TXR no longer automatically prints out the bindings; this must be
    requested explicitly with -B. The -a and -l options now imply -B.
    The -b option for suppresing the automatic printing of bindings
    is deprecated.

  - New --args option, allows multiple logical command line arguments to be
    encoded in one physical argument which is useful in conjunction
    with very limited hash-bang (#!) scripting mechanisms on some systems.

  - New variable "stdlib" which expands to a path in the TXR installation.
    This will allow inclusion of standard modules. The stdlib variable
    automatically tracks relocation of the TXR installation.

  - New function for searching sequences for substrings: search.

  - New functions nullify and make-like for easily adapting list processing
    functions to correctly work on vectors and strings.

  - match-str function can now match from the end of a string, at various
    negative offsets.

  - New string comparison functions: str=, str<, str>, str<= and str>=.

  - string-lt function deprecated, replaced by str<.

  Bugs

  - rplaca and rplacd now return the cell rather than assigned value,
    and the return values are now documented.

  - Fixed a widespread bug which occurs when empty strings and vectors
    are treated as lists, due to the fact that they are not equal to
    the nil object.

  - Fixed completely broken string-cmp function, and changed its name
    to cmp-str.



                                     TXR 89
                                   2014-05-11


  Bugs

  - The eql function was not handling floating-point values correctly.

  - The range and range* functions internally use numeric comparison for end
    test rather than eql, so that they can step through floating-point values,
    but use an integer boundary, or vice versa.

  - Fixed broken default argument handling in get-line, get-char and get-byte.

  - The functions ref, refset, replace, and update (and the DWIM brackets
    syntax based on them) were not handling lazy strings.

  - Fixed a bug in the pattern language: when a variable ends up bound
    to the empty string, a literal empty string object was used, and
    that was not handled in the matching language. Best illustrated
    by the test case "echo : | ./txr -c '@a:@a' -".



                                     TXR 88
                                   2014-04-04


  Features

  - New TXR Lisp macros: while, unless, until.

  - New functions empty and last.

  - copy and length functions take hash tables now.

  - Word list literals and word list quasiliterals.

  - Big improvements in efficiency of generational garbage collection.
    Situations when a backpointer to a fresh object is stored into a
    mature object now are precisely identified, eliminating GC pressure
    caused by conservatively wrong guesses.

  - TXR is now configured to build with Generational GC by default.

  Bugs

  - copy and length functions handle lazy strings now.

  - time-string-utc on Linux now renders %Z strftime code as "UTC" rather than
    "GMT". Not our issue: this is a workaround for library behavior.

  - Generational GC fix: a number of functions which mutate state weren't using
    the proper set macro.

  - Generational GC fix: the gc_mutated function was not correctly implemented
    and could cause reachable objects with their GC reachability flag to
    continue to be set after GC is done.



                                     TXR 87
                                   2014-03-22


  Features

  - New convenience functions tofloat, toint: convert string or number to
    integer or floating-point.

  - New macro: when.

  Bugs

  - int-flo function was failing on negative numbers.

  - Fixed long-standing syntax issue: directives of the pattern matching
    language being syntactically recognized in the @(output) clause and
    in string quasiliterals, interfering with the ability to invoke Lisp
    forms based on the same symbols. This issue really "hit home" with
    the recent introduction of the @(if) directive, causing
    @(if expr then else) to suddenly be inaccessible in @(output) and
    quasistrings.



                                     TXR 86
                                   2014-03-16


  Features

  - Exposed the implementation of tries to user code.

  - New functions: html-encode, html-decode.

  - New prof operator and pprof macro for simple profiling: time spent and memory
    allocated over the evaluation of an expression.

  - New functions sh and run for running system commands.

  - If available, sigaltstack is used when the program registers a handler for
    the SIGSEGV signal, allowing TXR programs to catch stack exhaustion and
    recover by throwing an exception.

  - New syntactic sugar in the pattern language: @(if)/@(elif)/@(else)/@(end),
    which works by transformation to a pattern involving @(cases) and @(require).

  - The @(empty) directive which plays a role in @(output) blocks has a new meaning
    in the pattern language for denoting an explicit empty match.

  Bugs

  - Fixed severe performance problem with regex on long strings, caused by feeding
    characters to the regex machine past the point that it is clear it will not
    accept any more.

  - Fixed broken horizontal matching under @(freeform) on long lines, due to bugs
    in the handling of the memory-saving optimization which consumes the prefix of
    the lazy string as scanning progresses.

  - Fixed breakage in sub-str over lazy strings.

  - Fixed possible crash in @(trailer) directive.

  - Fixed memory leaks on open-process: one that happened on every call, and one on
    failure of the fork function.

  - Fixed pipe-close deadlocks occurring in code that opens numerous pipes; solved
    by setting the close-on-exec flag on the pipe descriptors.

  - Fixed faulty argument defaulting logic in the functions: iffi, regex-parse,
    lisp-parse, regex-compile and Windows version of open-process.

  - Fixed regression in the random number module, causing the random function to
    ignore the seeded random state passed in as an argument, and rely on the global one.

  - Fixed a bug in a rarely used form of the backslash line continuation.

  - Fixed buggy argument quoting in Windows version of open-process.

  - The gc on/off state is now saved and restored as part of unwinding, so if
    code that turned off gc throws an exception, gc will be turned back on
    at the catch site.

  - Fixed incorrect calculation of malloc upper and lower boundaries, affecting
    the correctness of generational garbage collection.

  - In open process, if fdopen fails, kill the process more gently with SIGINT
    and SIGTERM rather than SIGKILL, and wait on it.

  - Syntax fix. @^a is not meta applied to the symbol ^a, but rather meta quasiquote a.



                                     TXR 85
                                   2014-03-07

  Bugs

  - Fixed a regression related to the *random-state* variable, 
    breaking all pseudo-random number functions.

  - Fixed broken "txr -v".



                                     TXR 84
                                   2014-03-07


  Features

  - TXR Lisp no longer uses one quote for regular quote and quasiquote syntax.
    The quasiquote character is now ^ and the apostrophe is just regular quote.
    This change breaks backward compatibility, unfortunately, but the
    single-quote experiment had to come to an end, now that TXR has a powerful
    macro facility, with quasiquotes playing a central role.

  - TXR Lisp exposes the environment manipulation functions make-env, env-vbind
    and env-fbind.

  - New function log10 for base 10 logarithms.

  - New functions open-files and open-files* for opening a big catenated stream
    which marches through multiple files as if they were one.

  - New directive, @(assert), for writing certain kind of robust matching code
    more simply.

  - put-line can be called with no arguments, in which case it just writes
    a newline to standard output.

  - In the format function, if a precision is specified as *, it can now
    have a leading 0 in front of it, which applies as usual (to the formatting
    of an integer which falls short of the number of digits required
    by the precision).

  Bugs

  - In the format function, the * character for specifying a variable
    field width or precision (derived from an integer argument) was broken.

  - Fixed a regression causing the exception "t is not a cons" on queries
    that match data, when no input files are specified.

  - Fixed a regression causing file names not to be tracked in the pattern
    matching language, and consequently error messages not to give that
    useful information.

  - Fixed some bugs related to command line processing, which had recently
    been rewritten: the element nil was being added to *args* in some situations,
    the argument - would end up repeated twice, and args was being sometimes
    manipulated in such a way that (ldiff *full-args* *args*) wouldn't work,
    due to new conses pushed onto *args* so that it's not a structural
    suffix of *full-args*.



                                     TXR 83
                                   2014-03-02


  Features
  
  - The qquote macro is now in the regular user namespace, while the 
    quasiquoting read syntax uses a different macro based on private symbols.
    So when the read syntax is used, the template can contain the symbols
    qquote, unquote and splice, even though these are the basis for
    a quasiquote macro.

  - Diagnosis of attempt to redefine a special operator as a function or macro.
    Remove the macro when a function of the same name is defined and vice-versa.

  Bugs

  - Fixed bugs in the implementation lexical variable shadowing by symbol
    macros.

  - Fixed incorrect handling of trailing atoms in quasiquote.

  - Redesigned the implementaton of special variables, and how they integrate
    with internal C global variables in the interpreter, in order to fix the
    broken dynamic overriding of the predefined globals.

  - The Lisp-1 style evaluation of the dwim operator or square brackets was not
    resolving over-ridden special variables correctly, using a lookup method
    that saw only the global bindings.

  - Fixed missing integration between catenated stream objects and the
    garbage collector.



                                     TXR 82
                                   2014-02-27


  Features

  - Intuitive behavior in various sequence processing in the library:
    don't try to output a string if the resulting items are not characters,
    and then fail; make a list.

  - All operators that were implemented as special code expanding hacks
    in the TXR Lisp code walker are have been converted to intrinsic
    macros. Only a few bona-fide special forms are subject to minor
    code transformations.

  - New generation macro called "gun". (gun (read-line stream))
    produces a lazy list of lines from a stream. gun, which stands
    for "generate until nil", evaluates the enclosed expression while that
    expression produces non-nil values, and makes a lazy list out of them.

  - New function copy, for copying sequences.

  - Documentation improvements thanks to Roman Mishin. 

  Bugs

  - Regression fix: error thrown on valid floating point constants.

  - Doc bugs: documentation was missing for the delay operator
    and the length function.


                                     TXR 81
                                   2014-02-25


  Features

  - Calls to stream opening functions can omit the mode parameter,
    which defaults to "r".

  - New functions for accessing environment variables from TXR Lisp,
    augmenting the @(next :env) method in TXR pattern language.

  - New variables *args* and *full-args* for accessing the
    partial and full command line.

  - New functions macro-form-p, macroexpand and macroexpand-1.

  - Implemented special variables (dynamic scope). All global variables
    defined with defvar and all the predefined variables are special,
    with the symbols being attributed for special binding similarly
    to Common Lisp.

  - Implemented the macrolet operator for binding local macros.
    The macroexpand and macro-form-p functions work correctly with
    the environment from a macrolet.

  - Implemented symbol macros: global symbol macros via defsymacro,
    and local macros via symacrolet. Local symbol maros are shadowed
    properly by lexical bindings, and are expanded properly in
    situations where they are used as assignment places by the
    set operator, and related operators.

  - Introduced the (. expr) syntax which is equivalent to expr.
    Handy for writing a function argument list that accepts
    only trailing parameters as (lambda (. rest) ...)
    rather than (lambda rest ...).

  - New functions prinl and pprinl, which are like print and pprint,
    but add a newline.

  - Added new Unix filesystem access functions: symlink, link, mkdir,
    readlink, mknod. Also makedev, minor and major.



  Bugs

  - Fixed broken seek-to-end-p boolean parameter in open-tail,
    a regression in TXR 71.

  - Fixed a regression in the debugger, also introduced in TXR 71,
    causing it not to print the data line being processed in a horizontal
    scanning context.

  - Fixed premature opening of data sources in the TXR pattern language.
    Opening files is now delayed until a data consuming directive
    needs to match data. The previous kludgy approach recognized only the
    @(next) directive, and only one occurrence of it.

  - Fixed incorrect square root calculation over bignums. It was
    not computing the last bit of the result and so could be off by
    one.

  - Numerous bugfixes in form expansion, in particular handling of
    variable bindings and function and macro parameter lists.

  - Global macro bindings make a symbol fboundp. Also, symbol-function
    retrieves information about a global macro.

  - Fixed several bugs in quasiquote, including the handling of 
    `(... . ,form) in quasiquote.

  - Fixed get-string-from-stream throwing an inappropriate internal error on
    type mismatch.

  - Fixed the neglect to expand Lisp forms in the argument lists
    of the directives of the pattern matching language.

  - Added the neglected s-ifsock variable, which is part of the Unix
    filesystem interface, corresponding to S_IFSOCK.

  - Fixed some instances of source code line number not propagating
    through code transformations.

  - Fixed numerous formatting issues in the documentation, and omissions.



                                     TXR 80
                                   2014-02-17


  Features

  - TXR now nicely handles null characters in text stream inputs.
    They are internally encoded to the Unicode value U+DC00,
    which will map back to a single null byte on output (that being
    existing behavior).

  - TXR now has Lisp macros: the defmacro operator is implemented,
    with destructuring lambda lists and all.

  - New operators tree-bind and tree-case for pattern binding similar
    to Common Lisp's destructuring. This piggybacks off the defmacro
    infrastructure which we now have.

  - Big improvement in debuggability: the unhandled exception error message now
    gives source code location information.

  - New functions pos, pos-if, posq, posql and posqual for finding item
    positions in sequences.

  - Predicate function is now optional in the some, all and none functions.

  - hash-uni and hash-isec functions take a join-func argument which
    lets you specify how elements from two tables are merged.

  - new hash table functions inhash and hash-update-1.

  - two hashes can now be tested for deep equality using equal.

  Bugs

  - Removed bogus optimization from hash table implementation.

  - Syntactic fix: input like 1.0a no longer parses as a floating-point number
    followed by a symbol, but is diagnosed as an error. Syntax like 123a
    continues to work as before: it denotes one symbol, not 123
    followed by a.

  - Bugfix in type check for "cobj" class objects that would crash if
    given non-heaped values like fixnum integers.

  - Corrected problems in the code walking and expansion of lambda and
    defun forms.

  - Fixed failure to propagate line number info through the abstract syntax
    of string quasiliterals.

  - Doc bugs: missing descriptions of gethash and gensym.



                                     TXR 79
                                   2014-02-11


  Features

  - New functions comb, perm, rcomp and rperm for calculating repeating and
    non-repeating combinations and permuations of sequences (lists, vectors and
    strings).  Hashes are supported by comb function.

  Bugs

  - Hardening of code for handling excessively large vectors.

  - Bugfix in quasistring handling in TXR Lisp.

  - Bugfix in if function (not the if operator).



                                     TXR 78
                                   2014-02-06


  Features

  - vec function for making a vector out of its arguments, to complement
    the existing vector function which makes a vector of a given size.

  - The dot position of function call forms can now apply strings and
    vectors. The same is true of the apply function.

  - The apply function now takes additional optional arguments before the list,
    similarly to Common Lisp's apply.

  - New function: list*.

  - Three-element forms for optional parameters are now supported;
    the variable can be specified, an initialization form used when the
    argument is omitted, and a symbol that is bound to a boolean indicating
    whether or not the argument is present. (Common Lisp style, IOTW).

  - New protocol for optional parameters: the colon symbol : can be
    passed as a value for an optional parameter, which causes that
    parameter to behave as if it were missing.

  - reduce-left and reduce-right can now use nil as the initial object,
    which is an useful and important behavior.

  - strings, vectors, lists and hashes are now generally callable like
    functions, not only in the DWIM operator or DWIM brackets notation.

  Bugs

  - Lexical scope of optional argument default init forms now properly
    restricted.

  - Fixed breakages in do operator.

  - Bugfix in logic for tracking source code file and line number info
    that would cause the info to disappear under garbage collection.

  - Fixed a erroneous exception throws in the mutation operator logic
    which would cause usage errors to turn into internal errors.



                                     TXR 77
                                   2014-01-30


  Features

  - More streamlined parser containing fewer hacks, and fewer obscure
    cases that don't work.

  - @'expr syntax now works as expected in directives for evaluating quoted
    TXR Lisp expressions.

  - In nested uses of the do and op operators in TXR Lisp there is now
    a way to refer to the outer parameters from the inner nestings, using
    compounded meta syntax like (op (op @1 @@1)), where @1 is argument 1
    of the function denoted by the inner op, and @@1 is argument 1 of the
    outer function.  Each additional @ "escapes" out one level of nesting
    of the op syntax.

  - New update and hash-update functions.

  - The interfaces of reduce-left and reduce-right functions has been
    improved, making them easier to use, while mostly retaining backward
    compatibility.

  - New functions remove-path and rename-path for removing and renaming
    filesystem objects.

  - Catenated streams, previously an internal feature, are exposed
    now via the make-catenated-stream function.

  - Scope rule change for expressions that provide default intialization
    for optional arguments. These eexpressions now have the parameters
    in scope, and so now uses like (lambda (x : (y (length x))) ...)
    are possible where y is initialized with (length x) if the argument
    is not supplied. Previously, parameter x would not have been considered 
    to be in scope of the expression (length x).

    

  Bugs

  - Fixed neglected handling of result form in dohash syntax.

  - In the object printer, the handling of syntax like @(sys:var x ...) was
    ignoring any additional ... forms, and rendering as @x.

  - Fixed possible race condition in tail streams, whereby when a file
    rotates, the stream prematurely follows the new file, neglecting
    to read the last piece of material just added to the previous file.



                                     TXR 76
                                   2014-01-23
                                   

  Features

  - New time functions: time-fields-local and time-fields-utc for obtaining
    broken-down time from Epoch seconds.

  - New group-by function for constructing a hash from a list when the
    list elements can be partitioned into equivalence classes tied to keys,
    rather than treated individually.

  - Sweeping changes in TXR List to allow vectors and strings to be manipulated
    in many situations as if they were lists. Functions like car, cdr and
    mapcar work on strings and vectors.

  - New command line options -e and -p for evaluating TXR Lisp expressions
    more conveniently from the command line.

  - The and, or and if special operators are now also provided as functions,
    so they can be indirected upon functionally.

  - New functions conses and conses*, useful for iterating over a list
    similarly to Common Lisp's maplist function.

  - New do operator (unrelated to @(do) directive) similar to op, but 
    geared toward doing imperative things involving special operators.

  Bugs

  - @(require ...) directive was not expanding its forms prior to evaluation.



                                     TXR 75
                                   2014-01-16


  Features
  
  - Two new stream functions: unget-char and unget-byte. Some streams now
    support ungetting a byte or character, which was a glaring omission
    in the API, without which some common scanning tasks are awkward.

  - TXR Lisp functions with optional parameters can now specify expressions
    to give those arguments values when the arguments are missing.

  - New operators in TXR Lisp: append-each and append-each*.

  - Change in the Lisp structure printer. The special structure generated by
    the read syntax @sym and @(...) now prints back in the same syntax,
    rather than as (sys:var sym) and (sys:expr ...).

  Bugs

  - Fix in put-byte function: before invoking the underlying operation,
    it was testing whether the put-char operation exists for the stream,
    rather than the put-byte operation. This would result in a crash if
    the stream supports put-char but not put-byte.
  
  - Mistake in calculating bitmasks for regex character class ranges,
    resulting in incorrect behavior for ranges whose upper range is
    a character code corresponding to the last bit of a word in the
    bitmask array, e.g. [A-\x7f], resulting in failures to match
    32 or more characters in the upper end of the range.

  - Missing documentation filled in for the functions throw, throwf and error.



                                     TXR 74
                                   2014-01-13


  Features

  - Maintenance: builds on Cygwin, MinGW and Mac OS X 10.7.3.

  - New math functions: n-choose-k, n-perm-k, cum-norm-dist.

  - lisp-parse function renamed read; old name is obsolescent.

  - In the TXR pattern language, the @ escape can now evaluate a non-compound
    TXR Lisp expression also. Previously compounds like @(+ 1 1) 
    were supported, but atoms like @foo were not.


  Bugs

  - Small fix in how exponent fields of printed floating point values
    are normalized. Across all platforms, there are now no leading zeros
    after the 'e'.
    


                                     TXR 73
                                   2014-01-08


  Features
  
  - The new lisp-parse function scans TXR Lisp expressions at run-time
    out of strings and streams, which means that TXR can now more easily keep
    persistent, complex data in text files.

  Bugs

  - Fixed signal-handling-related performance issue caused by excessive
    calls to the sigprocmask function.



                                     TXR 72
                                   2013-12-17


  Features

  - Syslog functionality: openlog, closelog, syslog, setlogmask.
    Plus: the *stdlog* stream for logging directly to syslog.

  - Stream properties.

  - logand and logior functions become variadic.

  - Signal handling support. TXR Lisp code can catch POSIX signals.

  - Syntax changes in the area of symbol names. Package prefixes are
    supported now, like foo:bar (symbol bar in package foo).

  Bugs

  - Nonsensical error diagnostics in intern and delete-package, in the
    case when a package doesn't exist.

  - defvar is documented now and behaves more similarly to the Common Lisp
    defvar.
  
  - seek-stream with a zero offset was reporting the current offset instead
    of seeking regardless of the value of the whence argument.

                                   

                                     TXR 71
                                   2013-12-07


  Features

  - New functions countqual, countql, countq and count-if.

  - New regex-parse function: parse regex from a string at run-time.

  - New *stdnull* stream for discarding data.

  - New function: seek-stream for positioning within a stream.

  - New function open-tail for opening a new kind of stream called a tail
    stream. This stream follows rotating log files.

  - New functions for converting a time expressed as individual fields
    into numeric time: make-time, make-time-utc.

  - New function daemon (where supported). Calls the BSD-derived daemon
    function to daemonize the process in one step.

  - New errno function for accessing C errno.

  - Real-time input support in pattern matching language, via "simple"
    lazy text stream line lists which sacrifice accuracy of representation for
    timely delivery.

  Bugs

  - Fixed missing recognition for hexadecimal integers in Vim
    syntax higlighting file txr.vim.

  - Fixed missing check for null handle in stdio back-end of flush-stream.

  - Grammar and spelling in HACKING guide.



                                     TXR 70
                                   2013-11-22


  Features

  - Fixed a nasty bug that affects all versions; I was not able to find
    a revision in git that works right with gcc 4.6.3. Invoking an @(accept) in
    the middle of a @(collect) was found not work at all as documented, and
    this was root-caused to my neglect to use volatile on some local variables.

  - Fixed a more recent regression in the op syntax, caused this October.

  - Fixed an amazing regression introduced in TXR 22, back in November 2009,
    easily reproduced using:
    
       echo ":x" | ./txr -c "@x:@x" -

  - Fixed all unintentional deviations from 1990 ISO C. GCC had
    not been diagnosing them for us due to my neglect to use
    the --pedantic flag.

  - Revamped and up-to-date txr.vim syntax file, for you Vim users.



                                     TXR 69
                                   2013-10-23


  Features

  - Multiple @(output) blocks can now continue on the same output stream, which
    is particularly useful if it is a pipe. 

  Bugs

  - Fixed errors in documentation for the functions time-string-local,
    time-string-utc and expt.



                                     TXR 68
                                   2013-10-07


  Features

  - @(repeat) inside @(output)  supports a :vars parameter, making it possible
    to declare the existence of iteration variables that are otherwise hidden
    within Lisp code.

  Bugs

  - Out-of-sequence numeric parameters can be used in the op operator now, like
    (op foo @2) where @1 is absent.

  - The implicit ". @rest" is now added to op forms only if they do not mention
    @rest or any numeric parameters, to prevent unintentional passing of extra
    parameters.

  - @rest or a numeric param like @1 can now be specified in the dot position
    of the op form, as in (op foo . @rest).



                                     TXR 67
                                   2013-07-13


  Features

  - New functions tok-str and string-cmp.
  
  - Internal lazy string functions exposed as intrinsics.

  - New pattern language directive: @(require ...).

  Bugs

  - Unrecognized backslash escapes in string literals
    and string quasiliterals are diagnosed.

  - Backslash-space escape recognized in string literals
    and string quasiliterals.



                                     TXR 66
                                   2013-05-16


  Features

  - Documentation completely filled in.

  - Added specfile for RPM builds.

  - @(repeat) introduced as shorthand for @(collect :vars nil).

  - New open-command and open-process functions. The open-pipe
    function becomes deprecated.

  - New multi-sort function for sorting two or more lists
    at the same time as if they were columns of a table.

  - assq and aconsq functions are renamed to assql and
    aconsql becuse they use eql equality, not eq.

  - New prop function for property list lookup.

  - New stat function for information about files.

  - New functions in hashing library: 
    - Copying hashes: make-similar-hash, copy-hash 
    - Set operations: hash-uni, hash-diff, hash-isec.

  - Gapingly missing hexadecimal integer constants have been
    implemented.

  - New bit operation functions that work with TXR's arbitrary precision
    integers: loand, logior, loxor, lognot, logtest, ash.

  - Test form in for loop can be omitted.

  - New package-related functions.

  - New functions for obtaining time of day and converting to text.

  Bugs

  - Fixed broken (+ <fixnum> <char>) case in addition.
    This fixes the range and range* functions too.

  - Fixed nonworking building in a separate directory.

  - Fixed broken eval function.

  - Bugfix in form expander's handling of regular expression
    syntax, causing the (set ...) notation for character
    sets being mistaken for the (set ...) assignment operator.
  
  - Bugfix in format: apply field formatting to argument
    not only if a nonzero with has been specified, but also
    if a precision has been specified.

  - Bugfix in format: ~s on a floating point number now
    always shows .0 except when a precision is given,
    and it is zero.

  - Fixed broken @(last) clause processing of @(collect),
    int he case when the last material matches at the end of a stream.

  - Fixed certain function applications not being able to
    call functions that have optional arguments with
    fewer than 



                                     TXR 65
                                   2012-04-20


  Features

  - New ways to iterate over hash tables using lazy lists.

  - Regular expression compiler expressed to user code, allowing TXR
    programs to build regex abstract syntax trees and turn them into
    regular expression machines.

  - The popular regular expression tokens \s, \d, \w and \S, \D, \W are now
    supported (the first three of these in character classes also).

  - Low level time-of-day functions added for retrieving epoch seconds,
    and optionally microseconds.

  - New remove-if and keep-if functions, plus lazy counterparts
    remove-if* and keep-if*.

  - Lazy variants remq*, remql* and remqual* added.

  - New function find-if.

  - Improved seeding of pseudo-random-number generator.

  - Configure script now diagnoses specification of nonexistent config
    variables.

  - Documentation improvements.

  - Portability to Mac OS/X 10.7 (Lion), NetBSD 5.1 and FreeBSD 9.0.

  Bugs

  - Bugfix in @(next) directive, which showed up when using @(next :args)
    more than once to scan arguments more than once.

  Quiet Changes

  - First two arguments to the find function were reversed.



                                     TXR 64
                                   2012-04-06


  Features

  - In the pattern language, binding the symbol nil as a variable
    is permitted now and has a special meaning of matching and
    discarding input.

  - Caching optimization in hash tables.

  - Ephemeral GC implemented. This is experimental and currently
    must be enabled at compile time with the --gen-gc configure
    option.

  Bugs

  - Interaction between @(trailer) and @(accept) has been clarified.
    An @(accept) return from the forms of a @(trailer) will still
    roll back the input position to the starting point for the
    @(trailer).





                                     TXR 63
                                   2012-03-30


  Features

  - Significant improvement in the performance of the garbage collector,
    which can drastically cut the run-time of some programs.
  - match-str and match-str-tree functions exposed.
  - new @(rebind) directive provides for a one step dynamic shadowing
    of a variable with a local variable, whose value can be derived from
    the one being shadowed.
  - filters now work on nested lists of strings, not just strings.
  - floating point formatting now produces the same exponential notation
    on different platforms, by post-filtering the sprintf output:
    a leading + and leading zeros are removed: e+023 becomes e23.
  - new functions: num-str, tan, asin, acos, =, 
  - min and max return the left operand rather than the right one,
    when two operands are equal.


  Bugs

  - search-str optional argument was not working when omitted.
  - Fixed situations involving an incorrect behavior: partial horizontal
    matches (not matching the full line) were succeeding.
  - It was impossible to define a pattern function called @(text)
    due to the use of the symbol text as an internal symbol, rather
    than a symbol in the private system package.
  - error checking code in funcall had an improperly terminated argument
    list, causing an exception.
  - @(output) blocks now flush their stream at the @(end), without
    which output is not correctly interleaved between output produced
    by external commands.
  - fixed some misleading exception wordings in the numeric library.
  - fixed sign semantics of floating-point mod to be like the integer mod.
  - gcd function allows zeros.
  - fixed broken exptmod: it was not normalizing bignum values that
    fall into the fixnum range into fixnum objects, resulting in 
    undersized bignums being returned.



                                     TXR 62
                                   2012-03-23


  Features

  - Floating-point support has been added. 
    - TXR programs can specify floating-point constants. 
    - Printing floting points is supported in the format function.
      - New specifiers: ~f and ~e.
    - Arithmetic on floating points, with implicit
      conversion. 
    - New / function which produces a floating-point result.
    - New functions like sin, cos, exp, and log.
    - Functions for converting between floating and integer,
      and parsing a float from a string.

  - New combinators for easier programming with higher order functions: chain,
    andf, orf, iff.

  - url_decode and url_encode functions take an optional parameter which
    determines whether + is used as the code for space, distinguishing
    URL encoding from percent encoding. Separate named filters are
    introduced: :frompercent, :topercent distinct from :fromurl and :tourl.

  Bugs

  - Buggy quicksort routine repaired. This is a recently
    added feature which allows vectors and strings to be sorted. 
    List sorting, done by merge sort, is unaffected.

  - Breakpoints can now be set by line number and file name, allowing
    breakpoints in loaded modules, not just the main module.

 
  
                                     TXR 61
                                   2012-03-15


  Features

  - URL encoding and decoding functions added, and :tourl/:fromurl
    filters implemented for output substitution.

  - split-str function works with regex objects now.

  - new regsub function for regex substitution in strings;
    matched text can be filtered through a function.

  - new *stddebug* stream used by debugger.

  - put-byte works on string output streams, and does right
    thing with mixtures of bytes (which are taken as UTF-8)
    and characters written with put-char.

  - Hash table literals implemented; hashes can now be notated
    rather than constructed.

  - Vectors can now be quasiquoted with unquote and splicing,
    and so can the new hash table literals.

  - @(block) syntax change: blocks do not extend to the end of
    the surrounding scope but introduce their own, delimited
    by @(end).

  Fixes

  - Fixed memory leak in string byte input stream.

  - Fixed wrong parsing of tokens in cases like @(collect-foo)
    where this was treated as @(collect -foo) rather than a single token.
  


                                     TXR 60
                                   2012-03-04


  Features

  - List element removing functions: remq, remql, remqual.

  - Memory use optimizations in @(freeform) horizontal scanning.

  - Improved hashing function for bignums.

  Bugs

  - Fixed incorrect processing within long lines, caused by
    earlier optimizations in 57.

  - Missing 'd' command for deleting a breakpoint implemented
    in the debugger.

  - numberp function no longer blows up on nil.

  - Fixed broken @(load) directive: was not allowing directives
    which follow it to be processed.

  - Fixed incorrectly formatted line number information in
    some exceptions.

  - Fixed missing support for optional and trailing parameters
    in defun.

  - Fixed showstopper bug in plus function.



                                     TXR 59
                                   2012-02-29


  Features

  - Implemented put-byte function on streams.

  - Regex syntax in TXR Lisp changes from /re/ to #/re/, allowing
    symbols containing slashes.

  - New -B command line option forces TXR to dump the bindings even
    if the program produced output.

  - Revised and improved txr.vim syntax highlighting file for greater
    lexical accuracy and superior flagging of errors.

  Fixes

  - Regression that broke [n..t] and [n..nil] sequence ranges.

  - Broken hex-escaped character literals.

  - Old bug from database: filter functions now see bindings in all
    contexts in which they are invoked.

  - Output clauses consisting of one empty line were being treated as empty.

  - Implemented more sane rule for deciding when output has taken place
    and suppress the printing fo bindings.



                                     TXR 58
                                   2012-02-25


  Features

  - Exception handling exposed in TXR Lisp.

  - range* function similar to range, but for generating a range with the
    endpoint excluded.

  - TXR Lisp can invoke a function in the pattern language now using
    the new match-fun function.

  - Braced variable syntax in @(output) extended to support arbitrary
    expressions in place of the variable name. The expressions are converted
    to text and then treated the same way as a variable substitution.
    Indexing is allowed, and field-formatting takes place.
    Moreover, these expressions are code-walked by @(repeat) and @(rep) to look
    for embedded variables.

  - New TXR Lisp functions ref, refset, sub and replace.

  - Indexing and range extraction in brace substitution in @(output) clauses is
    now generic over lists, vectors and strings.

  - Optional arguments introduced into TXR Lisp, in defun and lambdas,
    with a simple syntax involving a colon. Numerous intrinsic functions
    have been converted such that some previously required arguments
    are now optional.

  - Sort function that was previously for lists only is now generic over
    vectors and strings.

  - New del operator in TXR Lisp can delete elements of sequences or hashes
    which are denoted using the bracket syntax.

  - Range indexing has "floating zero" behavior now so that for
    example [seq -2 0] means the "last two elements": when the start of
    the range is negative, then a zero end is treated as length plus one.

  - TXR programs can now be split into multiple modules, using the load
    directive to load and run code.

  Bugs
  
  - range function terminates lazy list when the sequence overshoots
    the final value.

  - Variable that holds nil is treated as a list in (set [var x..y] ...)
    range assignment.

  - Vestigial (t . obj) representation in exception handling code removed.

  - TXR now does not not dump bindings if any output occured on a stream
    connected to the C stdout stream. Previously, it suppressed printing
    of bindings if @(output) was carried out on the *std-output* stream.

  - Function remhash was found to be buggy and rewritten.



                                     TXR 57
                                   2012-02-14


  Features

  - Operations under the @(freeform) directive can now scan in constant memory,
    allowing large files to be processed.  (Scanning a single regex still
    requires the data to be all in memory: an experimental patch for this
    exists.)

  - Improved printing of character position context in debugger when lines are
    long.

  - Metanums (@1, etc) can be used in a quasiliteral, which is useful for
    quasiliterals occuring inside the op notation.

  Bugs

  - lazy-flatten function did not handle atoms. This broke @(next :list expr)
    also, for the case where expr evaluates to a string atom.

  - In format, the ~s directive was found to be printing strings in the same
    way as ~a.

  - Hex and octal character constants did not work.

  - Control characters in strings and characters are printed as hex now rather
    than octal. A semicolon is added if the next character would be interpreted
    as part of the escape.

  - Hash indexing via the [] notation was still requiring the default value
    argument.



                                     TXR 56
                                   2012-02-06


  Features

  - Hex and octal escapes work in strings and quasilterals now: the
    documentation has stopped lying. 
    - Escapes can be followed by a semicolon which terminates them and is
      removed, which is useful if an escape is followed by characters
      that would otherwise be interpreted as part of the escape.

  - More color categories and more accurate syntax in Vim syntax
    highlighting file. Highlights @[...] syntax properly inside quasiquote.

  - The third argument (the default value if a key is not found) can be omitted
    when indexing hashes with the [hash key] syntax. It defaults to nil.

  - The dwim operator (and thus [] syntax) is even more Lisp-1 like. It
    now has Lisp-1 namespace semantics for evaluating arguments
    that are symbols.

  - A new operator called "op" as been added. This allows simple lambda
    functions to be written as partial evaluatios of functions, with implicit
    arguments as well as numbered/rest arguments appearing in the body.


  Bugs

  - Fixed missing type check in hash module that allows bad code
    to crash interpreter instead of getting an excepion.

  - Fixed regression in TXR 55 which broke computed field widths in output
    variables.

  - Fixed incorrect UTF-8 decoding of some code points.

  - Closed several security holes in UTF-8 decoder by recognizing all invalid
    UTF-8 sequences, and mapping invalid bytes in such a way that any byte
    sequence processed by the decoder into Unicode code points will be
    recovered exactly when encoded back into UTF-8.



                                     TXR 55
                                   2012-01-26


  Features

  - New square bracket syntax for Lisp-1 like invocation
    and array-indexing over lists, vectors, strings and hashes.

  - New a .. b pair syntactic sugar for (cons a b).
    Works with array indexing brackets to extract ranges
    (slices) from lists, vectors and strings.

  - Indexed elements and slices are assignable.

  - In the pattern language, variables in output templates (output variables)
    can be indexed and sliced.
  
  - Output variables that hold lists are now interpolated with spaces
    between, and this can be overridden with any separator string.



                                     TXR 54
                                   2012-01-21


  Features

  - Improved debugger: 
    - step into
    - step over
    - finish
    - backtrace for pattern and TXR Lisp functions.
    - dump more complete environment. 

  - Debugging support can be disabled at compile time: configure
    with --no-debug-support.

  - New lazy append function (append*).



                                     TXR 53
                                   2012-01-11


  Features

  - In variable substitutions in output and quasiliterals, the field
    width expression is now evaluated.

  - TXR Lisp:

    - New operators and functions for generating lazy lists more conveniently. 
    - lazy mapcar and mappend: return lazy list.
    - delay and force operators.
    - parallel iteration/collection over lists.
    - list-str function for splitting string into list of characters.

  Bugs

  - Fixed global buitin variables, broken in 52. Properly implemented
    intended fix.



                                     TXR 52
                                   2012-01-07


  Features

  - @(rep) and @(repeat) now take an keyword argument, :counter.
    This specifies the name of a variable which holds the repetition
    count, thus making the count available within the repeated body.

  - New @(mod) and @(modlast) clauses in repeat/rep, allowing special
    behaviors to be coded based on whether the repetition count is
    a particular value modulo some number.

  - @(gather) directive now supports an @(until)/@(last) clause,
    so the search range can be restricted.

  - New directive @(fuzz) for doing an imprecise match over a range
    of lines, similar to the context line fuzz logic in the patch utility.

  - gensym function added to TXR Lisp, along with a *gensym-counter*
    global variable.

  Bugs

  - Fixed a regression in repeat/rep triggered when multiple clauses of the
    same type appear (like two occurences of @(last)).

  - Built-in global variables in TXR Lisp now properly denote the
    underlying C variable locations, rather than holding copies of the values
    of those variables.  If you assign to *stdout*, it will now really replace
    the stdout stream stored in the corresponding C variable (std_output), so
    it has the proper global effect. Previously, this action would just
    replace *stdout* with a new value, without any effect on std_output.



                                     TXR 51
                                   2011-12-28


  Features
  
  - Better algorithm in the random function for generating evenly-distributed
    pseudo-random numbers of arbitrary precision.

  - PRNG startup behavior improved.

  - New lazy-flatten function for flattening lists lazily. Used within
    @(next :list ...) implementation, making it possible to scan through
    Lisp-generated lazy lists.

  Bugs

  - Fixed showstopper bug introduced in a patch for the MPI library,
    affecting 32 bit platforms.

  - Fixed bug in Lisp expression interpolation in quasiliterals.

  - Fixed fatal exception being thrown in verbose mode, by one of
    the formatted print statements.



                                     TXR 50
                                   2011-12-23


  Features
  
  - Dropped silly leading 0 from version number. :)

  - New vector functions: copy-vec, sub-vec, cat-vec.

  - New API for pseudo-random-number generation, complete with
    independent random state objects that can be seeded and copied.

  - Vim syntax highlighting definition improvements.

  - In the format function, left-adjustment is specified using <
    rathr than the - character. (However a negative width specified
    as an argument using * still means left adjust.)  The leading
    zero for zero padding as well as the sign character (space or +)
    are specified in the precision field, not the width field.

  - More complete documentation.

  - Slight return value convention change in some and all functions.

  - Added memql function.

  Bugs

  - Critical flaw in hashing fixed that could crash on some platforms.

  - Exception handling fix: if a catch clause performs a
    non-local exit, the finally clause is still executed.

  - "make distclean" fixed.

  - Fix for differences in syntax error diagnosis between Byacc and Bison.

  - Fixed a memory leak in a division-by-zero case in the bignum mod
    function.

  - Fixed a terrible bug in one of the MPI patches affecting the correctness
    of various operations on numbers having a 1 in the most significant
    bit position of the most significant digit word.

  - Fixes in format function. All objects obey field width and left/right
    alignment. Numeric precision, zero padding and optional sign all works.

  - Lisp code evaluated in @(repeat)/@(rep) clauses can now see all variables,
    not just the ones subject to the repeat. (But whether or not a repeat
    executes, or which clauses, is still independent of what variables
    are accessed by the embedded Lisp, taking into account only the variables
    directly embedded in the clause.)



                                    TXR 049
                                   2011-12-19


  Features

  - New functions for converting between characters and integers.

  - Some arithmetic and relational operations are generic over characters in a
    way that makes sense.

  - dohash establishes anonymous block.

  - Improvements in Vim syntax highlighting file.

  - Lazy cons semantics cleaned up making lazy list programming easier.

  - Some API renaming and restructuring in the area of vectors.

  - Semicolon comments supported in Lisp code and @; comments in the pattern
    matching language. @# becoming obsolescent.

  - Not function, synonym for null.
  
  - Some progress in TXR Lisp documentation.

  - Hashing functions improved for fixnums, literals and characters.

  - API for introspecting over interpreted functions added, in anticipation
    of doing some compiler work.

  - Quasiliteral strings supported in TXR Lisp.

  Bugs

  - Broken abs function fixed for bignums.

  - mappend semantics clarified and fixed: behaves like append for
    improper lists and atoms.
 
  - Bugfix in code walker for let/let* forms, which resulted in quasiquotes
    not being expanded.

  - Fixed incorrect format arguments in some error messages, resulting
    in aborts in some error cases, instead of the intended diagnostics.



                                    TXR 048
                                   2011-12-13


  Features

  - New functions: expt, exptmod, sqrt, numberp, evenp, oddp, abs, gcd
    reduce-left, reduce-right.

  - Replaced horribly slow square root in MPI with a less horribly slow one.

  Bugs

  - Fixed numerous instances, in the MPI library, of coding broken
    for mpi_digit wider than 16 bits, leading to incorrect results and
    crashes.

  - Fixed mpi_int for 32 bit platforms so that obj_t stays 4 pointers wide.
    (The sign becomes a 1 bit wide bitfield).



                                    TXR 047
                                   2011-12-12


  Features

  - Transparent bignum arithmetic: when operations on machine word (fixnum)
    integers overflow, multi-precision (bignum) integers are produced.

  - TXR Lisp:

    - New operators: progn, flip.
    - Vector functions added, and vecref is an assignment place.
    - Character manipulation functions.
    - Association list functions.
    - Implicit anonymous block around forms for loop.
    - Implicit named block around forms for loop.
    - Nump renamed to fixnump.
    - Push arguments reversed: (push obj list).

  - Syntax highlighting definition update for all new operators.

  Bugs
  
  - Another bugfix to character literals, allowing non-alphanumeric
    constants like #\$.

  - Fix in rplacd to make lazy list programming feasible.

  - Reversed assoc and assq arguments throughout codebase.

  - Debugger: repeating last command by pressing Enter works again.



                                    TXR 046
                                   2011-12-06


  Features
  
  - Vector-related functions exposed in Lisp interpreter.

  - Syntax added for specifying vector literals in code.

  - Length function made generic over strings, lists and vectors.

  Bugs

  - Broken get_line function over string input streams fixed.

  - Some kinds of character literals were not being recognized properly.

  - bugfixes in configure script, affecting 64 bit Mac OS X. Thanks
    to Andy Wildenberg for reporting issue and confirming root cause.



                                    TXR 045
                                   2011-12-05


  Features
  
  - New functions exposed in Lisp interpreter: strings, characters,
    symbols and lazy lists.

  Bugs

  - Flaws in some string-splitting functions identified and fixed.

  - Bugs in quasiquote.

  - Handling of singleton clauses in cond operator.



                                    TXR 044
                                   2011-12-01


  Features

  - Lisp interpreter added.

  - Relaxed rules for what constitutes symbol names.


  Bugs

  - Regression in source location tracking (line numbers
    shown in debugger and trace output).

  - Regression in vertical skip directive caused it to ignore
    its arguments.

  - Fixed :vars () in collect/coll not working as intended.
    This should prevent any bindings from being collected, and
    allows iteration with collect without accumulating memory.

  - Two-year-old bug in weak hash tables.




                                    TXR 043
                                   2011-11-23


  Bugs

  - Buggy @(eol) directive fixed.

  - Semantics change for text and regular expressions in "negative match":
    - a variable is considered to be followed by a run of text which
      consists of any mixture of regexes and literal text
    - thus @foo bar behaves properly once again; it is not treated
      as foo followed by the regex / +/, ignoring the text bar.

  - Infinite looping bug in negative match with longest-match semantics.

  - Bug in the overflow detection in the lib.c plus and minus function.




                                    TXR 042
                                   2011-11-20


  Features

  - Access to environment via @(next :env)
  - New @(gather) directive for matching out-of-order material.

  - Horizontal functions:
    - TXR can now parse grammars.
    - Variable syntax allows capture of text spanned by function calls:
      e.g. @{var (func x y)}: text spanned by (func x y) goes into var.

  - Horizontal modes for numerous directives such as @(bind), @(local), ...

  - Lisp-style bindings output.

  - Interactive breakpoint/step debugger added.
    This is an experimental prototype, but already quite useful.

  - Directives following a variable match have searching semantics now,
    as do function calls. @a@(foo) will scan for a match for @(foo),
    and the text skipped over is captured by a.

  - New :resolve keyword in @(some) directive allowing conflicting
    variable bindings to be set in separate clauses and resolved.

  - deffilter is more powerful: arguments are evaluated so filters can
    be computed by the query.

  Bugs

  - Horizontal @(some) directive hooked in.

  - @(freeform) with no data fails to match instead of throwing strange error.

  - Setting non-local variables from a function works now.

  - Stability fix: several long-time uninitialized variable bugs found,
    and some faulty object initialization orders.

  - :vars in @(collect)/@(coll) does not fire an exception about missing
    required variables if no variable bindings are produced at all,
    allowing strict collects to have explicit matches for unwanted material
    without triggering this nuisance error.

  - @(repeat)/@(rep) allow empty body.

  Internal

  - New infrastructure for matching location info to source forms.
    Location info (currently just the line number) is associated with
    source forms via a weak hash table.

  - Character literals are now Lispy (hash-backslash syntax), based on Scheme.

  - Added quote, unquote and splicing syntax similar to Lisp. Not used
    for anything yet.

  - Improved Valgrind integration: more accurate, timely detection of
    uninitialized fields in heap objects.

  Misc.

  - A TXR syntax highlighting file for the Vim editor exists
    now. See the txr.vim file.




                                    TXR 041
                                   2011-10-30


  Features

  - New :append keyword in @(output) to append instead of overwriting.

  - Variable contents can be treated as input sources using :string
    and :list keywords in @(next). Variables can be treated as output
    destinations using :into keyword in @(output).

  - New @(set) directive for destructive assignment to a variable.

  - New filters: :upcase and :downcase.

  - @(bind) can now compare left and right objects through filters.

  - Filters can now be chained into compound filters.

  - Pattern matching functions can be used as filters.

  - Shorthand notation in @(deffilter) when multiple strings map to the
    same replacement string.

  - @(cat) directive changes syntax.

  - Error handling improvements in parser: no more reams and reams of
    errors.


  Bugs

  - Runaway recursion in @(block) directive, introduced in 040.

  - Fixed bug in matching list variable against text, at the same
    time clarifying semantics to longest-match.

  - Fixed potential excessive memory use caused by refactoring in 040.