compiler/libec: Fixes to some parsing memory leaks
authorJerome St-Louis <jerome@ecere.com>
Mon, 13 Feb 2012 14:37:00 +0000 (21:37 +0700)
committerJerome St-Louis <jerome@ecere.com>
Mon, 13 Feb 2012 14:37:00 +0000 (21:37 +0700)
compiler/libec/precompiled/grammar.c
compiler/libec/src/ast.ec
compiler/libec/src/grammar.ec
compiler/libec/src/grammar.y
compiler/libec/src/pass15.ec

index a9b5c00..7a01c59 100644 (file)
@@ -1038,7 +1038,7 @@ static const short int yyrhs[] =
 
 static const unsigned short int yyrline[] = 
 {
-(unsigned short)0, (unsigned short)254, (unsigned short)254, (unsigned short)282, (unsigned short)340, (unsigned short)341, (unsigned short)441, (unsigned short)445, (unsigned short)448, (unsigned short)449, (unsigned short)450, (unsigned short)499, (unsigned short)501, (unsigned short)506, (unsigned short)511, (unsigned short)516, (unsigned short)518, (unsigned short)523, (unsigned short)525, (unsigned short)530, (unsigned short)532, (unsigned short)537, (unsigned short)539, (unsigned short)541, (unsigned short)543, (unsigned short)545, (unsigned short)549, (unsigned short)554, (unsigned short)556, (unsigned short)558, (unsigned short)560, (unsigned short)562, (unsigned short)568, (unsigned short)570, (unsigned short)575, (unsigned short)580, (unsigned short)585, (unsigned short)587, (unsigned short)589, (unsigned short)594, (unsigned short)595, (unsigned short)599, (unsigned short)600, (unsigned short)611, (unsigned short)615, (unsigned short)616, (unsigned short)618, (unsigned short)623, (unsigned short)624, (unsigned short)626, (unsigned short)629, (unsigned short)640, (unsigned short)650, (unsigned short)669, (unsigned short)671, (unsigned short)676, (unsigned short)677, (unsigned short)678, (unsigned short)679, (unsigned short)680, (unsigned short)681, (unsigned short)682, (unsigned short)683, (unsigned short)684, (unsigned short)688, (unsigned short)689, (unsigned short)690, (unsigned short)691, (unsigned short)695, (unsigned short)696, (unsigned short)697, (unsigned short)698, (unsigned short)699, (unsigned short)700, (unsigned short)701, (unsigned short)705, (unsigned short)707, (unsigned short)712, (unsigned short)714, (unsigned short)716, (unsigned short)718, (unsigned short)720, (unsigned short)750, (unsigned short)752, (unsigned short)757, (unsigned short)759, (unsigned short)761, (unsigned short)763, (unsigned short)765, (unsigned short)794, (unsigned short)796, (unsigned short)798, (unsigned short)803, (unsigned short)805, (unsigned short)810, (unsigned short)812, (unsigned short)816, (unsigned short)818, (unsigned short)820, (unsigned short)822, (unsigned short)827, (unsigned short)830, (unsigned short)833, (unsigned short)836, (unsigned short)901, (unsigned short)903, (unsigned short)908, (unsigned short)910, (unsigned short)912, (unsigned short)914, (unsigned short)916, (unsigned short)947, (unsigned short)951, (unsigned short)952, (unsigned short)953, (unsigned short)957, (unsigned short)958, (unsigned short)959, (unsigned short)963, (unsigned short)964, (unsigned short)965, (unsigned short)966, (unsigned short)970, (unsigned short)973, (unsigned short)976, (unsigned short)979, (unsigned short)982, (unsigned short)987, (unsigned short)988, (unsigned short)990, (unsigned short)992, (unsigned short)994, (unsigned short)996, (unsigned short)1001, (unsigned short)1005, (unsigned short)1008, (unsigned short)1011, (unsigned short)1014, (unsigned short)1017, (unsigned short)1022, (unsigned short)1023, (unsigned short)1025, (unsigned short)1030, (unsigned short)1034, (unsigned short)1036, (unsigned short)1041, (unsigned short)1043, (unsigned short)1048, (unsigned short)1050, (unsigned short)1055, (unsigned short)1060, (unsigned short)1062, (unsigned short)1067, (unsigned short)1069, (unsigned short)1071, (unsigned short)1073, (unsigned short)1078, (unsigned short)1080, (unsigned short)1082, (unsigned short)1084, (unsigned short)1089, (unsigned short)1090, (unsigned short)1091, (unsigned short)1092, (unsigned short)1093, (unsigned short)1094, (unsigned short)1096, (unsigned short)1097, (unsigned short)1098, (unsigned short)1099, (unsigned short)1100, (unsigned short)1101, (unsigned short)1103, (unsigned short)1104, (unsigned short)1105, (unsigned short)1106, (unsigned short)1107, (unsigned short)1108, (unsigned short)1109, (unsigned short)1110, (unsigned short)1111, (unsigned short)1112, (unsigned short)1113, (unsigned short)1115, (unsigned short)1116, (unsigned short)1118, (unsigned short)1122, (unsigned short)1123, (unsigned short)1124, (unsigned short)1125, (unsigned short)1126, (unsigned short)1128, (unsigned short)1129, (unsigned short)1130, (unsigned short)1131, (unsigned short)1132, (unsigned short)1134, (unsigned short)1138, (unsigned short)1139, (unsigned short)1140, (unsigned short)1144, (unsigned short)1145, (unsigned short)1146, (unsigned short)1147, (unsigned short)1148, (unsigned short)1152, (unsigned short)1153, (unsigned short)1154, (unsigned short)1158, (unsigned short)1162, (unsigned short)1163, (unsigned short)1164, (unsigned short)1165, (unsigned short)1166, (unsigned short)1167, (unsigned short)1168, (unsigned short)1169, (unsigned short)1173, (unsigned short)1177, (unsigned short)1178, (unsigned short)1182, (unsigned short)1186, (unsigned short)1187, (unsigned short)1191, (unsigned short)1192, (unsigned short)1193, (unsigned short)1197, (unsigned short)1198, (unsigned short)1202, (unsigned short)1203, (unsigned short)1204, (unsigned short)1205, (unsigned short)1206, (unsigned short)1207, (unsigned short)1208, (unsigned short)1220, (unsigned short)1232, (unsigned short)1247, (unsigned short)1248, (unsigned short)1252, (unsigned short)1258, (unsigned short)1259, (unsigned short)1267, (unsigned short)1268, (unsigned short)1270, (unsigned short)1271, (unsigned short)1280, (unsigned short)1281, (unsigned short)1285, (unsigned short)1291, (unsigned short)1298, (unsigned short)1304, (unsigned short)1311, (unsigned short)1317, (unsigned short)1326, (unsigned short)1333, (unsigned short)1339, (unsigned short)1345, (unsigned short)1351, (unsigned short)1357, (unsigned short)1363, (unsigned short)1374, (unsigned short)1379, (unsigned short)1380, (unsigned short)1385, (unsigned short)1386, (unsigned short)1387, (unsigned short)1388, (unsigned short)1389, (unsigned short)1390, (unsigned short)1391, (unsigned short)1392, (unsigned short)1393, (unsigned short)1394, (unsigned short)1395, (unsigned short)1396, (unsigned short)1397, (unsigned short)1398, (unsigned short)1399, (unsigned short)1400, (unsigned short)1401, (unsigned short)1402, (unsigned short)1403, (unsigned short)1404, (unsigned short)1405, (unsigned short)1406, (unsigned short)1407, (unsigned short)1408, (unsigned short)1409, (unsigned short)1410, (unsigned short)1411, (unsigned short)1412, (unsigned short)1413, (unsigned short)1414, (unsigned short)1415, (unsigned short)1417, (unsigned short)1418, (unsigned short)1419, (unsigned short)1420, (unsigned short)1421, (unsigned short)1423, (unsigned short)1427, (unsigned short)1431, (unsigned short)1435, (unsigned short)1436, (unsigned short)1440, (unsigned short)1442, (unsigned short)1443, (unsigned short)1444, (unsigned short)1445, (unsigned short)1446, (unsigned short)1447, (unsigned short)1448, (unsigned short)1449, (unsigned short)1450, (unsigned short)1452, (unsigned short)1453, (unsigned short)1454, (unsigned short)1455, (unsigned short)1456, (unsigned short)1457, (unsigned short)1458, (unsigned short)1459, (unsigned short)1463, (unsigned short)1465, (unsigned short)1466, (unsigned short)1467, (unsigned short)1468, (unsigned short)1469, (unsigned short)1470, (unsigned short)1471, (unsigned short)1472, (unsigned short)1473, (unsigned short)1475, (unsigned short)1476, (unsigned short)1477, (unsigned short)1478, (unsigned short)1479, (unsigned short)1480, (unsigned short)1481, (unsigned short)1482, (unsigned short)1486, (unsigned short)1487, (unsigned short)1488, (unsigned short)1489, (unsigned short)1493, (unsigned short)1494, (unsigned short)1495, (unsigned short)1496, (unsigned short)1497, (unsigned short)1501, (unsigned short)1502, (unsigned short)1503, (unsigned short)1504, (unsigned short)1505, (unsigned short)1506, (unsigned short)1507, (unsigned short)1508, (unsigned short)1509, (unsigned short)1513, (unsigned short)1514, (unsigned short)1518, (unsigned short)1519, (unsigned short)1523, (unsigned short)1524, (unsigned short)1525, (unsigned short)1526, (unsigned short)1527, (unsigned short)1528, (unsigned short)1529, (unsigned short)1530, (unsigned short)1534, (unsigned short)1535, (unsigned short)1539, (unsigned short)1540, (unsigned short)1541, (unsigned short)1542, (unsigned short)1543, (unsigned short)1544, (unsigned short)1545, (unsigned short)1549, (unsigned short)1550, (unsigned short)1551, (unsigned short)1552, (unsigned short)1553, (unsigned short)1557, (unsigned short)1558, (unsigned short)1559, (unsigned short)1560, (unsigned short)1561, (unsigned short)1565, (unsigned short)1573, (unsigned short)1574, (unsigned short)1575, (unsigned short)1576, (unsigned short)1577, (unsigned short)1578, (unsigned short)1579, (unsigned short)1580, (unsigned short)1581, (unsigned short)1585, (unsigned short)1586, (unsigned short)1587, (unsigned short)1588, (unsigned short)1589, (unsigned short)1591, (unsigned short)1592, (unsigned short)1593, (unsigned short)1594, (unsigned short)1598, (unsigned short)1599, (unsigned short)1600, (unsigned short)1602, (unsigned short)1603, (unsigned short)1607, (unsigned short)1608, (unsigned short)1609, (unsigned short)1611, (unsigned short)1612, (unsigned short)1616, (unsigned short)1617, (unsigned short)1618, (unsigned short)1620, (unsigned short)1621, (unsigned short)1625, (unsigned short)1626, (unsigned short)1627, (unsigned short)1631, (unsigned short)1632, (unsigned short)1633, (unsigned short)1637, (unsigned short)1638, (unsigned short)1639, (unsigned short)1640, (unsigned short)1641, (unsigned short)1643, (unsigned short)1644, (unsigned short)1645, (unsigned short)1646, (unsigned short)1648, (unsigned short)1649, (unsigned short)1650, (unsigned short)1651, (unsigned short)1653, (unsigned short)1654, (unsigned short)1655, (unsigned short)1656, (unsigned short)1660, (unsigned short)1661, (unsigned short)1662, (unsigned short)1663, (unsigned short)1664, (unsigned short)1666, (unsigned short)1667, (unsigned short)1668, (unsigned short)1669, (unsigned short)1673, (unsigned short)1674, (unsigned short)1675, (unsigned short)1676, (unsigned short)1677, (unsigned short)1678, (unsigned short)1679, (unsigned short)1680, (unsigned short)1681, (unsigned short)1682, (unsigned short)1683, (unsigned short)1687, (unsigned short)1688, (unsigned short)1689, (unsigned short)1690, (unsigned short)1694, (unsigned short)1695, (unsigned short)1696, (unsigned short)1700, (unsigned short)1701, (unsigned short)1702, (unsigned short)1703, (unsigned short)1705, (unsigned short)1706, (unsigned short)1708, (unsigned short)1709, (unsigned short)1710, (unsigned short)1711, (unsigned short)1712, (unsigned short)1714, (unsigned short)1715, (unsigned short)1716, (unsigned short)1717, (unsigned short)1721, (unsigned short)1722, (unsigned short)1723, (unsigned short)1725, (unsigned short)1726, (unsigned short)1728, (unsigned short)1729, (unsigned short)1730, (unsigned short)1731, (unsigned short)1732, (unsigned short)1734, (unsigned short)1735, (unsigned short)1736, (unsigned short)1737, (unsigned short)1741, (unsigned short)1742, (unsigned short)1743, (unsigned short)1744, (unsigned short)1745, (unsigned short)1746, (unsigned short)1747, (unsigned short)1748, (unsigned short)1749, (unsigned short)1753, (unsigned short)1754, (unsigned short)1758, (unsigned short)1759, (unsigned short)1764, (unsigned short)1765, (unsigned short)1769, (unsigned short)1770, (unsigned short)1771, (unsigned short)1772, (unsigned short)1773, (unsigned short)1774, (unsigned short)1775, (unsigned short)1779, (unsigned short)1780, (unsigned short)1781, (unsigned short)1782, (unsigned short)1783, (unsigned short)1784, (unsigned short)1785, (unsigned short)1786, (unsigned short)1787, (unsigned short)1791, (unsigned short)1792, (unsigned short)1793, (unsigned short)1794, (unsigned short)1795, (unsigned short)1799, (unsigned short)1800, (unsigned short)1850, (unsigned short)1851, (unsigned short)1852, (unsigned short)1853, (unsigned short)1854, (unsigned short)1855, (unsigned short)1856, (unsigned short)1860, (unsigned short)1861, (unsigned short)1862, (unsigned short)1863, (unsigned short)1864, (unsigned short)1866, (unsigned short)1867, (unsigned short)1868, (unsigned short)1869, (unsigned short)1871, (unsigned short)1872, (unsigned short)1873, (unsigned short)1874, (unsigned short)1878, (unsigned short)1879, (unsigned short)1880, (unsigned short)1882, (unsigned short)1883, (unsigned short)1887, (unsigned short)1888, (unsigned short)1889, (unsigned short)1891, (unsigned short)1892, (unsigned short)1896, (unsigned short)1897, (unsigned short)1898, (unsigned short)1900, (unsigned short)1901, (unsigned short)1905, (unsigned short)1906, (unsigned short)1907, (unsigned short)1911, (unsigned short)1912, (unsigned short)1913, (unsigned short)1917, (unsigned short)1918, (unsigned short)1919, (unsigned short)1920, (unsigned short)1921, (unsigned short)1922, (unsigned short)1923, (unsigned short)1924, (unsigned short)1925, (unsigned short)1927, (unsigned short)1928, (unsigned short)1929, (unsigned short)1930, (unsigned short)1931, (unsigned short)1932, (unsigned short)1933, (unsigned short)1934, (unsigned short)1936, (unsigned short)1937, (unsigned short)1938, (unsigned short)1939, (unsigned short)1941, (unsigned short)1942, (unsigned short)1943, (unsigned short)1944, (unsigned short)1946, (unsigned short)1953, (unsigned short)1957, (unsigned short)1961, (unsigned short)1968, (unsigned short)1969, (unsigned short)1970, (unsigned short)1971, (unsigned short)1972, (unsigned short)1974, (unsigned short)1975, (unsigned short)1979, (unsigned short)1980, (unsigned short)1981, (unsigned short)1982, (unsigned short)1983, (unsigned short)1984, (unsigned short)1985, (unsigned short)1986, (unsigned short)1987, (unsigned short)1988, (unsigned short)1992, (unsigned short)1993, (unsigned short)1994, (unsigned short)1995, (unsigned short)1999, (unsigned short)2001, (unsigned short)2005, (unsigned short)2006, (unsigned short)2007, (unsigned short)2008, (unsigned short)2009, (unsigned short)2013, (unsigned short)2014, (unsigned short)2015, (unsigned short)2016, (unsigned short)2017, (unsigned short)2021, (unsigned short)2022, (unsigned short)2023, (unsigned short)2027, (unsigned short)2028, (unsigned short)2029, (unsigned short)2033, (unsigned short)2037, (unsigned short)2038, (unsigned short)2042, (unsigned short)2043, (unsigned short)2044, (unsigned short)2048, (unsigned short)2049, (unsigned short)2051, (unsigned short)2052, (unsigned short)2053, (unsigned short)2054, (unsigned short)2055, (unsigned short)2057, (unsigned short)2058, (unsigned short)2059, (unsigned short)2060, (unsigned short)2061, (unsigned short)2065, (unsigned short)2066, (unsigned short)2070, (unsigned short)2071, (unsigned short)2072, (unsigned short)2076, (unsigned short)2077, (unsigned short)2078, (unsigned short)2079, (unsigned short)2080, (unsigned short)2081, (unsigned short)2082, (unsigned short)2083, (unsigned short)2084, (unsigned short)2086, (unsigned short)2087, (unsigned short)2089, (unsigned short)2090, (unsigned short)2091, (unsigned short)2092, (unsigned short)2093, (unsigned short)2097, (unsigned short)2098, (unsigned short)2102, (unsigned short)2103, (unsigned short)2107, (unsigned short)2108, (unsigned short)2112, (unsigned short)2113, (unsigned short)2114, (unsigned short)2119, (unsigned short)2120, (unsigned short)2124, (unsigned short)2125, (unsigned short)2126, (unsigned short)2127, (unsigned short)2128, (unsigned short)2129, (unsigned short)2130, (unsigned short)2131, (unsigned short)2132, (unsigned short)2133, (unsigned short)2134, (unsigned short)2135, (unsigned short)2136, (unsigned short)2137, (unsigned short)2138, (unsigned short)2139, (unsigned short)2140, (unsigned short)2141, (unsigned short)2142, (unsigned short)2143, (unsigned short)2144, (unsigned short)2145, (unsigned short)2149, (unsigned short)2150, (unsigned short)2151, (unsigned short)2152, (unsigned short)2153, (unsigned short)2154, (unsigned short)2155, (unsigned short)2156, (unsigned short)2157, (unsigned short)2158, (unsigned short)2159, (unsigned short)2160, (unsigned short)2161, (unsigned short)2162, (unsigned short)2163, (unsigned short)2164, (unsigned short)2165, (unsigned short)2166, (unsigned short)2167, (unsigned short)2168, (unsigned short)2174, (unsigned short)2176, (unsigned short)2178, (unsigned short)2180, (unsigned short)2182, (unsigned short)2184, (unsigned short)2186, (unsigned short)2188, (unsigned short)2190, (unsigned short)2192, (unsigned short)2197, (unsigned short)2198, (unsigned short)2202, (unsigned short)2208, (unsigned short)2217, (unsigned short)2218, (unsigned short)2219, (unsigned short)2223, (unsigned short)2224, (unsigned short)2225, (unsigned short)2227, (unsigned short)2228, (unsigned short)2229, (unsigned short)2233, (unsigned short)2237, (unsigned short)2245, (unsigned short)2254, (unsigned short)2263, (unsigned short)2264, (unsigned short)2266, (unsigned short)2267, (unsigned short)2271, (unsigned short)2278, (unsigned short)2285, (unsigned short)2288, (unsigned short)2301, (unsigned short)2315, (unsigned short)2318, (unsigned short)2320, (unsigned short)2322, (unsigned short)2327, (unsigned short)2328, (unsigned short)2332, (unsigned short)2333, (unsigned short)2334, (unsigned short)2335, (unsigned short)2336, (unsigned short)2337, (unsigned short)2338, (unsigned short)2339, (unsigned short)2343, (unsigned short)2344, (unsigned short)2345, (unsigned short)2346, (unsigned short)2347, (unsigned short)2348, (unsigned short)2349, (unsigned short)2350, (unsigned short)2351, (unsigned short)2352, (unsigned short)2356, (unsigned short)2357, (unsigned short)2358, (unsigned short)2359, (unsigned short)2360, (unsigned short)2361, (unsigned short)2362, (unsigned short)2363, (unsigned short)2364, (unsigned short)2365, (unsigned short)2369, (unsigned short)2370, (unsigned short)2371, (unsigned short)2372, (unsigned short)2373, (unsigned short)2374, (unsigned short)2375, (unsigned short)2376, (unsigned short)2377, (unsigned short)2378, (unsigned short)2379, (unsigned short)2380, (unsigned short)2384, (unsigned short)2385, (unsigned short)2386, (unsigned short)2387, (unsigned short)2388, (unsigned short)2389, (unsigned short)2390, (unsigned short)2391, (unsigned short)2392, (unsigned short)2393, (unsigned short)2397, (unsigned short)2398, (unsigned short)2402, (unsigned short)2403, (unsigned short)2404, (unsigned short)2405, (unsigned short)2406, (unsigned short)2407, (unsigned short)2408, (unsigned short)2409, (unsigned short)2410, (unsigned short)2412, (unsigned short)2414, (unsigned short)2432, (unsigned short)2449, (unsigned short)2450, (unsigned short)2454, (unsigned short)2455, (unsigned short)2456, (unsigned short)2457, (unsigned short)2458, (unsigned short)2459, (unsigned short)2460, (unsigned short)2461, (unsigned short)2462, (unsigned short)2480, (unsigned short)2497, (unsigned short)2498, (unsigned short)2499, (unsigned short)2500, (unsigned short)2501, (unsigned short)2502, (unsigned short)2503, (unsigned short)2504, (unsigned short)2505, (unsigned short)2506, (unsigned short)2507, (unsigned short)2508, (unsigned short)2509, (unsigned short)2527, (unsigned short)2544, (unsigned short)2545, (unsigned short)2546, (unsigned short)2547, (unsigned short)2548, (unsigned short)2549, (unsigned short)2550, (unsigned short)2551, (unsigned short)2552, (unsigned short)2553, (unsigned short)2554, (unsigned short)2555, (unsigned short)2556, (unsigned short)2574, (unsigned short)2591, (unsigned short)2592, (unsigned short)2596, (unsigned short)2597, (unsigned short)2598, (unsigned short)2599, (unsigned short)2600, (unsigned short)2604, (unsigned short)2605, (unsigned short)2606, (unsigned short)2607, (unsigned short)2608, (unsigned short)2609, (unsigned short)2613, (unsigned short)2617, (unsigned short)2618, (unsigned short)2619, (unsigned short)2620, (unsigned short)2621, (unsigned short)2626, (unsigned short)2635, (unsigned short)2644, (unsigned short)2653, (unsigned short)2666, (unsigned short)2667, (unsigned short)2668, (unsigned short)2670, (unsigned short)2715, (unsigned short)2716, (unsigned short)2717, (unsigned short)2729, (unsigned short)2734, (unsigned short)2736, (unsigned short)2738, (unsigned short)2740, (unsigned short)2742, (unsigned short)2744, (unsigned short)2746, (unsigned short)2748, (unsigned short)2750, (unsigned short)2752, (unsigned short)2754, (unsigned short)2756, (unsigned short)2758, (unsigned short)2760, (unsigned short)2762, (unsigned short)2767, (unsigned short)2769, (unsigned short)2771, (unsigned short)2773, (unsigned short)2775, (unsigned short)2777, (unsigned short)2779, (unsigned short)2784, (unsigned short)2785, (unsigned short)2786, (unsigned short)2787, (unsigned short)2791, (unsigned short)2792, (unsigned short)2793, (unsigned short)2794, (unsigned short)2795, (unsigned short)2796, (unsigned short)2800, (unsigned short)2801, (unsigned short)2802, (unsigned short)2803, (unsigned short)2804, (unsigned short)2805, (unsigned short)2809, (unsigned short)2810, (unsigned short)2812, (unsigned short)2814, (unsigned short)2819, (unsigned short)2820, (unsigned short)2821, (unsigned short)2822, (unsigned short)2823, (unsigned short)2827, (unsigned short)2828, (unsigned short)2829, (unsigned short)2830, (unsigned short)2831, (unsigned short)2835, (unsigned short)2836, (unsigned short)2837, (unsigned short)2838, (unsigned short)2839, (unsigned short)2843, (unsigned short)2844, (unsigned short)2845, (unsigned short)2861, (unsigned short)2862, (unsigned short)2863, (unsigned short)2864, (unsigned short)2877, (unsigned short)2893, (unsigned short)2894, (unsigned short)2899, (unsigned short)2900, (unsigned short)2904, (unsigned short)2905, (unsigned short)2906, (unsigned short)2907, (unsigned short)2910, (unsigned short)2911, (unsigned short)2915, (unsigned short)2916, (unsigned short)2920, (unsigned short)2921, (unsigned short)2922, (unsigned short)2926, (unsigned short)2927, (unsigned short)2928, (unsigned short)2932, (unsigned short)2933, (unsigned short)2934, (unsigned short)2935, (unsigned short)2939, (unsigned short)2940, (unsigned short)2944, (unsigned short)2945, (unsigned short)2950, (unsigned short)2951, (unsigned short)2952, (unsigned short)2953, (unsigned short)2954, (unsigned short)2955, (unsigned short)2974, (unsigned short)2975, (unsigned short)2979, (unsigned short)2980, (unsigned short)2981, (unsigned short)2982, (unsigned short)2983, (unsigned short)2984, (unsigned short)2986, (unsigned short)2987, (unsigned short)2988, (unsigned short)2989, (unsigned short)2993, (unsigned short)2994, (unsigned short)2995, (unsigned short)2996, (unsigned short)2997, (unsigned short)2999, (unsigned short)3000, (unsigned short)3001, (unsigned short)3005, (unsigned short)3006, (unsigned short)3007, (unsigned short)3008, (unsigned short)3009, (unsigned short)3010, (unsigned short)3014, (unsigned short)3015, (unsigned short)3016, (unsigned short)3021, (unsigned short)3022, (unsigned short)3023, (unsigned short)3024, (unsigned short)3025, (unsigned short)3026, (unsigned short)3027, (unsigned short)3028, (unsigned short)3029, (unsigned short)3030, (unsigned short)3032, (unsigned short)3033, (unsigned short)3034, (unsigned short)3038, (unsigned short)3039, (unsigned short)3040, (unsigned short)3041, (unsigned short)3042, (unsigned short)3043, (unsigned short)3044, (unsigned short)3048, (unsigned short)3049, (unsigned short)3053, (unsigned short)3054, (unsigned short)3055, (unsigned short)3059, (unsigned short)3060, (unsigned short)3061, (unsigned short)3062, (unsigned short)3064, (unsigned short)3065, (unsigned short)3066, (unsigned short)3068, (unsigned short)3069, (unsigned short)3070, (unsigned short)3071, (unsigned short)3073, (unsigned short)3074, (unsigned short)3075, (unsigned short)3079, (unsigned short)3080, (unsigned short)3081, (unsigned short)3082, (unsigned short)3083, (unsigned short)3087, (unsigned short)3088, (unsigned short)3089, (unsigned short)3090, (unsigned short)3091, (unsigned short)3092, (unsigned short)3093, (unsigned short)3097, (unsigned short)3098, (unsigned short)3099, (unsigned short)3103, (unsigned short)3104, (unsigned short)3108, (unsigned short)3109, (unsigned short)3110, (unsigned short)3111, (unsigned short)3115, (unsigned short)3116, (unsigned short)3117, (unsigned short)3119, (unsigned short)3120, (unsigned short)3121, (unsigned short)3125, (unsigned short)3129, (unsigned short)3130, (unsigned short)3132, (unsigned short)3133, (unsigned short)3134, (unsigned short)3138, (unsigned short)3139, (unsigned short)3140, (unsigned short)3141, (unsigned short)3145, (unsigned short)3146, (unsigned short)3150, (unsigned short)3151, (unsigned short)3152, (unsigned short)3156, (unsigned short)3157, (unsigned short)3158, (unsigned short)3159, (unsigned short)3160, (unsigned short)3161, (unsigned short)3162, (unsigned short)3166, (unsigned short)3167, (unsigned short)3168, (unsigned short)3169, (unsigned short)3173, (unsigned short)3174, (unsigned short)3175, (unsigned short)3176, (unsigned short)3180, (unsigned short)3184, (unsigned short)3188, (unsigned short)3190, (unsigned short)3193, (unsigned short)3199, (unsigned short)3200, (unsigned short)3201, (unsigned short)3205, (unsigned short)3206, (unsigned short)3207, (unsigned short)3208, (unsigned short)3209, (unsigned short)3210, (unsigned short)3214, (unsigned short)3215, (unsigned short)3219, (unsigned short)3220, (unsigned short)3221, (unsigned short)3223, (unsigned short)3224, (unsigned short)3226, (unsigned short)3227, (unsigned short)3228, (unsigned short)3229, (unsigned short)3230, (unsigned short)3232, (unsigned short)3233, (unsigned short)3237, (unsigned short)3238, (unsigned short)3239, (unsigned short)3240, (unsigned short)3241, (unsigned short)3242, (unsigned short)3243, (unsigned short)3244, (unsigned short)3245, (unsigned short)3247, (unsigned short)3248, (unsigned short)3249, (unsigned short)3250, (unsigned short)3251, (unsigned short)3252, (unsigned short)3253, (unsigned short)3256, (unsigned short)3257, (unsigned short)3258, (unsigned short)3259, (unsigned short)3260, (unsigned short)3261, (unsigned short)3262, (unsigned short)3266, (unsigned short)3267, (unsigned short)3268, (unsigned short)3269, (unsigned short)3270, (unsigned short)3271, (unsigned short)3272, (unsigned short)3273, (unsigned short)3277, (unsigned short)3278, (unsigned short)3279, (unsigned short)3280, (unsigned short)3286, (unsigned short)3287, (unsigned short)3290, (unsigned short)3291, (unsigned short)3294, (unsigned short)3295, (unsigned short)3296, (unsigned short)3297, (unsigned short)3301, (unsigned short)3302, (unsigned short)3314, (unsigned short)3315, (unsigned short)3318, (unsigned short)3321, (unsigned short)3323, (unsigned short)3324, (unsigned short)3325, (unsigned short)3327, (unsigned short)3329, (unsigned short)3330, (unsigned short)3332, (unsigned short)3333, (unsigned short)3334, (unsigned short)3335, (unsigned short)3336, (unsigned short)3337, (unsigned short)3338, (unsigned short)3339, (unsigned short)3340, (unsigned short)3341, (unsigned short)3345, (unsigned short)3346, (unsigned short)3347, (unsigned short)3349, (unsigned short)3350, (unsigned short)3352, (unsigned short)3354, (unsigned short)3358, (unsigned short)3359, (unsigned short)3360, (unsigned short)3361, (unsigned short)3362, (unsigned short)3366, (unsigned short)3367, (unsigned short)3368, (unsigned short)3370, (unsigned short)3375, (unsigned short)3376, (unsigned short)3377, (unsigned short)3381, (unsigned short)3382, (unsigned short)3383, (unsigned short)3387, (unsigned short)3391, (unsigned short)3392, (unsigned short)3393, (unsigned short)3397, (unsigned short)3398, (unsigned short)3402, (unsigned short)3403, (unsigned short)3407, (unsigned short)3408, (unsigned short)3409, (unsigned short)3410, (unsigned short)3414, (unsigned short)3418, (unsigned short)3422, (unsigned short)3426
+(unsigned short)0, (unsigned short)259, (unsigned short)259, (unsigned short)287, (unsigned short)345, (unsigned short)346, (unsigned short)446, (unsigned short)450, (unsigned short)453, (unsigned short)454, (unsigned short)455, (unsigned short)504, (unsigned short)506, (unsigned short)511, (unsigned short)516, (unsigned short)521, (unsigned short)523, (unsigned short)528, (unsigned short)530, (unsigned short)535, (unsigned short)537, (unsigned short)542, (unsigned short)544, (unsigned short)546, (unsigned short)548, (unsigned short)550, (unsigned short)554, (unsigned short)559, (unsigned short)561, (unsigned short)563, (unsigned short)565, (unsigned short)567, (unsigned short)573, (unsigned short)575, (unsigned short)580, (unsigned short)585, (unsigned short)590, (unsigned short)592, (unsigned short)594, (unsigned short)599, (unsigned short)600, (unsigned short)604, (unsigned short)605, (unsigned short)616, (unsigned short)620, (unsigned short)621, (unsigned short)623, (unsigned short)628, (unsigned short)629, (unsigned short)631, (unsigned short)634, (unsigned short)645, (unsigned short)655, (unsigned short)674, (unsigned short)676, (unsigned short)681, (unsigned short)682, (unsigned short)683, (unsigned short)684, (unsigned short)685, (unsigned short)686, (unsigned short)687, (unsigned short)688, (unsigned short)689, (unsigned short)693, (unsigned short)694, (unsigned short)695, (unsigned short)696, (unsigned short)700, (unsigned short)701, (unsigned short)702, (unsigned short)703, (unsigned short)704, (unsigned short)705, (unsigned short)706, (unsigned short)710, (unsigned short)712, (unsigned short)717, (unsigned short)719, (unsigned short)721, (unsigned short)723, (unsigned short)725, (unsigned short)755, (unsigned short)757, (unsigned short)762, (unsigned short)764, (unsigned short)766, (unsigned short)768, (unsigned short)770, (unsigned short)799, (unsigned short)801, (unsigned short)803, (unsigned short)808, (unsigned short)810, (unsigned short)815, (unsigned short)817, (unsigned short)821, (unsigned short)823, (unsigned short)825, (unsigned short)827, (unsigned short)832, (unsigned short)835, (unsigned short)838, (unsigned short)841, (unsigned short)906, (unsigned short)908, (unsigned short)913, (unsigned short)915, (unsigned short)917, (unsigned short)919, (unsigned short)921, (unsigned short)952, (unsigned short)956, (unsigned short)957, (unsigned short)958, (unsigned short)962, (unsigned short)963, (unsigned short)964, (unsigned short)968, (unsigned short)969, (unsigned short)970, (unsigned short)971, (unsigned short)975, (unsigned short)978, (unsigned short)981, (unsigned short)984, (unsigned short)987, (unsigned short)992, (unsigned short)993, (unsigned short)995, (unsigned short)997, (unsigned short)999, (unsigned short)1001, (unsigned short)1006, (unsigned short)1010, (unsigned short)1013, (unsigned short)1016, (unsigned short)1019, (unsigned short)1022, (unsigned short)1027, (unsigned short)1028, (unsigned short)1030, (unsigned short)1035, (unsigned short)1039, (unsigned short)1041, (unsigned short)1046, (unsigned short)1048, (unsigned short)1053, (unsigned short)1055, (unsigned short)1060, (unsigned short)1065, (unsigned short)1067, (unsigned short)1072, (unsigned short)1074, (unsigned short)1076, (unsigned short)1078, (unsigned short)1083, (unsigned short)1085, (unsigned short)1087, (unsigned short)1089, (unsigned short)1094, (unsigned short)1095, (unsigned short)1096, (unsigned short)1097, (unsigned short)1098, (unsigned short)1099, (unsigned short)1101, (unsigned short)1102, (unsigned short)1103, (unsigned short)1104, (unsigned short)1105, (unsigned short)1106, (unsigned short)1108, (unsigned short)1109, (unsigned short)1110, (unsigned short)1111, (unsigned short)1112, (unsigned short)1113, (unsigned short)1114, (unsigned short)1115, (unsigned short)1116, (unsigned short)1117, (unsigned short)1118, (unsigned short)1120, (unsigned short)1121, (unsigned short)1123, (unsigned short)1127, (unsigned short)1128, (unsigned short)1129, (unsigned short)1130, (unsigned short)1131, (unsigned short)1133, (unsigned short)1134, (unsigned short)1135, (unsigned short)1136, (unsigned short)1137, (unsigned short)1139, (unsigned short)1143, (unsigned short)1144, (unsigned short)1145, (unsigned short)1149, (unsigned short)1150, (unsigned short)1151, (unsigned short)1152, (unsigned short)1153, (unsigned short)1157, (unsigned short)1158, (unsigned short)1159, (unsigned short)1163, (unsigned short)1167, (unsigned short)1168, (unsigned short)1169, (unsigned short)1170, (unsigned short)1171, (unsigned short)1172, (unsigned short)1173, (unsigned short)1174, (unsigned short)1178, (unsigned short)1182, (unsigned short)1183, (unsigned short)1187, (unsigned short)1191, (unsigned short)1192, (unsigned short)1196, (unsigned short)1197, (unsigned short)1198, (unsigned short)1202, (unsigned short)1203, (unsigned short)1207, (unsigned short)1208, (unsigned short)1209, (unsigned short)1210, (unsigned short)1211, (unsigned short)1212, (unsigned short)1213, (unsigned short)1225, (unsigned short)1237, (unsigned short)1252, (unsigned short)1253, (unsigned short)1257, (unsigned short)1263, (unsigned short)1264, (unsigned short)1272, (unsigned short)1273, (unsigned short)1275, (unsigned short)1276, (unsigned short)1285, (unsigned short)1286, (unsigned short)1290, (unsigned short)1296, (unsigned short)1303, (unsigned short)1309, (unsigned short)1316, (unsigned short)1322, (unsigned short)1331, (unsigned short)1338, (unsigned short)1344, (unsigned short)1350, (unsigned short)1356, (unsigned short)1362, (unsigned short)1368, (unsigned short)1379, (unsigned short)1384, (unsigned short)1385, (unsigned short)1390, (unsigned short)1391, (unsigned short)1392, (unsigned short)1393, (unsigned short)1394, (unsigned short)1395, (unsigned short)1396, (unsigned short)1397, (unsigned short)1398, (unsigned short)1399, (unsigned short)1400, (unsigned short)1401, (unsigned short)1402, (unsigned short)1403, (unsigned short)1404, (unsigned short)1405, (unsigned short)1406, (unsigned short)1407, (unsigned short)1408, (unsigned short)1409, (unsigned short)1410, (unsigned short)1411, (unsigned short)1412, (unsigned short)1413, (unsigned short)1414, (unsigned short)1415, (unsigned short)1416, (unsigned short)1417, (unsigned short)1418, (unsigned short)1419, (unsigned short)1420, (unsigned short)1422, (unsigned short)1423, (unsigned short)1424, (unsigned short)1425, (unsigned short)1426, (unsigned short)1428, (unsigned short)1432, (unsigned short)1436, (unsigned short)1440, (unsigned short)1441, (unsigned short)1445, (unsigned short)1447, (unsigned short)1448, (unsigned short)1449, (unsigned short)1450, (unsigned short)1451, (unsigned short)1452, (unsigned short)1453, (unsigned short)1454, (unsigned short)1455, (unsigned short)1457, (unsigned short)1458, (unsigned short)1459, (unsigned short)1460, (unsigned short)1461, (unsigned short)1462, (unsigned short)1463, (unsigned short)1464, (unsigned short)1468, (unsigned short)1470, (unsigned short)1471, (unsigned short)1472, (unsigned short)1473, (unsigned short)1474, (unsigned short)1475, (unsigned short)1476, (unsigned short)1477, (unsigned short)1478, (unsigned short)1480, (unsigned short)1481, (unsigned short)1482, (unsigned short)1483, (unsigned short)1484, (unsigned short)1485, (unsigned short)1486, (unsigned short)1487, (unsigned short)1491, (unsigned short)1492, (unsigned short)1493, (unsigned short)1494, (unsigned short)1498, (unsigned short)1499, (unsigned short)1500, (unsigned short)1501, (unsigned short)1502, (unsigned short)1506, (unsigned short)1507, (unsigned short)1508, (unsigned short)1509, (unsigned short)1510, (unsigned short)1511, (unsigned short)1512, (unsigned short)1513, (unsigned short)1514, (unsigned short)1518, (unsigned short)1519, (unsigned short)1523, (unsigned short)1524, (unsigned short)1528, (unsigned short)1529, (unsigned short)1530, (unsigned short)1531, (unsigned short)1532, (unsigned short)1533, (unsigned short)1534, (unsigned short)1535, (unsigned short)1539, (unsigned short)1540, (unsigned short)1544, (unsigned short)1545, (unsigned short)1546, (unsigned short)1547, (unsigned short)1548, (unsigned short)1549, (unsigned short)1550, (unsigned short)1554, (unsigned short)1555, (unsigned short)1556, (unsigned short)1557, (unsigned short)1558, (unsigned short)1562, (unsigned short)1563, (unsigned short)1564, (unsigned short)1565, (unsigned short)1566, (unsigned short)1570, (unsigned short)1578, (unsigned short)1579, (unsigned short)1580, (unsigned short)1581, (unsigned short)1582, (unsigned short)1583, (unsigned short)1584, (unsigned short)1585, (unsigned short)1586, (unsigned short)1590, (unsigned short)1591, (unsigned short)1592, (unsigned short)1593, (unsigned short)1594, (unsigned short)1596, (unsigned short)1597, (unsigned short)1598, (unsigned short)1599, (unsigned short)1603, (unsigned short)1604, (unsigned short)1605, (unsigned short)1607, (unsigned short)1608, (unsigned short)1612, (unsigned short)1613, (unsigned short)1614, (unsigned short)1616, (unsigned short)1617, (unsigned short)1621, (unsigned short)1622, (unsigned short)1623, (unsigned short)1625, (unsigned short)1626, (unsigned short)1630, (unsigned short)1631, (unsigned short)1632, (unsigned short)1636, (unsigned short)1637, (unsigned short)1638, (unsigned short)1642, (unsigned short)1643, (unsigned short)1644, (unsigned short)1645, (unsigned short)1646, (unsigned short)1648, (unsigned short)1649, (unsigned short)1650, (unsigned short)1651, (unsigned short)1653, (unsigned short)1654, (unsigned short)1655, (unsigned short)1656, (unsigned short)1658, (unsigned short)1659, (unsigned short)1660, (unsigned short)1661, (unsigned short)1665, (unsigned short)1666, (unsigned short)1667, (unsigned short)1668, (unsigned short)1669, (unsigned short)1671, (unsigned short)1672, (unsigned short)1673, (unsigned short)1674, (unsigned short)1678, (unsigned short)1679, (unsigned short)1680, (unsigned short)1681, (unsigned short)1682, (unsigned short)1683, (unsigned short)1684, (unsigned short)1685, (unsigned short)1686, (unsigned short)1687, (unsigned short)1688, (unsigned short)1692, (unsigned short)1693, (unsigned short)1694, (unsigned short)1695, (unsigned short)1699, (unsigned short)1700, (unsigned short)1701, (unsigned short)1705, (unsigned short)1706, (unsigned short)1707, (unsigned short)1708, (unsigned short)1710, (unsigned short)1711, (unsigned short)1713, (unsigned short)1714, (unsigned short)1715, (unsigned short)1716, (unsigned short)1717, (unsigned short)1719, (unsigned short)1720, (unsigned short)1721, (unsigned short)1722, (unsigned short)1726, (unsigned short)1727, (unsigned short)1728, (unsigned short)1730, (unsigned short)1731, (unsigned short)1733, (unsigned short)1734, (unsigned short)1735, (unsigned short)1736, (unsigned short)1737, (unsigned short)1739, (unsigned short)1740, (unsigned short)1741, (unsigned short)1742, (unsigned short)1746, (unsigned short)1747, (unsigned short)1748, (unsigned short)1749, (unsigned short)1750, (unsigned short)1751, (unsigned short)1752, (unsigned short)1753, (unsigned short)1754, (unsigned short)1758, (unsigned short)1759, (unsigned short)1763, (unsigned short)1764, (unsigned short)1769, (unsigned short)1770, (unsigned short)1774, (unsigned short)1775, (unsigned short)1776, (unsigned short)1777, (unsigned short)1778, (unsigned short)1779, (unsigned short)1780, (unsigned short)1784, (unsigned short)1785, (unsigned short)1786, (unsigned short)1787, (unsigned short)1788, (unsigned short)1789, (unsigned short)1790, (unsigned short)1791, (unsigned short)1792, (unsigned short)1796, (unsigned short)1797, (unsigned short)1798, (unsigned short)1799, (unsigned short)1800, (unsigned short)1804, (unsigned short)1805, (unsigned short)1855, (unsigned short)1856, (unsigned short)1857, (unsigned short)1858, (unsigned short)1859, (unsigned short)1860, (unsigned short)1861, (unsigned short)1865, (unsigned short)1866, (unsigned short)1867, (unsigned short)1868, (unsigned short)1869, (unsigned short)1871, (unsigned short)1872, (unsigned short)1873, (unsigned short)1874, (unsigned short)1876, (unsigned short)1877, (unsigned short)1878, (unsigned short)1879, (unsigned short)1883, (unsigned short)1884, (unsigned short)1885, (unsigned short)1887, (unsigned short)1888, (unsigned short)1892, (unsigned short)1893, (unsigned short)1894, (unsigned short)1896, (unsigned short)1897, (unsigned short)1901, (unsigned short)1902, (unsigned short)1903, (unsigned short)1905, (unsigned short)1906, (unsigned short)1910, (unsigned short)1911, (unsigned short)1912, (unsigned short)1916, (unsigned short)1917, (unsigned short)1918, (unsigned short)1922, (unsigned short)1923, (unsigned short)1924, (unsigned short)1925, (unsigned short)1926, (unsigned short)1927, (unsigned short)1928, (unsigned short)1929, (unsigned short)1930, (unsigned short)1932, (unsigned short)1933, (unsigned short)1934, (unsigned short)1935, (unsigned short)1936, (unsigned short)1937, (unsigned short)1938, (unsigned short)1939, (unsigned short)1941, (unsigned short)1942, (unsigned short)1943, (unsigned short)1944, (unsigned short)1946, (unsigned short)1947, (unsigned short)1948, (unsigned short)1949, (unsigned short)1951, (unsigned short)1958, (unsigned short)1962, (unsigned short)1966, (unsigned short)1973, (unsigned short)1974, (unsigned short)1975, (unsigned short)1976, (unsigned short)1977, (unsigned short)1979, (unsigned short)1980, (unsigned short)1984, (unsigned short)1985, (unsigned short)1986, (unsigned short)1987, (unsigned short)1988, (unsigned short)1989, (unsigned short)1990, (unsigned short)1991, (unsigned short)1992, (unsigned short)1993, (unsigned short)1997, (unsigned short)1998, (unsigned short)1999, (unsigned short)2000, (unsigned short)2004, (unsigned short)2006, (unsigned short)2010, (unsigned short)2011, (unsigned short)2012, (unsigned short)2013, (unsigned short)2014, (unsigned short)2018, (unsigned short)2019, (unsigned short)2020, (unsigned short)2021, (unsigned short)2022, (unsigned short)2026, (unsigned short)2027, (unsigned short)2028, (unsigned short)2032, (unsigned short)2033, (unsigned short)2034, (unsigned short)2038, (unsigned short)2042, (unsigned short)2043, (unsigned short)2047, (unsigned short)2048, (unsigned short)2049, (unsigned short)2053, (unsigned short)2054, (unsigned short)2056, (unsigned short)2057, (unsigned short)2058, (unsigned short)2059, (unsigned short)2060, (unsigned short)2062, (unsigned short)2063, (unsigned short)2064, (unsigned short)2065, (unsigned short)2066, (unsigned short)2070, (unsigned short)2071, (unsigned short)2075, (unsigned short)2076, (unsigned short)2077, (unsigned short)2081, (unsigned short)2082, (unsigned short)2083, (unsigned short)2084, (unsigned short)2085, (unsigned short)2086, (unsigned short)2087, (unsigned short)2088, (unsigned short)2089, (unsigned short)2091, (unsigned short)2092, (unsigned short)2094, (unsigned short)2095, (unsigned short)2096, (unsigned short)2097, (unsigned short)2098, (unsigned short)2102, (unsigned short)2103, (unsigned short)2107, (unsigned short)2108, (unsigned short)2112, (unsigned short)2113, (unsigned short)2117, (unsigned short)2118, (unsigned short)2119, (unsigned short)2124, (unsigned short)2125, (unsigned short)2129, (unsigned short)2130, (unsigned short)2131, (unsigned short)2132, (unsigned short)2133, (unsigned short)2134, (unsigned short)2135, (unsigned short)2136, (unsigned short)2137, (unsigned short)2138, (unsigned short)2139, (unsigned short)2140, (unsigned short)2141, (unsigned short)2142, (unsigned short)2143, (unsigned short)2144, (unsigned short)2145, (unsigned short)2146, (unsigned short)2147, (unsigned short)2148, (unsigned short)2149, (unsigned short)2150, (unsigned short)2154, (unsigned short)2155, (unsigned short)2156, (unsigned short)2157, (unsigned short)2158, (unsigned short)2159, (unsigned short)2160, (unsigned short)2161, (unsigned short)2162, (unsigned short)2163, (unsigned short)2164, (unsigned short)2165, (unsigned short)2166, (unsigned short)2167, (unsigned short)2168, (unsigned short)2169, (unsigned short)2170, (unsigned short)2171, (unsigned short)2172, (unsigned short)2173, (unsigned short)2179, (unsigned short)2181, (unsigned short)2183, (unsigned short)2185, (unsigned short)2187, (unsigned short)2189, (unsigned short)2191, (unsigned short)2193, (unsigned short)2195, (unsigned short)2197, (unsigned short)2202, (unsigned short)2203, (unsigned short)2207, (unsigned short)2213, (unsigned short)2222, (unsigned short)2223, (unsigned short)2224, (unsigned short)2228, (unsigned short)2229, (unsigned short)2230, (unsigned short)2232, (unsigned short)2233, (unsigned short)2234, (unsigned short)2238, (unsigned short)2242, (unsigned short)2250, (unsigned short)2259, (unsigned short)2268, (unsigned short)2269, (unsigned short)2271, (unsigned short)2272, (unsigned short)2276, (unsigned short)2283, (unsigned short)2290, (unsigned short)2293, (unsigned short)2306, (unsigned short)2320, (unsigned short)2323, (unsigned short)2325, (unsigned short)2327, (unsigned short)2332, (unsigned short)2333, (unsigned short)2337, (unsigned short)2338, (unsigned short)2339, (unsigned short)2340, (unsigned short)2341, (unsigned short)2342, (unsigned short)2343, (unsigned short)2344, (unsigned short)2348, (unsigned short)2349, (unsigned short)2350, (unsigned short)2351, (unsigned short)2352, (unsigned short)2353, (unsigned short)2354, (unsigned short)2355, (unsigned short)2356, (unsigned short)2357, (unsigned short)2361, (unsigned short)2362, (unsigned short)2363, (unsigned short)2364, (unsigned short)2365, (unsigned short)2366, (unsigned short)2367, (unsigned short)2368, (unsigned short)2369, (unsigned short)2370, (unsigned short)2374, (unsigned short)2375, (unsigned short)2376, (unsigned short)2377, (unsigned short)2378, (unsigned short)2379, (unsigned short)2380, (unsigned short)2381, (unsigned short)2382, (unsigned short)2383, (unsigned short)2384, (unsigned short)2385, (unsigned short)2389, (unsigned short)2390, (unsigned short)2391, (unsigned short)2392, (unsigned short)2393, (unsigned short)2394, (unsigned short)2395, (unsigned short)2396, (unsigned short)2397, (unsigned short)2398, (unsigned short)2402, (unsigned short)2403, (unsigned short)2407, (unsigned short)2408, (unsigned short)2409, (unsigned short)2410, (unsigned short)2411, (unsigned short)2412, (unsigned short)2413, (unsigned short)2414, (unsigned short)2415, (unsigned short)2417, (unsigned short)2419, (unsigned short)2437, (unsigned short)2454, (unsigned short)2455, (unsigned short)2459, (unsigned short)2460, (unsigned short)2461, (unsigned short)2462, (unsigned short)2463, (unsigned short)2464, (unsigned short)2465, (unsigned short)2466, (unsigned short)2467, (unsigned short)2485, (unsigned short)2502, (unsigned short)2503, (unsigned short)2504, (unsigned short)2505, (unsigned short)2506, (unsigned short)2507, (unsigned short)2508, (unsigned short)2509, (unsigned short)2510, (unsigned short)2511, (unsigned short)2512, (unsigned short)2513, (unsigned short)2514, (unsigned short)2532, (unsigned short)2549, (unsigned short)2550, (unsigned short)2551, (unsigned short)2552, (unsigned short)2553, (unsigned short)2554, (unsigned short)2555, (unsigned short)2556, (unsigned short)2557, (unsigned short)2558, (unsigned short)2559, (unsigned short)2560, (unsigned short)2561, (unsigned short)2579, (unsigned short)2596, (unsigned short)2597, (unsigned short)2601, (unsigned short)2602, (unsigned short)2603, (unsigned short)2604, (unsigned short)2605, (unsigned short)2609, (unsigned short)2610, (unsigned short)2611, (unsigned short)2612, (unsigned short)2613, (unsigned short)2614, (unsigned short)2618, (unsigned short)2622, (unsigned short)2623, (unsigned short)2624, (unsigned short)2625, (unsigned short)2626, (unsigned short)2631, (unsigned short)2640, (unsigned short)2649, (unsigned short)2658, (unsigned short)2671, (unsigned short)2672, (unsigned short)2673, (unsigned short)2675, (unsigned short)2720, (unsigned short)2721, (unsigned short)2722, (unsigned short)2734, (unsigned short)2739, (unsigned short)2741, (unsigned short)2743, (unsigned short)2745, (unsigned short)2747, (unsigned short)2749, (unsigned short)2751, (unsigned short)2753, (unsigned short)2755, (unsigned short)2757, (unsigned short)2759, (unsigned short)2761, (unsigned short)2763, (unsigned short)2765, (unsigned short)2767, (unsigned short)2772, (unsigned short)2774, (unsigned short)2776, (unsigned short)2778, (unsigned short)2780, (unsigned short)2782, (unsigned short)2784, (unsigned short)2789, (unsigned short)2790, (unsigned short)2791, (unsigned short)2792, (unsigned short)2796, (unsigned short)2797, (unsigned short)2798, (unsigned short)2799, (unsigned short)2800, (unsigned short)2801, (unsigned short)2805, (unsigned short)2806, (unsigned short)2807, (unsigned short)2808, (unsigned short)2809, (unsigned short)2810, (unsigned short)2814, (unsigned short)2815, (unsigned short)2817, (unsigned short)2819, (unsigned short)2824, (unsigned short)2825, (unsigned short)2826, (unsigned short)2827, (unsigned short)2828, (unsigned short)2832, (unsigned short)2833, (unsigned short)2834, (unsigned short)2835, (unsigned short)2836, (unsigned short)2840, (unsigned short)2841, (unsigned short)2842, (unsigned short)2843, (unsigned short)2844, (unsigned short)2848, (unsigned short)2849, (unsigned short)2850, (unsigned short)2866, (unsigned short)2867, (unsigned short)2868, (unsigned short)2869, (unsigned short)2882, (unsigned short)2898, (unsigned short)2899, (unsigned short)2904, (unsigned short)2905, (unsigned short)2909, (unsigned short)2910, (unsigned short)2911, (unsigned short)2912, (unsigned short)2915, (unsigned short)2916, (unsigned short)2920, (unsigned short)2921, (unsigned short)2925, (unsigned short)2926, (unsigned short)2927, (unsigned short)2931, (unsigned short)2932, (unsigned short)2933, (unsigned short)2937, (unsigned short)2938, (unsigned short)2939, (unsigned short)2940, (unsigned short)2944, (unsigned short)2945, (unsigned short)2949, (unsigned short)2950, (unsigned short)2955, (unsigned short)2956, (unsigned short)2957, (unsigned short)2958, (unsigned short)2959, (unsigned short)2960, (unsigned short)2979, (unsigned short)2980, (unsigned short)2984, (unsigned short)2985, (unsigned short)2986, (unsigned short)2987, (unsigned short)2988, (unsigned short)2989, (unsigned short)2991, (unsigned short)2992, (unsigned short)2993, (unsigned short)2994, (unsigned short)2998, (unsigned short)2999, (unsigned short)3000, (unsigned short)3001, (unsigned short)3002, (unsigned short)3004, (unsigned short)3005, (unsigned short)3006, (unsigned short)3010, (unsigned short)3011, (unsigned short)3012, (unsigned short)3013, (unsigned short)3014, (unsigned short)3015, (unsigned short)3019, (unsigned short)3020, (unsigned short)3021, (unsigned short)3026, (unsigned short)3027, (unsigned short)3028, (unsigned short)3029, (unsigned short)3030, (unsigned short)3031, (unsigned short)3032, (unsigned short)3033, (unsigned short)3034, (unsigned short)3035, (unsigned short)3037, (unsigned short)3038, (unsigned short)3039, (unsigned short)3043, (unsigned short)3044, (unsigned short)3045, (unsigned short)3046, (unsigned short)3047, (unsigned short)3048, (unsigned short)3049, (unsigned short)3053, (unsigned short)3054, (unsigned short)3058, (unsigned short)3059, (unsigned short)3060, (unsigned short)3064, (unsigned short)3065, (unsigned short)3066, (unsigned short)3067, (unsigned short)3069, (unsigned short)3070, (unsigned short)3071, (unsigned short)3073, (unsigned short)3074, (unsigned short)3075, (unsigned short)3076, (unsigned short)3078, (unsigned short)3079, (unsigned short)3080, (unsigned short)3084, (unsigned short)3085, (unsigned short)3086, (unsigned short)3087, (unsigned short)3088, (unsigned short)3092, (unsigned short)3093, (unsigned short)3094, (unsigned short)3095, (unsigned short)3096, (unsigned short)3097, (unsigned short)3098, (unsigned short)3102, (unsigned short)3103, (unsigned short)3104, (unsigned short)3108, (unsigned short)3109, (unsigned short)3113, (unsigned short)3114, (unsigned short)3115, (unsigned short)3116, (unsigned short)3120, (unsigned short)3121, (unsigned short)3122, (unsigned short)3124, (unsigned short)3125, (unsigned short)3126, (unsigned short)3130, (unsigned short)3134, (unsigned short)3135, (unsigned short)3137, (unsigned short)3138, (unsigned short)3139, (unsigned short)3143, (unsigned short)3144, (unsigned short)3145, (unsigned short)3146, (unsigned short)3150, (unsigned short)3151, (unsigned short)3155, (unsigned short)3156, (unsigned short)3157, (unsigned short)3161, (unsigned short)3162, (unsigned short)3163, (unsigned short)3164, (unsigned short)3165, (unsigned short)3166, (unsigned short)3167, (unsigned short)3171, (unsigned short)3172, (unsigned short)3173, (unsigned short)3174, (unsigned short)3178, (unsigned short)3179, (unsigned short)3180, (unsigned short)3181, (unsigned short)3185, (unsigned short)3189, (unsigned short)3193, (unsigned short)3195, (unsigned short)3198, (unsigned short)3204, (unsigned short)3205, (unsigned short)3206, (unsigned short)3210, (unsigned short)3211, (unsigned short)3212, (unsigned short)3213, (unsigned short)3214, (unsigned short)3215, (unsigned short)3219, (unsigned short)3220, (unsigned short)3224, (unsigned short)3225, (unsigned short)3226, (unsigned short)3228, (unsigned short)3229, (unsigned short)3231, (unsigned short)3232, (unsigned short)3233, (unsigned short)3234, (unsigned short)3235, (unsigned short)3237, (unsigned short)3238, (unsigned short)3242, (unsigned short)3243, (unsigned short)3244, (unsigned short)3245, (unsigned short)3246, (unsigned short)3247, (unsigned short)3248, (unsigned short)3249, (unsigned short)3250, (unsigned short)3252, (unsigned short)3253, (unsigned short)3254, (unsigned short)3255, (unsigned short)3256, (unsigned short)3257, (unsigned short)3258, (unsigned short)3261, (unsigned short)3262, (unsigned short)3263, (unsigned short)3264, (unsigned short)3265, (unsigned short)3266, (unsigned short)3267, (unsigned short)3271, (unsigned short)3272, (unsigned short)3273, (unsigned short)3274, (unsigned short)3275, (unsigned short)3276, (unsigned short)3277, (unsigned short)3278, (unsigned short)3282, (unsigned short)3283, (unsigned short)3284, (unsigned short)3285, (unsigned short)3291, (unsigned short)3292, (unsigned short)3295, (unsigned short)3296, (unsigned short)3299, (unsigned short)3300, (unsigned short)3301, (unsigned short)3302, (unsigned short)3306, (unsigned short)3307, (unsigned short)3319, (unsigned short)3320, (unsigned short)3323, (unsigned short)3326, (unsigned short)3328, (unsigned short)3329, (unsigned short)3330, (unsigned short)3332, (unsigned short)3334, (unsigned short)3335, (unsigned short)3337, (unsigned short)3338, (unsigned short)3339, (unsigned short)3340, (unsigned short)3341, (unsigned short)3342, (unsigned short)3343, (unsigned short)3344, (unsigned short)3345, (unsigned short)3346, (unsigned short)3350, (unsigned short)3351, (unsigned short)3352, (unsigned short)3354, (unsigned short)3355, (unsigned short)3357, (unsigned short)3359, (unsigned short)3363, (unsigned short)3364, (unsigned short)3365, (unsigned short)3366, (unsigned short)3367, (unsigned short)3371, (unsigned short)3372, (unsigned short)3373, (unsigned short)3375, (unsigned short)3380, (unsigned short)3381, (unsigned short)3382, (unsigned short)3386, (unsigned short)3387, (unsigned short)3388, (unsigned short)3392, (unsigned short)3396, (unsigned short)3397, (unsigned short)3398, (unsigned short)3402, (unsigned short)3403, (unsigned short)3407, (unsigned short)3408, (unsigned short)3412, (unsigned short)3413, (unsigned short)3414, (unsigned short)3415, (unsigned short)3419, (unsigned short)3423, (unsigned short)3427, (unsigned short)3431
 };
 
 static const char * const yytname[] = 
@@ -1186,6 +1186,12 @@ extern void FreeProperty(struct PropertyDef * def);
 
 extern void FreeClassDef(struct ClassDef * def);
 
+extern void FreeTemplateDataType(struct TemplateDatatype * type);
+
+extern void FreeTemplateArgument(struct TemplateArgument * arg);
+
+extern void FreeTemplateParameter(struct TemplateParameter * param);
+
 extern void FreeClass(struct ClassDefinition * _class);
 
 extern void FreeIdentifier(struct Identifier * id);
@@ -1208,6 +1214,10 @@ extern void FreeStatement(struct Statement * stmt);
 
 extern void FreeDeclaration(struct Declaration * decl);
 
+extern void PopContext(struct Context * ctx);
+
+extern void FreeContext(struct Context * context);
+
 extern void FreeFunction(struct FunctionDefinition * func);
 
 extern void FreeExternal(struct External * external);
@@ -1229,12 +1239,30 @@ fprintf((bsl_stderr()), "\n");
 }while(0);
 switch(yytype)
 {
+case 135:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
 case 136:
 {
 FreeSpecifier((*yyvaluep).specifier);
 }
 ;
 break;
+case 137:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
+case 139:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
 case 140:
 {
 FreeClassFunction((*yyvaluep).classFunction);
@@ -1433,6 +1461,60 @@ FreeList((*yyvaluep).list, FreeClassDef);
 }
 ;
 break;
+case 190:
+{
+FreeTemplateDataType((*yyvaluep).templateDatatype);
+}
+;
+break;
+case 191:
+{
+FreeTemplateArgument((*yyvaluep).templateArgument);
+}
+;
+break;
+case 192:
+{
+FreeTemplateParameter((*yyvaluep).templateParameter);
+}
+;
+break;
+case 193:
+{
+FreeTemplateArgument((*yyvaluep).templateArgument);
+}
+;
+break;
+case 194:
+{
+FreeTemplateParameter((*yyvaluep).templateParameter);
+}
+;
+break;
+case 195:
+{
+FreeTemplateArgument((*yyvaluep).templateArgument);
+}
+;
+break;
+case 196:
+{
+FreeTemplateParameter((*yyvaluep).templateParameter);
+}
+;
+break;
+case 197:
+{
+FreeTemplateParameter((*yyvaluep).templateParameter);
+}
+;
+break;
+case 199:
+{
+FreeTemplateArgument((*yyvaluep).templateArgument);
+}
+;
+break;
 case 203:
 {
 FreeClass((*yyvaluep)._class);
@@ -1703,12 +1785,36 @@ FreeList((*yyvaluep).list, FreeEnumerator);
 }
 ;
 break;
+case 264:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
+case 265:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
 case 266:
 {
 FreeSpecifier((*yyvaluep).specifier);
 }
 ;
 break;
+case 268:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
+case 269:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
 case 270:
 {
 FreeSpecifier((*yyvaluep).specifier);
@@ -1745,6 +1851,12 @@ FreeSpecifier((*yyvaluep).specifier);
 }
 ;
 break;
+case 276:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
 case 277:
 {
 FreeDeclarator((*yyvaluep).declarator);
@@ -1757,6 +1869,12 @@ FreeList((*yyvaluep).list, FreeDeclarator);
 }
 ;
 break;
+case 279:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
 case 280:
 {
 FreeSpecifier((*yyvaluep).specifier);
@@ -1775,6 +1893,18 @@ FreeSpecifier((*yyvaluep).specifier);
 }
 ;
 break;
+case 283:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
+case 284:
+{
+FreeSpecifier((*yyvaluep).specifier);
+}
+;
+break;
 case 285:
 {
 FreeSpecifier((*yyvaluep).specifier);
@@ -1793,12 +1923,36 @@ FreeList((*yyvaluep).list, FreeSpecifier);
 }
 ;
 break;
+case 289:
+{
+FreeList((*yyvaluep).list, FreeSpecifier);
+}
+;
+break;
 case 290:
 {
 FreeList((*yyvaluep).list, FreeSpecifier);
 }
 ;
 break;
+case 291:
+{
+FreeList((*yyvaluep).list, FreeSpecifier);
+}
+;
+break;
+case 292:
+{
+FreeList((*yyvaluep).list, FreeSpecifier);
+}
+;
+break;
+case 293:
+{
+FreeList((*yyvaluep).list, FreeSpecifier);
+}
+;
+break;
 case 294:
 {
 FreeList((*yyvaluep).list, FreeSpecifier);
@@ -2086,6 +2240,14 @@ FreeStatement((*yyvaluep).stmt);
 }
 ;
 break;
+case 353:
+{
+PopContext((*yyvaluep).context);
+FreeContext((*yyvaluep).context);
+(((*yyvaluep).context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((*yyvaluep).context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete((*yyvaluep).context)) : 0), (*yyvaluep).context = 0);
+}
+;
+break;
 case 354:
 {
 FreeStatement((*yyvaluep).stmt);
@@ -2305,16 +2467,12 @@ extern struct TemplateArgument * MkTemplateExpressionArgument(struct Expression
 
 extern struct TemplateParameter * MkExpressionTemplateParameter(struct Identifier * identifier, struct TemplateDatatype * dataType, struct TemplateArgument * defaultArgument);
 
-extern void FreeTemplateDataType(struct TemplateDatatype * type);
-
 extern struct Context * PushContext(void);
 
 extern struct Symbol * DeclClassAddNameSpace(int symbolID, char *  className);
 
 extern struct Symbol * DeclClass(int symbolID, char *  name);
 
-extern void PopContext(struct Context * ctx);
-
 extern struct Context * curContext;
 
 extern struct ClassDefinition * MkClass(struct Symbol * symbol, struct __ecereNameSpace__ecere__sys__OldList * baseSpecs, struct __ecereNameSpace__ecere__sys__OldList * definitions);
@@ -7202,6 +7360,24 @@ ListAdd(yyvsp[-2].list, yyvsp[0].exp);
 ;
 }
 break;
+case 625:
+{
+FreeList(yyvsp[0].list, FreeExpression);
+;
+}
+break;
+case 626:
+{
+FreeList(yyvsp[0].list, FreeExpression);
+;
+}
+break;
+case 627:
+{
+FreeList(yyvsp[0].list, FreeExpression);
+;
+}
+break;
 case 628:
 {
 yyval.list = MkList();
@@ -11194,6 +11370,7 @@ yyval.external = MkExternalClass(yyvsp[0]._class);
 yyval.external->loc = (yyloc);
 yyvsp[0]._class->declMode = (declMode != 0) ? declMode : 2;
 declMode = defaultDeclMode;
+FreeList(yyvsp[-1].list, FreeSpecifier);
 ;
 }
 break;
index 7791106..13f9a9c 100644 (file)
@@ -715,44 +715,49 @@ Declaration MkDeclaration(OldList specifiers, OldList initDeclarators)
                   id.string = CopyString(name);
                }
                
-               symbol = Symbol { string = CopyString(id.string), type = ProcessType(specifiers, d.declarator) };
-               (curContext.templateTypesOnly ? curContext.parent : curContext).symbols.Add((BTNode)symbol);
-               // TODO: Add better support to count declarators
-               if(symbol.type && symbol.type.kind == arrayType && !symbol.type.arraySizeExp && d.initializer)
+               // Avoid memory leaks on duplicated symbols (BinaryTree::Add Would Fail)
+               symbol = (Symbol)(curContext.templateTypesOnly ? curContext.parent : curContext).symbols.FindString(id.string);
+               if(!symbol)
                {
-                  if(d.initializer.type == listInitializer)
+                  symbol = Symbol { string = CopyString(id.string), type = ProcessType(specifiers, d.declarator) };
+                  (curContext.templateTypesOnly ? curContext.parent : curContext).symbols.Add((BTNode)symbol);
+                  // TODO: Add better support to count declarators
+                  if(symbol.type && symbol.type.kind == arrayType && !symbol.type.arraySizeExp && d.initializer)
                   {
-                     char string[256];
-                     sprintf(string, "%d",d.initializer.list->count);
-                     symbol.type.arraySizeExp = MkExpConstant(string);
-                     symbol.type.freeExp = true;
-                  }
-                  else if(d.initializer.type == expInitializer && d.initializer.exp.type == stringExp && d.initializer.exp.string)
-                  {
-                     char string[256];
-                     int c, count = 0;
-                     char ch;
-                     bool escaped = false;
-                     char * s = d.initializer.exp.string;
-
-                     // MAKE MORE ACCURATE
-                     for(c = 1; (ch = s[c]); c++)
+                     if(d.initializer.type == listInitializer)
                      {
-                        if(ch == '\\' && !escaped)
-                           escaped = true;
-                        else
+                        char string[256];
+                        sprintf(string, "%d",d.initializer.list->count);
+                        symbol.type.arraySizeExp = MkExpConstant(string);
+                        symbol.type.freeExp = true;
+                     }
+                     else if(d.initializer.type == expInitializer && d.initializer.exp.type == stringExp && d.initializer.exp.string)
+                     {
+                        char string[256];
+                        int c, count = 0;
+                        char ch;
+                        bool escaped = false;
+                        char * s = d.initializer.exp.string;
+
+                        // MAKE MORE ACCURATE
+                        for(c = 1; (ch = s[c]); c++)
                         {
-                           count++;
-                           escaped = false;
+                           if(ch == '\\' && !escaped)
+                              escaped = true;
+                           else
+                           {
+                              count++;
+                              escaped = false;
+                           }
                         }
-                     }
 
-                     sprintf(string, "%d", count);
-                     symbol.type.arraySizeExp = MkExpConstant(string);
-                     symbol.type.freeExp = true;
+                        sprintf(string, "%d", count);
+                        symbol.type.arraySizeExp = MkExpConstant(string);
+                        symbol.type.freeExp = true;
+                     }
                   }
+                  symbol.id = symbol.idCode = curContext.nextID++;
                }
-               symbol.id = symbol.idCode = curContext.nextID++;
                decl.symbol = d.declarator.symbol = symbol;
             }
          }
index 84b7abf..507378c 100644 (file)
@@ -1157,134 +1157,134 @@ static const short int yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   254,   254,   282,   340,   341,   441,   445,   448,   449,
-     450,   499,   501,   506,   511,   516,   518,   523,   525,   530,
-     532,   537,   539,   541,   543,   545,   549,   554,   556,   558,
-     560,   562,   568,   570,   575,   580,   585,   587,   589,   594,
-     595,   599,   600,   611,   615,   616,   618,   623,   624,   626,
-     629,   640,   650,   669,   671,   676,   677,   678,   679,   680,
-     681,   682,   683,   684,   688,   689,   690,   691,   695,   696,
-     697,   698,   699,   700,   701,   705,   707,   712,   714,   716,
-     718,   720,   750,   752,   757,   759,   761,   763,   765,   794,
-     796,   798,   803,   805,   810,   812,   816,   818,   820,   822,
-     827,   830,   833,   836,   901,   903,   908,   910,   912,   914,
-     916,   947,   951,   952,   953,   957,   958,   959,   963,   964,
-     965,   966,   970,   973,   976,   979,   982,   987,   988,   990,
-     992,   994,   996,  1001,  1005,  1008,  1011,  1014,  1017,  1022,
-    1023,  1025,  1030,  1034,  1036,  1041,  1043,  1048,  1050,  1055,
-    1060,  1062,  1067,  1069,  1071,  1073,  1078,  1080,  1082,  1084,
-    1089,  1090,  1091,  1092,  1093,  1094,  1096,  1097,  1098,  1099,
-    1100,  1101,  1103,  1104,  1105,  1106,  1107,  1108,  1109,  1110,
-    1111,  1112,  1113,  1115,  1116,  1118,  1122,  1123,  1124,  1125,
-    1126,  1128,  1129,  1130,  1131,  1132,  1134,  1138,  1139,  1140,
-    1144,  1145,  1146,  1147,  1148,  1152,  1153,  1154,  1158,  1162,
-    1163,  1164,  1165,  1166,  1167,  1168,  1169,  1173,  1177,  1178,
-    1182,  1186,  1187,  1191,  1192,  1193,  1197,  1198,  1202,  1203,
-    1204,  1205,  1206,  1207,  1208,  1220,  1232,  1247,  1248,  1252,
-    1258,  1259,  1267,  1268,  1270,  1271,  1280,  1281,  1285,  1291,
-    1298,  1304,  1311,  1317,  1326,  1333,  1339,  1345,  1351,  1357,
-    1363,  1374,  1379,  1380,  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,  1417,  1418,  1419,  1420,  1421,
-    1423,  1427,  1431,  1435,  1436,  1440,  1442,  1443,  1444,  1445,
-    1446,  1447,  1448,  1449,  1450,  1452,  1453,  1454,  1455,  1456,
-    1457,  1458,  1459,  1463,  1465,  1466,  1467,  1468,  1469,  1470,
-    1471,  1472,  1473,  1475,  1476,  1477,  1478,  1479,  1480,  1481,
-    1482,  1486,  1487,  1488,  1489,  1493,  1494,  1495,  1496,  1497,
-    1501,  1502,  1503,  1504,  1505,  1506,  1507,  1508,  1509,  1513,
-    1514,  1518,  1519,  1523,  1524,  1525,  1526,  1527,  1528,  1529,
-    1530,  1534,  1535,  1539,  1540,  1541,  1542,  1543,  1544,  1545,
-    1549,  1550,  1551,  1552,  1553,  1557,  1558,  1559,  1560,  1561,
-    1565,  1573,  1574,  1575,  1576,  1577,  1578,  1579,  1580,  1581,
-    1585,  1586,  1587,  1588,  1589,  1591,  1592,  1593,  1594,  1598,
-    1599,  1600,  1602,  1603,  1607,  1608,  1609,  1611,  1612,  1616,
-    1617,  1618,  1620,  1621,  1625,  1626,  1627,  1631,  1632,  1633,
-    1637,  1638,  1639,  1640,  1641,  1643,  1644,  1645,  1646,  1648,
-    1649,  1650,  1651,  1653,  1654,  1655,  1656,  1660,  1661,  1662,
-    1663,  1664,  1666,  1667,  1668,  1669,  1673,  1674,  1675,  1676,
-    1677,  1678,  1679,  1680,  1681,  1682,  1683,  1687,  1688,  1689,
-    1690,  1694,  1695,  1696,  1700,  1701,  1702,  1703,  1705,  1706,
-    1708,  1709,  1710,  1711,  1712,  1714,  1715,  1716,  1717,  1721,
-    1722,  1723,  1725,  1726,  1728,  1729,  1730,  1731,  1732,  1734,
-    1735,  1736,  1737,  1741,  1742,  1743,  1744,  1745,  1746,  1747,
-    1748,  1749,  1753,  1754,  1758,  1759,  1764,  1765,  1769,  1770,
-    1771,  1772,  1773,  1774,  1775,  1779,  1780,  1781,  1782,  1783,
-    1784,  1785,  1786,  1787,  1791,  1792,  1793,  1794,  1795,  1799,
-    1800,  1850,  1851,  1852,  1853,  1854,  1855,  1856,  1860,  1861,
-    1862,  1863,  1864,  1866,  1867,  1868,  1869,  1871,  1872,  1873,
-    1874,  1878,  1879,  1880,  1882,  1883,  1887,  1888,  1889,  1891,
-    1892,  1896,  1897,  1898,  1900,  1901,  1905,  1906,  1907,  1911,
-    1912,  1913,  1917,  1918,  1919,  1920,  1921,  1922,  1923,  1924,
-    1925,  1927,  1928,  1929,  1930,  1931,  1932,  1933,  1934,  1936,
-    1937,  1938,  1939,  1941,  1942,  1943,  1944,  1946,  1953,  1957,
-    1961,  1968,  1969,  1970,  1971,  1972,  1974,  1975,  1979,  1980,
-    1981,  1982,  1983,  1984,  1985,  1986,  1987,  1988,  1992,  1993,
-    1994,  1995,  1999,  2001,  2005,  2006,  2007,  2008,  2009,  2013,
-    2014,  2015,  2016,  2017,  2021,  2022,  2023,  2027,  2028,  2029,
-    2033,  2037,  2038,  2042,  2043,  2044,  2048,  2049,  2051,  2052,
-    2053,  2054,  2055,  2057,  2058,  2059,  2060,  2061,  2065,  2066,
-    2070,  2071,  2072,  2076,  2077,  2078,  2079,  2080,  2081,  2082,
-    2083,  2084,  2086,  2087,  2089,  2090,  2091,  2092,  2093,  2097,
-    2098,  2102,  2103,  2107,  2108,  2112,  2113,  2114,  2119,  2120,
-    2124,  2125,  2126,  2127,  2128,  2129,  2130,  2131,  2132,  2133,
-    2134,  2135,  2136,  2137,  2138,  2139,  2140,  2141,  2142,  2143,
-    2144,  2145,  2149,  2150,  2151,  2152,  2153,  2154,  2155,  2156,
-    2157,  2158,  2159,  2160,  2161,  2162,  2163,  2164,  2165,  2166,
-    2167,  2168,  2174,  2176,  2178,  2180,  2182,  2184,  2186,  2188,
-    2190,  2192,  2197,  2198,  2202,  2208,  2217,  2218,  2219,  2223,
-    2224,  2225,  2227,  2228,  2229,  2233,  2237,  2245,  2254,  2263,
-    2264,  2266,  2267,  2271,  2278,  2285,  2288,  2301,  2315,  2318,
-    2320,  2322,  2327,  2328,  2332,  2333,  2334,  2335,  2336,  2337,
-    2338,  2339,  2343,  2344,  2345,  2346,  2347,  2348,  2349,  2350,
-    2351,  2352,  2356,  2357,  2358,  2359,  2360,  2361,  2362,  2363,
-    2364,  2365,  2369,  2370,  2371,  2372,  2373,  2374,  2375,  2376,
-    2377,  2378,  2379,  2380,  2384,  2385,  2386,  2387,  2388,  2389,
-    2390,  2391,  2392,  2393,  2397,  2398,  2402,  2403,  2404,  2405,
-    2406,  2407,  2408,  2409,  2410,  2412,  2414,  2432,  2449,  2450,
-    2454,  2455,  2456,  2457,  2458,  2459,  2460,  2461,  2462,  2480,
-    2497,  2498,  2499,  2500,  2501,  2502,  2503,  2504,  2505,  2506,
-    2507,  2508,  2509,  2527,  2544,  2545,  2546,  2547,  2548,  2549,
-    2550,  2551,  2552,  2553,  2554,  2555,  2556,  2574,  2591,  2592,
-    2596,  2597,  2598,  2599,  2600,  2604,  2605,  2606,  2607,  2608,
-    2609,  2613,  2617,  2618,  2619,  2620,  2621,  2626,  2635,  2644,
-    2653,  2666,  2667,  2668,  2670,  2715,  2716,  2717,  2729,  2734,
-    2736,  2738,  2740,  2742,  2744,  2746,  2748,  2750,  2752,  2754,
-    2756,  2758,  2760,  2762,  2767,  2769,  2771,  2773,  2775,  2777,
-    2779,  2784,  2785,  2786,  2787,  2791,  2792,  2793,  2794,  2795,
-    2796,  2800,  2801,  2802,  2803,  2804,  2805,  2809,  2810,  2812,
-    2814,  2819,  2820,  2821,  2822,  2823,  2827,  2828,  2829,  2830,
-    2831,  2835,  2836,  2837,  2838,  2839,  2843,  2844,  2845,  2861,
-    2862,  2863,  2864,  2877,  2893,  2894,  2899,  2900,  2904,  2905,
-    2906,  2907,  2910,  2911,  2915,  2916,  2920,  2921,  2922,  2926,
-    2927,  2928,  2932,  2933,  2934,  2935,  2939,  2940,  2944,  2945,
-    2950,  2951,  2952,  2953,  2954,  2955,  2974,  2975,  2979,  2980,
-    2981,  2982,  2983,  2984,  2986,  2987,  2988,  2989,  2993,  2994,
-    2995,  2996,  2997,  2999,  3000,  3001,  3005,  3006,  3007,  3008,
-    3009,  3010,  3014,  3015,  3016,  3021,  3022,  3023,  3024,  3025,
-    3026,  3027,  3028,  3029,  3030,  3032,  3033,  3034,  3038,  3039,
-    3040,  3041,  3042,  3043,  3044,  3048,  3049,  3053,  3054,  3055,
-    3059,  3060,  3061,  3062,  3064,  3065,  3066,  3068,  3069,  3070,
-    3071,  3073,  3074,  3075,  3079,  3080,  3081,  3082,  3083,  3087,
-    3088,  3089,  3090,  3091,  3092,  3093,  3097,  3098,  3099,  3103,
-    3104,  3108,  3109,  3110,  3111,  3115,  3116,  3117,  3119,  3120,
-    3121,  3125,  3129,  3130,  3132,  3133,  3134,  3138,  3139,  3140,
-    3141,  3145,  3146,  3150,  3151,  3152,  3156,  3157,  3158,  3159,
-    3160,  3161,  3162,  3166,  3167,  3168,  3169,  3173,  3174,  3175,
-    3176,  3180,  3184,  3188,  3190,  3193,  3199,  3200,  3201,  3205,
-    3206,  3207,  3208,  3209,  3210,  3214,  3215,  3219,  3220,  3221,
-    3223,  3224,  3226,  3227,  3228,  3229,  3230,  3232,  3233,  3237,
-    3238,  3239,  3240,  3241,  3242,  3243,  3244,  3245,  3247,  3248,
-    3249,  3250,  3251,  3252,  3253,  3256,  3257,  3258,  3259,  3260,
-    3261,  3262,  3266,  3267,  3268,  3269,  3270,  3271,  3272,  3273,
-    3277,  3278,  3279,  3280,  3286,  3287,  3290,  3291,  3294,  3295,
-    3296,  3297,  3301,  3302,  3314,  3315,  3318,  3321,  3323,  3324,
-    3325,  3327,  3329,  3330,  3332,  3333,  3334,  3335,  3336,  3337,
-    3338,  3339,  3340,  3341,  3345,  3346,  3347,  3349,  3350,  3352,
-    3354,  3358,  3359,  3360,  3361,  3362,  3366,  3367,  3368,  3370,
-    3375,  3376,  3377,  3381,  3382,  3383,  3387,  3391,  3392,  3393,
-    3397,  3398,  3402,  3403,  3407,  3408,  3409,  3410,  3414,  3418,
-    3422,  3426
+       0,   259,   259,   287,   345,   346,   446,   450,   453,   454,
+     455,   504,   506,   511,   516,   521,   523,   528,   530,   535,
+     537,   542,   544,   546,   548,   550,   554,   559,   561,   563,
+     565,   567,   573,   575,   580,   585,   590,   592,   594,   599,
+     600,   604,   605,   616,   620,   621,   623,   628,   629,   631,
+     634,   645,   655,   674,   676,   681,   682,   683,   684,   685,
+     686,   687,   688,   689,   693,   694,   695,   696,   700,   701,
+     702,   703,   704,   705,   706,   710,   712,   717,   719,   721,
+     723,   725,   755,   757,   762,   764,   766,   768,   770,   799,
+     801,   803,   808,   810,   815,   817,   821,   823,   825,   827,
+     832,   835,   838,   841,   906,   908,   913,   915,   917,   919,
+     921,   952,   956,   957,   958,   962,   963,   964,   968,   969,
+     970,   971,   975,   978,   981,   984,   987,   992,   993,   995,
+     997,   999,  1001,  1006,  1010,  1013,  1016,  1019,  1022,  1027,
+    1028,  1030,  1035,  1039,  1041,  1046,  1048,  1053,  1055,  1060,
+    1065,  1067,  1072,  1074,  1076,  1078,  1083,  1085,  1087,  1089,
+    1094,  1095,  1096,  1097,  1098,  1099,  1101,  1102,  1103,  1104,
+    1105,  1106,  1108,  1109,  1110,  1111,  1112,  1113,  1114,  1115,
+    1116,  1117,  1118,  1120,  1121,  1123,  1127,  1128,  1129,  1130,
+    1131,  1133,  1134,  1135,  1136,  1137,  1139,  1143,  1144,  1145,
+    1149,  1150,  1151,  1152,  1153,  1157,  1158,  1159,  1163,  1167,
+    1168,  1169,  1170,  1171,  1172,  1173,  1174,  1178,  1182,  1183,
+    1187,  1191,  1192,  1196,  1197,  1198,  1202,  1203,  1207,  1208,
+    1209,  1210,  1211,  1212,  1213,  1225,  1237,  1252,  1253,  1257,
+    1263,  1264,  1272,  1273,  1275,  1276,  1285,  1286,  1290,  1296,
+    1303,  1309,  1316,  1322,  1331,  1338,  1344,  1350,  1356,  1362,
+    1368,  1379,  1384,  1385,  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,  1422,  1423,  1424,  1425,  1426,
+    1428,  1432,  1436,  1440,  1441,  1445,  1447,  1448,  1449,  1450,
+    1451,  1452,  1453,  1454,  1455,  1457,  1458,  1459,  1460,  1461,
+    1462,  1463,  1464,  1468,  1470,  1471,  1472,  1473,  1474,  1475,
+    1476,  1477,  1478,  1480,  1481,  1482,  1483,  1484,  1485,  1486,
+    1487,  1491,  1492,  1493,  1494,  1498,  1499,  1500,  1501,  1502,
+    1506,  1507,  1508,  1509,  1510,  1511,  1512,  1513,  1514,  1518,
+    1519,  1523,  1524,  1528,  1529,  1530,  1531,  1532,  1533,  1534,
+    1535,  1539,  1540,  1544,  1545,  1546,  1547,  1548,  1549,  1550,
+    1554,  1555,  1556,  1557,  1558,  1562,  1563,  1564,  1565,  1566,
+    1570,  1578,  1579,  1580,  1581,  1582,  1583,  1584,  1585,  1586,
+    1590,  1591,  1592,  1593,  1594,  1596,  1597,  1598,  1599,  1603,
+    1604,  1605,  1607,  1608,  1612,  1613,  1614,  1616,  1617,  1621,
+    1622,  1623,  1625,  1626,  1630,  1631,  1632,  1636,  1637,  1638,
+    1642,  1643,  1644,  1645,  1646,  1648,  1649,  1650,  1651,  1653,
+    1654,  1655,  1656,  1658,  1659,  1660,  1661,  1665,  1666,  1667,
+    1668,  1669,  1671,  1672,  1673,  1674,  1678,  1679,  1680,  1681,
+    1682,  1683,  1684,  1685,  1686,  1687,  1688,  1692,  1693,  1694,
+    1695,  1699,  1700,  1701,  1705,  1706,  1707,  1708,  1710,  1711,
+    1713,  1714,  1715,  1716,  1717,  1719,  1720,  1721,  1722,  1726,
+    1727,  1728,  1730,  1731,  1733,  1734,  1735,  1736,  1737,  1739,
+    1740,  1741,  1742,  1746,  1747,  1748,  1749,  1750,  1751,  1752,
+    1753,  1754,  1758,  1759,  1763,  1764,  1769,  1770,  1774,  1775,
+    1776,  1777,  1778,  1779,  1780,  1784,  1785,  1786,  1787,  1788,
+    1789,  1790,  1791,  1792,  1796,  1797,  1798,  1799,  1800,  1804,
+    1805,  1855,  1856,  1857,  1858,  1859,  1860,  1861,  1865,  1866,
+    1867,  1868,  1869,  1871,  1872,  1873,  1874,  1876,  1877,  1878,
+    1879,  1883,  1884,  1885,  1887,  1888,  1892,  1893,  1894,  1896,
+    1897,  1901,  1902,  1903,  1905,  1906,  1910,  1911,  1912,  1916,
+    1917,  1918,  1922,  1923,  1924,  1925,  1926,  1927,  1928,  1929,
+    1930,  1932,  1933,  1934,  1935,  1936,  1937,  1938,  1939,  1941,
+    1942,  1943,  1944,  1946,  1947,  1948,  1949,  1951,  1958,  1962,
+    1966,  1973,  1974,  1975,  1976,  1977,  1979,  1980,  1984,  1985,
+    1986,  1987,  1988,  1989,  1990,  1991,  1992,  1993,  1997,  1998,
+    1999,  2000,  2004,  2006,  2010,  2011,  2012,  2013,  2014,  2018,
+    2019,  2020,  2021,  2022,  2026,  2027,  2028,  2032,  2033,  2034,
+    2038,  2042,  2043,  2047,  2048,  2049,  2053,  2054,  2056,  2057,
+    2058,  2059,  2060,  2062,  2063,  2064,  2065,  2066,  2070,  2071,
+    2075,  2076,  2077,  2081,  2082,  2083,  2084,  2085,  2086,  2087,
+    2088,  2089,  2091,  2092,  2094,  2095,  2096,  2097,  2098,  2102,
+    2103,  2107,  2108,  2112,  2113,  2117,  2118,  2119,  2124,  2125,
+    2129,  2130,  2131,  2132,  2133,  2134,  2135,  2136,  2137,  2138,
+    2139,  2140,  2141,  2142,  2143,  2144,  2145,  2146,  2147,  2148,
+    2149,  2150,  2154,  2155,  2156,  2157,  2158,  2159,  2160,  2161,
+    2162,  2163,  2164,  2165,  2166,  2167,  2168,  2169,  2170,  2171,
+    2172,  2173,  2179,  2181,  2183,  2185,  2187,  2189,  2191,  2193,
+    2195,  2197,  2202,  2203,  2207,  2213,  2222,  2223,  2224,  2228,
+    2229,  2230,  2232,  2233,  2234,  2238,  2242,  2250,  2259,  2268,
+    2269,  2271,  2272,  2276,  2283,  2290,  2293,  2306,  2320,  2323,
+    2325,  2327,  2332,  2333,  2337,  2338,  2339,  2340,  2341,  2342,
+    2343,  2344,  2348,  2349,  2350,  2351,  2352,  2353,  2354,  2355,
+    2356,  2357,  2361,  2362,  2363,  2364,  2365,  2366,  2367,  2368,
+    2369,  2370,  2374,  2375,  2376,  2377,  2378,  2379,  2380,  2381,
+    2382,  2383,  2384,  2385,  2389,  2390,  2391,  2392,  2393,  2394,
+    2395,  2396,  2397,  2398,  2402,  2403,  2407,  2408,  2409,  2410,
+    2411,  2412,  2413,  2414,  2415,  2417,  2419,  2437,  2454,  2455,
+    2459,  2460,  2461,  2462,  2463,  2464,  2465,  2466,  2467,  2485,
+    2502,  2503,  2504,  2505,  2506,  2507,  2508,  2509,  2510,  2511,
+    2512,  2513,  2514,  2532,  2549,  2550,  2551,  2552,  2553,  2554,
+    2555,  2556,  2557,  2558,  2559,  2560,  2561,  2579,  2596,  2597,
+    2601,  2602,  2603,  2604,  2605,  2609,  2610,  2611,  2612,  2613,
+    2614,  2618,  2622,  2623,  2624,  2625,  2626,  2631,  2640,  2649,
+    2658,  2671,  2672,  2673,  2675,  2720,  2721,  2722,  2734,  2739,
+    2741,  2743,  2745,  2747,  2749,  2751,  2753,  2755,  2757,  2759,
+    2761,  2763,  2765,  2767,  2772,  2774,  2776,  2778,  2780,  2782,
+    2784,  2789,  2790,  2791,  2792,  2796,  2797,  2798,  2799,  2800,
+    2801,  2805,  2806,  2807,  2808,  2809,  2810,  2814,  2815,  2817,
+    2819,  2824,  2825,  2826,  2827,  2828,  2832,  2833,  2834,  2835,
+    2836,  2840,  2841,  2842,  2843,  2844,  2848,  2849,  2850,  2866,
+    2867,  2868,  2869,  2882,  2898,  2899,  2904,  2905,  2909,  2910,
+    2911,  2912,  2915,  2916,  2920,  2921,  2925,  2926,  2927,  2931,
+    2932,  2933,  2937,  2938,  2939,  2940,  2944,  2945,  2949,  2950,
+    2955,  2956,  2957,  2958,  2959,  2960,  2979,  2980,  2984,  2985,
+    2986,  2987,  2988,  2989,  2991,  2992,  2993,  2994,  2998,  2999,
+    3000,  3001,  3002,  3004,  3005,  3006,  3010,  3011,  3012,  3013,
+    3014,  3015,  3019,  3020,  3021,  3026,  3027,  3028,  3029,  3030,
+    3031,  3032,  3033,  3034,  3035,  3037,  3038,  3039,  3043,  3044,
+    3045,  3046,  3047,  3048,  3049,  3053,  3054,  3058,  3059,  3060,
+    3064,  3065,  3066,  3067,  3069,  3070,  3071,  3073,  3074,  3075,
+    3076,  3078,  3079,  3080,  3084,  3085,  3086,  3087,  3088,  3092,
+    3093,  3094,  3095,  3096,  3097,  3098,  3102,  3103,  3104,  3108,
+    3109,  3113,  3114,  3115,  3116,  3120,  3121,  3122,  3124,  3125,
+    3126,  3130,  3134,  3135,  3137,  3138,  3139,  3143,  3144,  3145,
+    3146,  3150,  3151,  3155,  3156,  3157,  3161,  3162,  3163,  3164,
+    3165,  3166,  3167,  3171,  3172,  3173,  3174,  3178,  3179,  3180,
+    3181,  3185,  3189,  3193,  3195,  3198,  3204,  3205,  3206,  3210,
+    3211,  3212,  3213,  3214,  3215,  3219,  3220,  3224,  3225,  3226,
+    3228,  3229,  3231,  3232,  3233,  3234,  3235,  3237,  3238,  3242,
+    3243,  3244,  3245,  3246,  3247,  3248,  3249,  3250,  3252,  3253,
+    3254,  3255,  3256,  3257,  3258,  3261,  3262,  3263,  3264,  3265,
+    3266,  3267,  3271,  3272,  3273,  3274,  3275,  3276,  3277,  3278,
+    3282,  3283,  3284,  3285,  3291,  3292,  3295,  3296,  3299,  3300,
+    3301,  3302,  3306,  3307,  3319,  3320,  3323,  3326,  3328,  3329,
+    3330,  3332,  3334,  3335,  3337,  3338,  3339,  3340,  3341,  3342,
+    3343,  3344,  3345,  3346,  3350,  3351,  3352,  3354,  3355,  3357,
+    3359,  3363,  3364,  3365,  3366,  3367,  3371,  3372,  3373,  3375,
+    3380,  3381,  3382,  3386,  3387,  3388,  3392,  3396,  3397,  3398,
+    3402,  3403,  3407,  3408,  3412,  3413,  3414,  3415,  3419,  3423,
+    3427,  3431
 };
 #endif
 
@@ -10143,800 +10143,925 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp)
 
   switch (yytype)
     {
-      case 136: /* type */
+      case 135: /* guess_type */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
 #line 10150 "grammar.ec"
         break;
+      case 136: /* type */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10155 "grammar.ec"
+        break;
+      case 137: /* base_strict_type */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10160 "grammar.ec"
+        break;
+      case 139: /* strict_type */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10165 "grammar.ec"
+        break;
       case 140: /* class_function_definition_start */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10155 "grammar.ec"
+#line 10170 "grammar.ec"
         break;
       case 141: /* constructor_function_definition_start */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10160 "grammar.ec"
+#line 10175 "grammar.ec"
         break;
       case 142: /* destructor_function_definition_start */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10165 "grammar.ec"
+#line 10180 "grammar.ec"
         break;
       case 143: /* virtual_class_function_definition_start */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10170 "grammar.ec"
+#line 10185 "grammar.ec"
         break;
       case 144: /* class_function_definition_start_error */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10175 "grammar.ec"
+#line 10190 "grammar.ec"
         break;
       case 145: /* virtual_class_function_definition_start_error */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10180 "grammar.ec"
+#line 10195 "grammar.ec"
         break;
       case 146: /* class_function_definition */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10185 "grammar.ec"
+#line 10200 "grammar.ec"
         break;
       case 147: /* class_function_definition_error */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10190 "grammar.ec"
+#line 10205 "grammar.ec"
         break;
       case 148: /* instance_class_function_definition_start */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10195 "grammar.ec"
+#line 10210 "grammar.ec"
         break;
       case 149: /* instance_class_function_definition_start_error */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10200 "grammar.ec"
+#line 10215 "grammar.ec"
         break;
       case 150: /* instance_class_function_definition */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10205 "grammar.ec"
+#line 10220 "grammar.ec"
         break;
       case 151: /* instance_class_function_definition_error */
-#line 224 "grammar.y"
+#line 225 "grammar.y"
         { FreeClassFunction((yyvaluep->classFunction)); };
-#line 10210 "grammar.ec"
+#line 10225 "grammar.ec"
         break;
       case 152: /* data_member_initialization */
-#line 222 "grammar.y"
+#line 223 "grammar.y"
         { FreeMemberInit((yyvaluep->memberInit)); };
-#line 10215 "grammar.ec"
+#line 10230 "grammar.ec"
         break;
       case 153: /* data_member_initialization_error */
-#line 222 "grammar.y"
+#line 223 "grammar.y"
         { FreeMemberInit((yyvaluep->memberInit)); };
-#line 10220 "grammar.ec"
+#line 10235 "grammar.ec"
         break;
       case 154: /* data_member_initialization_list */
-#line 244 "grammar.y"
+#line 246 "grammar.y"
         { FreeList((yyvaluep->list), FreeMemberInit); };
-#line 10225 "grammar.ec"
+#line 10240 "grammar.ec"
         break;
       case 155: /* data_member_initialization_list_error */
-#line 244 "grammar.y"
+#line 246 "grammar.y"
         { FreeList((yyvaluep->list), FreeMemberInit); };
-#line 10230 "grammar.ec"
+#line 10245 "grammar.ec"
         break;
       case 156: /* data_member_initialization_list_coloned */
-#line 244 "grammar.y"
+#line 246 "grammar.y"
         { FreeList((yyvaluep->list), FreeMemberInit); };
-#line 10235 "grammar.ec"
+#line 10250 "grammar.ec"
         break;
       case 157: /* members_initialization_list_coloned */
-#line 245 "grammar.y"
+#line 247 "grammar.y"
         { FreeList((yyvaluep->list), FreeMembersInit); };
-#line 10240 "grammar.ec"
+#line 10255 "grammar.ec"
         break;
       case 158: /* members_initialization_list */
-#line 245 "grammar.y"
+#line 247 "grammar.y"
         { FreeList((yyvaluep->list), FreeMembersInit); };
-#line 10245 "grammar.ec"
+#line 10260 "grammar.ec"
         break;
       case 159: /* members_initialization_list_error */
-#line 245 "grammar.y"
+#line 247 "grammar.y"
         { FreeList((yyvaluep->list), FreeMembersInit); };
-#line 10250 "grammar.ec"
+#line 10265 "grammar.ec"
         break;
       case 160: /* instantiation_named */
-#line 220 "grammar.y"
+#line 221 "grammar.y"
         { FreeInstance((yyvaluep->instance)); };
-#line 10255 "grammar.ec"
+#line 10270 "grammar.ec"
         break;
       case 161: /* instantiation_named_error */
-#line 220 "grammar.y"
+#line 221 "grammar.y"
         { FreeInstance((yyvaluep->instance)); };
-#line 10260 "grammar.ec"
+#line 10275 "grammar.ec"
         break;
       case 165: /* instantiation_unnamed */
-#line 220 "grammar.y"
+#line 221 "grammar.y"
         { FreeInstance((yyvaluep->instance)); };
-#line 10265 "grammar.ec"
+#line 10280 "grammar.ec"
         break;
       case 166: /* instantiation_unnamed_error */
-#line 220 "grammar.y"
+#line 221 "grammar.y"
         { FreeInstance((yyvaluep->instance)); };
-#line 10270 "grammar.ec"
+#line 10285 "grammar.ec"
         break;
       case 169: /* default_property */
-#line 222 "grammar.y"
+#line 223 "grammar.y"
         { FreeMemberInit((yyvaluep->memberInit)); };
-#line 10275 "grammar.ec"
+#line 10290 "grammar.ec"
         break;
       case 170: /* default_property_error */
-#line 222 "grammar.y"
+#line 223 "grammar.y"
         { FreeMemberInit((yyvaluep->memberInit)); };
-#line 10280 "grammar.ec"
+#line 10295 "grammar.ec"
         break;
       case 171: /* default_property_list */
-#line 244 "grammar.y"
+#line 246 "grammar.y"
         { FreeList((yyvaluep->list), FreeMemberInit); };
-#line 10285 "grammar.ec"
+#line 10300 "grammar.ec"
         break;
       case 172: /* default_property_list_error */
-#line 244 "grammar.y"
+#line 246 "grammar.y"
         { FreeList((yyvaluep->list), FreeMemberInit); };
-#line 10290 "grammar.ec"
+#line 10305 "grammar.ec"
         break;
       case 175: /* property */
-#line 231 "grammar.y"
+#line 232 "grammar.y"
         { FreeProperty((yyvaluep->prop)); };
-#line 10295 "grammar.ec"
+#line 10310 "grammar.ec"
         break;
       case 186: /* struct_declaration */
-#line 229 "grammar.y"
+#line 230 "grammar.y"
         { FreeClassDef((yyvaluep->classDef)); };
-#line 10300 "grammar.ec"
+#line 10315 "grammar.ec"
         break;
       case 187: /* struct_declaration_error */
-#line 229 "grammar.y"
+#line 230 "grammar.y"
         { FreeClassDef((yyvaluep->classDef)); };
-#line 10305 "grammar.ec"
+#line 10320 "grammar.ec"
         break;
       case 188: /* struct_declaration_list */
-#line 243 "grammar.y"
+#line 245 "grammar.y"
         { FreeList((yyvaluep->list), FreeClassDef); };
-#line 10310 "grammar.ec"
+#line 10325 "grammar.ec"
         break;
       case 189: /* struct_declaration_list_error */
-#line 243 "grammar.y"
+#line 245 "grammar.y"
         { FreeList((yyvaluep->list), FreeClassDef); };
-#line 10315 "grammar.ec"
+#line 10330 "grammar.ec"
+        break;
+      case 190: /* template_datatype */
+#line 251 "grammar.y"
+        { FreeTemplateDataType((yyvaluep->templateDatatype)); };
+#line 10335 "grammar.ec"
+        break;
+      case 191: /* template_type_argument */
+#line 250 "grammar.y"
+        { FreeTemplateArgument((yyvaluep->templateArgument)); };
+#line 10340 "grammar.ec"
+        break;
+      case 192: /* template_type_parameter */
+#line 249 "grammar.y"
+        { FreeTemplateParameter((yyvaluep->templateParameter)); };
+#line 10345 "grammar.ec"
+        break;
+      case 193: /* template_identifier_argument */
+#line 250 "grammar.y"
+        { FreeTemplateArgument((yyvaluep->templateArgument)); };
+#line 10350 "grammar.ec"
+        break;
+      case 194: /* template_identifier_parameter */
+#line 249 "grammar.y"
+        { FreeTemplateParameter((yyvaluep->templateParameter)); };
+#line 10355 "grammar.ec"
+        break;
+      case 195: /* template_expression_argument */
+#line 250 "grammar.y"
+        { FreeTemplateArgument((yyvaluep->templateArgument)); };
+#line 10360 "grammar.ec"
+        break;
+      case 196: /* template_expression_parameter */
+#line 249 "grammar.y"
+        { FreeTemplateParameter((yyvaluep->templateParameter)); };
+#line 10365 "grammar.ec"
+        break;
+      case 197: /* template_parameter */
+#line 249 "grammar.y"
+        { FreeTemplateParameter((yyvaluep->templateParameter)); };
+#line 10370 "grammar.ec"
+        break;
+      case 199: /* template_argument */
+#line 250 "grammar.y"
+        { FreeTemplateArgument((yyvaluep->templateArgument)); };
+#line 10375 "grammar.ec"
         break;
       case 203: /* class */
-#line 228 "grammar.y"
+#line 229 "grammar.y"
         { FreeClass((yyvaluep->_class)); };
-#line 10320 "grammar.ec"
+#line 10380 "grammar.ec"
         break;
       case 205: /* class_error */
-#line 228 "grammar.y"
+#line 229 "grammar.y"
         { FreeClass((yyvaluep->_class)); };
-#line 10325 "grammar.ec"
+#line 10385 "grammar.ec"
         break;
       case 206: /* identifier */
 #line 186 "grammar.y"
         { FreeIdentifier((yyvaluep->id)); };
-#line 10330 "grammar.ec"
+#line 10390 "grammar.ec"
         break;
       case 207: /* primary_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10335 "grammar.ec"
+#line 10395 "grammar.ec"
         break;
       case 211: /* primary_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10340 "grammar.ec"
+#line 10400 "grammar.ec"
         break;
       case 212: /* postfix_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10345 "grammar.ec"
+#line 10405 "grammar.ec"
         break;
       case 214: /* argument_expression_list */
-#line 233 "grammar.y"
+#line 234 "grammar.y"
         { FreeList((yyvaluep->list), FreeExpression); };
-#line 10350 "grammar.ec"
+#line 10410 "grammar.ec"
         break;
       case 215: /* argument_expression_list_error */
-#line 233 "grammar.y"
+#line 234 "grammar.y"
         { FreeList((yyvaluep->list), FreeExpression); };
-#line 10355 "grammar.ec"
+#line 10415 "grammar.ec"
         break;
       case 217: /* unary_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10360 "grammar.ec"
+#line 10420 "grammar.ec"
         break;
       case 220: /* cast_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10365 "grammar.ec"
+#line 10425 "grammar.ec"
         break;
       case 221: /* multiplicative_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10370 "grammar.ec"
+#line 10430 "grammar.ec"
         break;
       case 222: /* additive_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10375 "grammar.ec"
+#line 10435 "grammar.ec"
         break;
       case 223: /* shift_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10380 "grammar.ec"
+#line 10440 "grammar.ec"
         break;
       case 225: /* relational_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10385 "grammar.ec"
+#line 10445 "grammar.ec"
         break;
       case 226: /* equality_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10390 "grammar.ec"
+#line 10450 "grammar.ec"
         break;
       case 227: /* and_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10395 "grammar.ec"
+#line 10455 "grammar.ec"
         break;
       case 228: /* exclusive_or_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10400 "grammar.ec"
+#line 10460 "grammar.ec"
         break;
       case 229: /* inclusive_or_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10405 "grammar.ec"
+#line 10465 "grammar.ec"
         break;
       case 230: /* logical_and_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10410 "grammar.ec"
+#line 10470 "grammar.ec"
         break;
       case 231: /* logical_or_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10415 "grammar.ec"
+#line 10475 "grammar.ec"
         break;
       case 232: /* conditional_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10420 "grammar.ec"
+#line 10480 "grammar.ec"
         break;
       case 233: /* assignment_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10425 "grammar.ec"
+#line 10485 "grammar.ec"
         break;
       case 235: /* expression */
-#line 233 "grammar.y"
+#line 234 "grammar.y"
         { FreeList((yyvaluep->list), FreeExpression); };
-#line 10430 "grammar.ec"
+#line 10490 "grammar.ec"
         break;
       case 237: /* postfix_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10435 "grammar.ec"
+#line 10495 "grammar.ec"
         break;
       case 240: /* unary_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10440 "grammar.ec"
+#line 10500 "grammar.ec"
         break;
       case 242: /* cast_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10445 "grammar.ec"
+#line 10505 "grammar.ec"
         break;
       case 243: /* multiplicative_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10450 "grammar.ec"
+#line 10510 "grammar.ec"
         break;
       case 244: /* additive_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10455 "grammar.ec"
+#line 10515 "grammar.ec"
         break;
       case 245: /* shift_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10460 "grammar.ec"
+#line 10520 "grammar.ec"
         break;
       case 246: /* relational_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10465 "grammar.ec"
+#line 10525 "grammar.ec"
         break;
       case 247: /* equality_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10470 "grammar.ec"
+#line 10530 "grammar.ec"
         break;
       case 248: /* and_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10475 "grammar.ec"
+#line 10535 "grammar.ec"
         break;
       case 249: /* exclusive_or_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10480 "grammar.ec"
+#line 10540 "grammar.ec"
         break;
       case 250: /* inclusive_or_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10485 "grammar.ec"
+#line 10545 "grammar.ec"
         break;
       case 251: /* logical_and_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10490 "grammar.ec"
+#line 10550 "grammar.ec"
         break;
       case 252: /* logical_or_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10495 "grammar.ec"
+#line 10555 "grammar.ec"
         break;
       case 253: /* conditional_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10500 "grammar.ec"
+#line 10560 "grammar.ec"
         break;
       case 254: /* assignment_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10505 "grammar.ec"
+#line 10565 "grammar.ec"
         break;
       case 255: /* expression_error */
-#line 233 "grammar.y"
+#line 234 "grammar.y"
         { FreeList((yyvaluep->list), FreeExpression); };
-#line 10510 "grammar.ec"
+#line 10570 "grammar.ec"
         break;
       case 257: /* constant_expression */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10515 "grammar.ec"
+#line 10575 "grammar.ec"
         break;
       case 258: /* constant_expression_error */
 #line 188 "grammar.y"
         { FreeExpression((yyvaluep->exp)); };
-#line 10520 "grammar.ec"
+#line 10580 "grammar.ec"
         break;
       case 259: /* storage_class_specifier */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10525 "grammar.ec"
+#line 10585 "grammar.ec"
         break;
       case 260: /* external_storage_class_specifier */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10530 "grammar.ec"
+#line 10590 "grammar.ec"
         break;
       case 261: /* enumerator */
-#line 203 "grammar.y"
+#line 204 "grammar.y"
         { FreeEnumerator((yyvaluep->enumerator)); };
-#line 10535 "grammar.ec"
+#line 10595 "grammar.ec"
         break;
       case 262: /* enumerator_list */
-#line 234 "grammar.y"
+#line 235 "grammar.y"
         { FreeList((yyvaluep->list), FreeEnumerator); };
-#line 10540 "grammar.ec"
+#line 10600 "grammar.ec"
+        break;
+      case 264: /* enum_specifier_nocompound */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10605 "grammar.ec"
+        break;
+      case 265: /* enum_specifier_compound */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10610 "grammar.ec"
         break;
       case 266: /* enum_specifier_compound_error */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10545 "grammar.ec"
+#line 10615 "grammar.ec"
+        break;
+      case 268: /* enum_class */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10620 "grammar.ec"
+        break;
+      case 269: /* enum_class_error */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10625 "grammar.ec"
         break;
       case 270: /* class_specifier */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10550 "grammar.ec"
+#line 10630 "grammar.ec"
         break;
       case 271: /* class_specifier_error */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10555 "grammar.ec"
+#line 10635 "grammar.ec"
         break;
       case 272: /* ext_storage */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10560 "grammar.ec"
+#line 10640 "grammar.ec"
         break;
       case 273: /* type_qualifier */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10565 "grammar.ec"
+#line 10645 "grammar.ec"
         break;
       case 274: /* type_qualifier_list */
-#line 235 "grammar.y"
+#line 236 "grammar.y"
         { FreeList((yyvaluep->list), FreeSpecifier); };
-#line 10570 "grammar.ec"
+#line 10650 "grammar.ec"
         break;
       case 275: /* type_specifier */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10575 "grammar.ec"
+#line 10655 "grammar.ec"
+        break;
+      case 276: /* strict_type_specifier */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10660 "grammar.ec"
         break;
       case 277: /* struct_declarator */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10580 "grammar.ec"
+#line 10665 "grammar.ec"
         break;
       case 278: /* struct_declarator_list */
-#line 236 "grammar.y"
+#line 238 "grammar.y"
         { FreeList((yyvaluep->list), FreeDeclarator); };
-#line 10585 "grammar.ec"
+#line 10670 "grammar.ec"
+        break;
+      case 279: /* struct_entry */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10675 "grammar.ec"
         break;
       case 280: /* struct_or_union_specifier_compound */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10590 "grammar.ec"
+#line 10680 "grammar.ec"
         break;
       case 281: /* struct_or_union_specifier_compound_error */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10595 "grammar.ec"
+#line 10685 "grammar.ec"
         break;
       case 282: /* struct_or_union_specifier_nocompound */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10600 "grammar.ec"
+#line 10690 "grammar.ec"
+        break;
+      case 283: /* struct_decl */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10695 "grammar.ec"
+        break;
+      case 284: /* struct_head */
+#line 199 "grammar.y"
+        { FreeSpecifier((yyvaluep->specifier)); };
+#line 10700 "grammar.ec"
         break;
       case 285: /* struct_class */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10605 "grammar.ec"
+#line 10705 "grammar.ec"
         break;
       case 286: /* struct_class_error */
 #line 199 "grammar.y"
         { FreeSpecifier((yyvaluep->specifier)); };
-#line 10610 "grammar.ec"
+#line 10710 "grammar.ec"
         break;
       case 288: /* specifier_qualifier_list */
-#line 235 "grammar.y"
+#line 236 "grammar.y"
         { FreeList((yyvaluep->list), FreeSpecifier); };
-#line 10615 "grammar.ec"
+#line 10715 "grammar.ec"
+        break;
+      case 289: /* guess_specifier_qualifier_list */
+#line 236 "grammar.y"
+        { FreeList((yyvaluep->list), FreeSpecifier); };
+#line 10720 "grammar.ec"
         break;
       case 290: /* declaration_specifiers */
-#line 235 "grammar.y"
+#line 236 "grammar.y"
         { FreeList((yyvaluep->list), FreeSpecifier); };
-#line 10620 "grammar.ec"
+#line 10725 "grammar.ec"
+        break;
+      case 291: /* guess_declaration_specifiers */
+#line 236 "grammar.y"
+        { FreeList((yyvaluep->list), FreeSpecifier); };
+#line 10730 "grammar.ec"
+        break;
+      case 292: /* external_guess_declaration_specifiers */
+#line 236 "grammar.y"
+        { FreeList((yyvaluep->list), FreeSpecifier); };
+#line 10735 "grammar.ec"
+        break;
+      case 293: /* external_guess_declaration_specifiers_error */
+#line 236 "grammar.y"
+        { FreeList((yyvaluep->list), FreeSpecifier); };
+#line 10740 "grammar.ec"
         break;
       case 294: /* _inheritance_specifiers */
-#line 235 "grammar.y"
+#line 236 "grammar.y"
         { FreeList((yyvaluep->list), FreeSpecifier); };
-#line 10625 "grammar.ec"
+#line 10745 "grammar.ec"
         break;
       case 295: /* inheritance_specifiers */
-#line 235 "grammar.y"
+#line 236 "grammar.y"
         { FreeList((yyvaluep->list), FreeSpecifier); };
-#line 10630 "grammar.ec"
+#line 10750 "grammar.ec"
         break;
       case 299: /* identifier_list_error */
-#line 240 "grammar.y"
+#line 242 "grammar.y"
         { FreeList((yyvaluep->list), FreeTypeName); };
-#line 10635 "grammar.ec"
+#line 10755 "grammar.ec"
         break;
       case 300: /* identifier_list */
-#line 240 "grammar.y"
+#line 242 "grammar.y"
         { FreeList((yyvaluep->list), FreeTypeName); };
-#line 10640 "grammar.ec"
+#line 10760 "grammar.ec"
         break;
       case 301: /* direct_declarator_nofunction */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10645 "grammar.ec"
+#line 10765 "grammar.ec"
         break;
       case 302: /* direct_declarator_function_start */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10650 "grammar.ec"
+#line 10770 "grammar.ec"
         break;
       case 303: /* direct_declarator_function */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10655 "grammar.ec"
+#line 10775 "grammar.ec"
         break;
       case 304: /* direct_declarator_function_error */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10660 "grammar.ec"
+#line 10780 "grammar.ec"
         break;
       case 305: /* direct_declarator */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10665 "grammar.ec"
+#line 10785 "grammar.ec"
         break;
       case 306: /* ext_decl */
-#line 230 "grammar.y"
+#line 231 "grammar.y"
         { delete (yyvaluep->string); };
-#line 10670 "grammar.ec"
+#line 10790 "grammar.ec"
         break;
       case 308: /* direct_abstract_declarator */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10675 "grammar.ec"
+#line 10795 "grammar.ec"
         break;
       case 309: /* direct_abstract_declarator_noarray */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10680 "grammar.ec"
+#line 10800 "grammar.ec"
         break;
       case 310: /* pointer */
 #line 187 "grammar.y"
         { FreePointer((yyvaluep->pointer)); };
-#line 10685 "grammar.ec"
+#line 10805 "grammar.ec"
         break;
       case 311: /* abstract_declarator */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10690 "grammar.ec"
+#line 10810 "grammar.ec"
         break;
       case 312: /* abstract_declarator_noarray */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10695 "grammar.ec"
+#line 10815 "grammar.ec"
         break;
       case 313: /* declarator */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10700 "grammar.ec"
+#line 10820 "grammar.ec"
         break;
       case 314: /* declarator_function */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10705 "grammar.ec"
+#line 10825 "grammar.ec"
         break;
       case 315: /* declarator_function_error */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10710 "grammar.ec"
+#line 10830 "grammar.ec"
         break;
       case 316: /* declarator_nofunction */
-#line 204 "grammar.y"
+#line 205 "grammar.y"
         { FreeDeclarator((yyvaluep->declarator)); };
-#line 10715 "grammar.ec"
+#line 10835 "grammar.ec"
         break;
       case 317: /* initializer */
-#line 209 "grammar.y"
+#line 210 "grammar.y"
         { FreeInitializer((yyvaluep->initializer)); };
-#line 10720 "grammar.ec"
+#line 10840 "grammar.ec"
         break;
       case 318: /* initializer_error */
-#line 209 "grammar.y"
+#line 210 "grammar.y"
         { FreeInitializer((yyvaluep->initializer)); };
-#line 10725 "grammar.ec"
+#line 10845 "grammar.ec"
         break;
       case 319: /* initializer_condition */
-#line 209 "grammar.y"
+#line 210 "grammar.y"
         { FreeInitializer((yyvaluep->initializer)); };
-#line 10730 "grammar.ec"
+#line 10850 "grammar.ec"
         break;
       case 320: /* initializer_condition_error */
-#line 209 "grammar.y"
+#line 210 "grammar.y"
         { FreeInitializer((yyvaluep->initializer)); };
-#line 10735 "grammar.ec"
+#line 10855 "grammar.ec"
         break;
       case 321: /* initializer_list */
-#line 238 "grammar.y"
+#line 240 "grammar.y"
         { FreeList((yyvaluep->list), FreeInitializer); };
-#line 10740 "grammar.ec"
+#line 10860 "grammar.ec"
         break;
       case 322: /* init_declarator */
-#line 210 "grammar.y"
+#line 211 "grammar.y"
         { FreeInitDeclarator((yyvaluep->initDeclarator)); };
-#line 10745 "grammar.ec"
+#line 10865 "grammar.ec"
         break;
       case 323: /* init_declarator_error */
-#line 210 "grammar.y"
+#line 211 "grammar.y"
         { FreeInitDeclarator((yyvaluep->initDeclarator)); };
-#line 10750 "grammar.ec"
+#line 10870 "grammar.ec"
         break;
       case 324: /* init_declarator_list */
-#line 239 "grammar.y"
+#line 241 "grammar.y"
         { FreeList((yyvaluep->list), FreeInitDeclarator); };
-#line 10755 "grammar.ec"
+#line 10875 "grammar.ec"
         break;
       case 325: /* init_declarator_list_error */
-#line 239 "grammar.y"
+#line 241 "grammar.y"
         { FreeList((yyvaluep->list), FreeInitDeclarator); };
-#line 10760 "grammar.ec"
+#line 10880 "grammar.ec"
         break;
       case 326: /* type_name */
-#line 211 "grammar.y"
+#line 212 "grammar.y"
         { FreeTypeName((yyvaluep->typeName)); };
-#line 10765 "grammar.ec"
+#line 10885 "grammar.ec"
         break;
       case 327: /* guess_type_name */
-#line 211 "grammar.y"
+#line 212 "grammar.y"
         { FreeTypeName((yyvaluep->typeName)); };
-#line 10770 "grammar.ec"
+#line 10890 "grammar.ec"
         break;
       case 328: /* parameter_declaration */
-#line 211 "grammar.y"
+#line 212 "grammar.y"
         { FreeTypeName((yyvaluep->typeName)); };
-#line 10775 "grammar.ec"
+#line 10895 "grammar.ec"
         break;
       case 329: /* parameter_declaration_error */
-#line 211 "grammar.y"
+#line 212 "grammar.y"
         { FreeTypeName((yyvaluep->typeName)); };
-#line 10780 "grammar.ec"
+#line 10900 "grammar.ec"
         break;
       case 330: /* parameter_list */
-#line 240 "grammar.y"
+#line 242 "grammar.y"
         { FreeList((yyvaluep->list), FreeTypeName); };
-#line 10785 "grammar.ec"
+#line 10905 "grammar.ec"
         break;
       case 331: /* parameter_list_error */
-#line 240 "grammar.y"
+#line 242 "grammar.y"
         { FreeList((yyvaluep->list), FreeTypeName); };
-#line 10790 "grammar.ec"
+#line 10910 "grammar.ec"
         break;
       case 332: /* parameter_type_list */
-#line 240 "grammar.y"
+#line 242 "grammar.y"
         { FreeList((yyvaluep->list), FreeTypeName); };
-#line 10795 "grammar.ec"
+#line 10915 "grammar.ec"
         break;
       case 333: /* parameter_type_list_error */
-#line 240 "grammar.y"
+#line 242 "grammar.y"
         { FreeList((yyvaluep->list), FreeTypeName); };
-#line 10800 "grammar.ec"
+#line 10920 "grammar.ec"
         break;
       case 334: /* statement */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10805 "grammar.ec"
+#line 10925 "grammar.ec"
         break;
       case 335: /* statement_error */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10810 "grammar.ec"
+#line 10930 "grammar.ec"
         break;
       case 339: /* labeled_statement */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10815 "grammar.ec"
+#line 10935 "grammar.ec"
         break;
       case 340: /* labeled_statement_error */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10820 "grammar.ec"
+#line 10940 "grammar.ec"
         break;
       case 341: /* declaration_mode */
-#line 246 "grammar.y"
+#line 252 "grammar.y"
         { };
-#line 10825 "grammar.ec"
+#line 10945 "grammar.ec"
         break;
       case 343: /* declaration */
-#line 216 "grammar.y"
+#line 217 "grammar.y"
         { FreeDeclaration((yyvaluep->declaration)); };
-#line 10830 "grammar.ec"
+#line 10950 "grammar.ec"
         break;
       case 347: /* declaration_list */
-#line 237 "grammar.y"
+#line 239 "grammar.y"
         { FreeList((yyvaluep->list), FreeDeclaration); };
-#line 10835 "grammar.ec"
+#line 10955 "grammar.ec"
         break;
       case 348: /* declaration_list_error */
-#line 237 "grammar.y"
+#line 239 "grammar.y"
         { FreeList((yyvaluep->list), FreeDeclaration); };
-#line 10840 "grammar.ec"
+#line 10960 "grammar.ec"
         break;
       case 349: /* statement_list */
-#line 241 "grammar.y"
+#line 243 "grammar.y"
         { FreeList((yyvaluep->list), FreeStatement); };
-#line 10845 "grammar.ec"
+#line 10965 "grammar.ec"
         break;
       case 350: /* statement_list_error */
-#line 241 "grammar.y"
+#line 243 "grammar.y"
         { FreeList((yyvaluep->list), FreeStatement); };
-#line 10850 "grammar.ec"
+#line 10970 "grammar.ec"
         break;
       case 351: /* compound_inside */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10855 "grammar.ec"
+#line 10975 "grammar.ec"
         break;
       case 352: /* compound_inside_error */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10860 "grammar.ec"
+#line 10980 "grammar.ec"
+        break;
+      case 353: /* compound_start */
+#line 248 "grammar.y"
+        { PopContext((yyvaluep->context)); FreeContext((yyvaluep->context)); delete (yyvaluep->context); };
+#line 10985 "grammar.ec"
         break;
       case 354: /* compound_statement */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10865 "grammar.ec"
+#line 10990 "grammar.ec"
         break;
       case 355: /* compound_statement_error */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10870 "grammar.ec"
+#line 10995 "grammar.ec"
         break;
       case 356: /* expression_statement */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10875 "grammar.ec"
+#line 11000 "grammar.ec"
         break;
       case 357: /* selection_statement */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10880 "grammar.ec"
+#line 11005 "grammar.ec"
         break;
       case 358: /* selection_statement_error */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10885 "grammar.ec"
+#line 11010 "grammar.ec"
         break;
       case 359: /* iteration_statement */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10890 "grammar.ec"
+#line 11015 "grammar.ec"
         break;
       case 360: /* iteration_statement_error */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10895 "grammar.ec"
+#line 11020 "grammar.ec"
         break;
       case 361: /* jump_statement */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10900 "grammar.ec"
+#line 11025 "grammar.ec"
         break;
       case 362: /* jump_statement_error */
-#line 212 "grammar.y"
+#line 213 "grammar.y"
         { FreeStatement((yyvaluep->stmt)); };
-#line 10905 "grammar.ec"
+#line 11030 "grammar.ec"
         break;
       case 363: /* function_definition */
-#line 217 "grammar.y"
+#line 218 "grammar.y"
         { FreeFunction((yyvaluep->function)); };
-#line 10910 "grammar.ec"
+#line 11035 "grammar.ec"
         break;
       case 364: /* function_definition_error */
-#line 217 "grammar.y"
+#line 218 "grammar.y"
         { FreeFunction((yyvaluep->function)); };
-#line 10915 "grammar.ec"
+#line 11040 "grammar.ec"
         break;
       case 365: /* string_literal */
-#line 230 "grammar.y"
+#line 231 "grammar.y"
         { delete (yyvaluep->string); };
-#line 10920 "grammar.ec"
+#line 11045 "grammar.ec"
         break;
       case 366: /* external_declaration */
-#line 218 "grammar.y"
+#line 219 "grammar.y"
         { FreeExternal((yyvaluep->external)); };
-#line 10925 "grammar.ec"
+#line 11050 "grammar.ec"
         break;
       case 367: /* external_declaration_error */
-#line 218 "grammar.y"
+#line 219 "grammar.y"
         { FreeExternal((yyvaluep->external)); };
-#line 10930 "grammar.ec"
+#line 11055 "grammar.ec"
         break;
       case 368: /* translation_unit_error */
-#line 242 "grammar.y"
+#line 244 "grammar.y"
         { if((yyvaluep->list) != ast) FreeList((yyvaluep->list), FreeExternal); };
-#line 10935 "grammar.ec"
+#line 11060 "grammar.ec"
         break;
       case 369: /* translation_unit */
-#line 242 "grammar.y"
+#line 244 "grammar.y"
         { if((yyvaluep->list) != ast) FreeList((yyvaluep->list), FreeExternal); };
-#line 10940 "grammar.ec"
+#line 11065 "grammar.ec"
         break;
 
       default:
@@ -11257,7 +11382,7 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 255 "grammar.y"
+#line 260 "grammar.y"
     {
       // if($1._class && !$1._class.name)
       if((yyvsp[-1].id)._class)
@@ -11288,7 +11413,7 @@ yyreduce:
     break;
 
   case 3:
-#line 283 "grammar.y"
+#line 288 "grammar.y"
     {
    #ifdef PRECOMPILER
       // if($1._class && !$1._class.name)
@@ -11321,12 +11446,12 @@ yyreduce:
     break;
 
   case 4:
-#line 340 "grammar.y"
+#line 345 "grammar.y"
     { (yyval.specifier) = (yyvsp[0].specifier); ;}
     break;
 
   case 5:
-#line 342 "grammar.y"
+#line 347 "grammar.y"
     {
    #ifdef PRECOMPILER
       // if($1._class && !$1._class.name)
@@ -11363,22 +11488,22 @@ yyreduce:
     break;
 
   case 6:
-#line 441 "grammar.y"
+#line 446 "grammar.y"
     { (yyval.specifier) = MkSpecifierName(yytext); ;}
     break;
 
   case 7:
-#line 445 "grammar.y"
+#line 450 "grammar.y"
     { (yyval.string) = CopyString(yytext); ;}
     break;
 
   case 9:
-#line 449 "grammar.y"
+#line 454 "grammar.y"
     { (yyval.specifier) = (yyvsp[-3].specifier); SetClassTemplateArgs((yyval.specifier), (yyvsp[-1].list)); (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 10:
-#line 451 "grammar.y"
+#line 456 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[-3].specifier);
       SetClassTemplateArgs((yyval.specifier), (yyvsp[-1].list));
@@ -11392,162 +11517,162 @@ yyreduce:
     break;
 
   case 11:
-#line 500 "grammar.y"
+#line 505 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[-1].list), null, (yyvsp[0].declarator), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 12:
-#line 502 "grammar.y"
+#line 507 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[0].declarator), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 13:
-#line 507 "grammar.y"
+#line 512 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, null, null); (yyval.classFunction).isConstructor = true; (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; FreeList((yyvsp[-2].list), FreeSpecifier); ;}
     break;
 
   case 14:
-#line 512 "grammar.y"
+#line 517 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, null, null); (yyval.classFunction).isDestructor = true; (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; FreeList((yyvsp[-2].list), FreeSpecifier) ;}
     break;
 
   case 15:
-#line 517 "grammar.y"
+#line 522 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[-1].list), null, (yyvsp[0].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 16:
-#line 519 "grammar.y"
+#line 524 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[0].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 17:
-#line 524 "grammar.y"
+#line 529 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[-1].list), null, (yyvsp[0].declarator), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 18:
-#line 526 "grammar.y"
+#line 531 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[0].declarator), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 19:
-#line 531 "grammar.y"
+#line 536 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[-1].list), null, (yyvsp[0].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 20:
-#line 533 "grammar.y"
+#line 538 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[0].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 21:
-#line 538 "grammar.y"
+#line 543 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 22:
-#line 540 "grammar.y"
+#line 545 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 23:
-#line 542 "grammar.y"
+#line 547 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 24:
-#line 544 "grammar.y"
+#line 549 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 25:
-#line 546 "grammar.y"
+#line 551 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 26:
-#line 550 "grammar.y"
+#line 555 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 27:
-#line 555 "grammar.y"
+#line 560 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end = (yyvsp[0].stmt).loc.end; ;}
     break;
 
   case 28:
-#line 557 "grammar.y"
+#line 562 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[0].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 29:
-#line 559 "grammar.y"
+#line 564 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end = (yyvsp[0].stmt).loc.end; ;}
     break;
 
   case 30:
-#line 561 "grammar.y"
+#line 566 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[0].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 31:
-#line 563 "grammar.y"
+#line 568 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 32:
-#line 569 "grammar.y"
+#line 574 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[-1].list), null, (yyvsp[0].declarator), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 33:
-#line 571 "grammar.y"
+#line 576 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[-1].list), null, MkDeclaratorFunction((yyvsp[0].declarator), null), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 34:
-#line 576 "grammar.y"
+#line 581 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[-1].list), null, (yyvsp[0].declarator), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).id = ++globalContext.nextID; ;}
     break;
 
   case 35:
-#line 581 "grammar.y"
+#line 586 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 36:
-#line 586 "grammar.y"
+#line 591 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[-1].classFunction), (yyvsp[0].stmt)); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end = (yyvsp[0].stmt).loc.end; (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 37:
-#line 588 "grammar.y"
+#line 593 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[0].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 38:
-#line 590 "grammar.y"
+#line 595 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[0].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 39:
-#line 594 "grammar.y"
+#line 599 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[-2].exp), (yyvsp[0].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[-1]).end;;}
     break;
 
   case 40:
-#line 595 "grammar.y"
+#line 600 "grammar.y"
     { (yyval.memberInit) = MkMemberInit(null, (yyvsp[0].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc);;}
     break;
 
   case 41:
-#line 599 "grammar.y"
+#line 604 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[-2].exp), (yyvsp[0].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[-1]).end;;}
     break;
 
   case 42:
-#line 601 "grammar.y"
+#line 606 "grammar.y"
     { 
          (yyval.memberInit) = MkMemberInitExp((yyvsp[-2].exp), MkInitializerAssignment(MkExpDummy()));
          (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yyval.memberInit).initializer.loc.end = (yylsp[-1]).end; 
@@ -11561,42 +11686,42 @@ yyreduce:
     break;
 
   case 43:
-#line 611 "grammar.y"
+#line 616 "grammar.y"
     { (yyval.memberInit) = MkMemberInit(null, (yyvsp[0].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc);;}
     break;
 
   case 44:
-#line 615 "grammar.y"
+#line 620 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 45:
-#line 617 "grammar.y"
+#line 622 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 46:
-#line 619 "grammar.y"
+#line 624 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 47:
-#line 623 "grammar.y"
+#line 628 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 48:
-#line 625 "grammar.y"
+#line 630 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 49:
-#line 627 "grammar.y"
+#line 632 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 50:
-#line 630 "grammar.y"
+#line 635 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[-1]).end; 
          { 
             Initializer dummy = MkInitializerAssignment(MkExpDummy()); 
@@ -11609,7 +11734,7 @@ yyreduce:
     break;
 
   case 51:
-#line 641 "grammar.y"
+#line 646 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[-1]).end; 
          { 
             Initializer dummy = MkInitializerAssignment(MkExpDummy()); 
@@ -11622,7 +11747,7 @@ yyreduce:
     break;
 
   case 52:
-#line 651 "grammar.y"
+#line 656 "grammar.y"
     {
          Initializer dummy = MkInitializerAssignment(MkExpDummy());
          MemberInit memberInit = MkMemberInit(null, dummy); 
@@ -11641,852 +11766,852 @@ yyreduce:
     break;
 
   case 53:
-#line 670 "grammar.y"
+#line 675 "grammar.y"
     { if((yyvsp[-1].list)->last) ((MemberInit)(yyvsp[-1].list)->last).loc.end = (yylsp[0]).end; ;}
     break;
 
   case 54:
-#line 672 "grammar.y"
+#line 677 "grammar.y"
     { if((yyvsp[-1].list)->last) ((MemberInit)(yyvsp[-1].list)->last).loc.end = (yylsp[0]).end; ;}
     break;
 
   case 55:
-#line 676 "grammar.y"
+#line 681 "grammar.y"
     { MembersInit members = MkMembersInitList((yyvsp[0].list)); (yyval.list) = MkList(); ListAdd((yyval.list), members); members.loc = (yylsp[0]); ;}
     break;
 
   case 56:
-#line 677 "grammar.y"
+#line 682 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitMethod((yyvsp[0].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 57:
-#line 678 "grammar.y"
+#line 683 "grammar.y"
     { MembersInit members = MkMembersInitList((yyvsp[0].list)); ListAdd((yyval.list), members);  members.loc = (yylsp[0]);  ;}
     break;
 
   case 58:
-#line 679 "grammar.y"
+#line 684 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[0].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 59:
-#line 680 "grammar.y"
+#line 685 "grammar.y"
     { MembersInit members = MkMembersInitList((yyvsp[0].list)); ListAdd((yyval.list), members); members.loc = (yylsp[0]);  ;}
     break;
 
   case 60:
-#line 681 "grammar.y"
+#line 686 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[0].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 61:
-#line 682 "grammar.y"
+#line 687 "grammar.y"
     { MembersInit members = MkMembersInitList(MkList()); (yyval.list) = MkList(); ListAdd((yyval.list), members); members.loc = (yylsp[0]);  ;}
     break;
 
   case 63:
-#line 684 "grammar.y"
+#line 689 "grammar.y"
     { MembersInit members = MkMembersInitList(MkList()); ListAdd((yyval.list), members); members.loc = (yylsp[0]);  ;}
     break;
 
   case 65:
-#line 689 "grammar.y"
+#line 694 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitList((yyvsp[0].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 66:
-#line 690 "grammar.y"
+#line 695 "grammar.y"
     { ListAdd((yyvsp[-1].list), MkMembersInitList((yyvsp[0].list)));   ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 67:
-#line 691 "grammar.y"
+#line 696 "grammar.y"
     { ListAdd((yyvsp[-1].list), MkMembersInitList((yyvsp[0].list)));   ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 68:
-#line 695 "grammar.y"
+#line 700 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitMethod((yyvsp[0].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 69:
-#line 696 "grammar.y"
+#line 701 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[0].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 70:
-#line 697 "grammar.y"
+#line 702 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[0].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 71:
-#line 698 "grammar.y"
+#line 703 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[0].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 72:
-#line 699 "grammar.y"
+#line 704 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitList((yyvsp[0].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 73:
-#line 700 "grammar.y"
+#line 705 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitList((yyvsp[0].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 74:
-#line 701 "grammar.y"
+#line 706 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitList((yyvsp[-1].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[0]); ;}
     break;
 
   case 75:
-#line 706 "grammar.y"
+#line 711 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[0]).start; ;}
     break;
 
   case 76:
-#line 708 "grammar.y"
+#line 713 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[-1]).start; ;}
     break;
 
   case 77:
-#line 713 "grammar.y"
+#line 718 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-3].list), MkExpIdentifier((yyvsp[-2].id)), (yyvsp[0].list)); (yyval.instance).exp.loc = (yylsp[-2]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-2]); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 78:
-#line 715 "grammar.y"
+#line 720 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-4].list), MkExpIdentifier((yyvsp[-3].id)), (yyvsp[-1].list)); (yyval.instance).exp.loc = (yylsp[-3]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-3]); (yyval.instance).insideLoc.start = (yylsp[-2]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 79:
-#line 717 "grammar.y"
+#line 722 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-3].list), MkExpIdentifier((yyvsp[-2].id)), (yyvsp[0].list)); (yyval.instance).exp.loc = (yylsp[-2]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-2]); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 80:
-#line 719 "grammar.y"
+#line 724 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-2].list), MkExpIdentifier((yyvsp[-1].id)), null); (yyval.instance).exp.loc = (yylsp[-1]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-1]); (yyval.instance).insideLoc.start = (yylsp[0]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 81:
-#line 721 "grammar.y"
+#line 726 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-3].list), MkExpIdentifier((yyvsp[-2].id)), null);(yyval.instance).exp.loc = (yylsp[-2]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-2]); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 82:
-#line 751 "grammar.y"
+#line 756 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[0]).start; ;}
     break;
 
   case 83:
-#line 753 "grammar.y"
+#line 758 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[-1]).start; ;}
     break;
 
   case 84:
-#line 758 "grammar.y"
+#line 763 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-3].list), MkExpIdentifier((yyvsp[-2].id)), (yyvsp[0].list));(yyval.instance).exp.loc = (yylsp[-2]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-2]); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 85:
-#line 760 "grammar.y"
+#line 765 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-4].list), MkExpIdentifier((yyvsp[-3].id)), (yyvsp[-1].list)); (yyval.instance).exp.loc = (yylsp[-3]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-3]); (yyval.instance).insideLoc.start = (yylsp[-2]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 86:
-#line 762 "grammar.y"
+#line 767 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-3].list), MkExpIdentifier((yyvsp[-2].id)), (yyvsp[0].list));(yyval.instance).exp.loc = (yylsp[-2]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-2]); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 87:
-#line 764 "grammar.y"
+#line 769 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-2].list), MkExpIdentifier((yyvsp[-1].id)), null);(yyval.instance).exp.loc = (yylsp[-1]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-1]); (yyval.instance).insideLoc.start = (yylsp[0]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 88:
-#line 766 "grammar.y"
+#line 771 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-3].list), MkExpIdentifier((yyvsp[-2].id)), null);(yyval.instance).exp.loc = (yylsp[-2]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-2]); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 89:
-#line 795 "grammar.y"
+#line 800 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-4].list), MkExpIdentifier((yyvsp[-3].id)), (yyvsp[-1].list)); (yyval.instance).exp.loc = (yylsp[-3]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-3]); (yyval.instance).insideLoc.start = (yylsp[-2]).end; (yyval.instance).insideLoc.end = (yylsp[0]).start;;}
     break;
 
   case 90:
-#line 797 "grammar.y"
+#line 802 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-4].list), MkExpIdentifier((yyvsp[-3].id)), (yyvsp[-1].list)); (yyval.instance).exp.loc = (yylsp[-3]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-3]); (yyval.instance).insideLoc.start = (yylsp[-2]).end; (yyval.instance).insideLoc.end = (yylsp[0]).start;;}
     break;
 
   case 91:
-#line 799 "grammar.y"
+#line 804 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[-3].list), MkExpIdentifier((yyvsp[-2].id)), MkList());  (yyval.instance).exp.loc = (yylsp[-2]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[-2]); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).start;;}
     break;
 
   case 92:
-#line 804 "grammar.y"
+#line 809 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[0]).start; ;}
     break;
 
   case 93:
-#line 806 "grammar.y"
+#line 811 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[-1]).start; ;}
     break;
 
   case 94:
-#line 811 "grammar.y"
+#line 816 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[-2].specifier), null, (yyvsp[0].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 95:
-#line 813 "grammar.y"
+#line 818 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[-2]); 
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[-2].id).string), null, (yyvsp[0].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; FreeIdentifier((yyvsp[-2].id)); ;}
     break;
 
   case 96:
-#line 817 "grammar.y"
+#line 822 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[-2].specifier), null, (yyvsp[0].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 97:
-#line 819 "grammar.y"
+#line 824 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[-1].specifier), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[0]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 98:
-#line 821 "grammar.y"
+#line 826 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[-3].specifier), null, (yyvsp[-1].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-2]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 99:
-#line 823 "grammar.y"
+#line 828 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[-2].specifier), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++;  ;}
     break;
 
   case 100:
-#line 828 "grammar.y"
+#line 833 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[-2]); 
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[-2].id).string), null, (yyvsp[0].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[-2].id)); ;}
     break;
 
   case 101:
-#line 831 "grammar.y"
+#line 836 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[-1]); 
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[-1].id).string), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[0]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[-1].id)); ;}
     break;
 
   case 102:
-#line 834 "grammar.y"
+#line 839 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[-3]); 
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[-3].id).string), null, (yyvsp[-1].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-2]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[-3].id)); ;}
     break;
 
   case 103:
-#line 837 "grammar.y"
+#line 842 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[-2]); 
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[-2].id).string), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[-2].id)); ;}
     break;
 
   case 104:
-#line 902 "grammar.y"
+#line 907 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[0]).start; ;}
     break;
 
   case 105:
-#line 904 "grammar.y"
+#line 909 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[-1]).start; ;}
     break;
 
   case 106:
-#line 909 "grammar.y"
+#line 914 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, (yyvsp[0].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 107:
-#line 911 "grammar.y"
+#line 916 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, (yyvsp[-1].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-2]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 108:
-#line 913 "grammar.y"
+#line 918 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[-1]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++;  ;}
     break;
 
   case 109:
-#line 915 "grammar.y"
+#line 920 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[0]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 110:
-#line 917 "grammar.y"
+#line 922 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, (yyvsp[0].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[-1]).end; (yyval.instance).insideLoc.end = (yylsp[0]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 111:
-#line 947 "grammar.y"
+#line 952 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[-2].exp), (yyvsp[0].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); ;}
     break;
 
   case 112:
-#line 951 "grammar.y"
+#line 956 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[-2].exp), (yyvsp[0].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[-1]).end; ;}
     break;
 
   case 113:
-#line 952 "grammar.y"
+#line 957 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[-2].exp), MkInitializerAssignment(MkExpDummy())); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[-1]).end; (yyval.memberInit).initializer.loc.end = (yylsp[-1]).end; ;}
     break;
 
   case 114:
-#line 953 "grammar.y"
+#line 958 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[-1].exp), null); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); ;}
     break;
 
   case 115:
-#line 957 "grammar.y"
+#line 962 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].memberInit)); ((MemberInit)(yyval.list)->last).loc = (yyloc); ;}
     break;
 
   case 116:
-#line 958 "grammar.y"
+#line 963 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 117:
-#line 959 "grammar.y"
+#line 964 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 118:
-#line 963 "grammar.y"
+#line 968 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].memberInit)); ((MemberInit)(yyval.list)->last).loc = (yyloc); ;}
     break;
 
   case 119:
-#line 964 "grammar.y"
+#line 969 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 120:
-#line 965 "grammar.y"
+#line 970 "grammar.y"
     { ((MemberInit)(yyvsp[-2].list)->last).loc.end = (yylsp[0]).start; ListAdd((yyvsp[-2].list), (yyvsp[0].memberInit)); ;}
     break;
 
   case 122:
-#line 971 "grammar.y"
+#line 976 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-2].list), null, (yyvsp[-1].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 123:
-#line 974 "grammar.y"
+#line 979 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-3].list), (yyvsp[-2].declarator), (yyvsp[-1].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 124:
-#line 977 "grammar.y"
+#line 982 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-1].list), null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 125:
-#line 980 "grammar.y"
+#line 985 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-2].list), (yyvsp[-1].declarator), null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 126:
-#line 983 "grammar.y"
+#line 988 "grammar.y"
     { (yyval.prop) = MkProperty(null, null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 128:
-#line 989 "grammar.y"
+#line 994 "grammar.y"
     { (yyvsp[-2].prop).setStmt = (yyvsp[0].stmt); ;}
     break;
 
   case 129:
-#line 991 "grammar.y"
+#line 996 "grammar.y"
     { (yyvsp[-2].prop).getStmt = (yyvsp[0].stmt); ;}
     break;
 
   case 130:
-#line 993 "grammar.y"
+#line 998 "grammar.y"
     { (yyvsp[-2].prop).issetStmt = (yyvsp[0].stmt); ;}
     break;
 
   case 131:
-#line 995 "grammar.y"
+#line 1000 "grammar.y"
     { (yyvsp[-1].prop).isWatchable = true; ;}
     break;
 
   case 132:
-#line 997 "grammar.y"
+#line 1002 "grammar.y"
     { (yyvsp[-2].prop).category = (yyvsp[0].string); ;}
     break;
 
   case 133:
-#line 1001 "grammar.y"
+#line 1006 "grammar.y"
     { (yyvsp[-1].prop).loc.end = (yylsp[0]).end; ;}
     break;
 
   case 134:
-#line 1006 "grammar.y"
+#line 1011 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-2].list), null, (yyvsp[-1].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 135:
-#line 1009 "grammar.y"
+#line 1014 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-3].list), (yyvsp[-2].declarator), (yyvsp[-1].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 136:
-#line 1012 "grammar.y"
+#line 1017 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-1].list), null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 137:
-#line 1015 "grammar.y"
+#line 1020 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[-2].list), (yyvsp[-1].declarator), null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 138:
-#line 1018 "grammar.y"
+#line 1023 "grammar.y"
     { (yyval.prop) = MkProperty(null, null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 140:
-#line 1024 "grammar.y"
+#line 1029 "grammar.y"
     { (yyvsp[-2].prop).setStmt = (yyvsp[0].stmt); ;}
     break;
 
   case 141:
-#line 1026 "grammar.y"
+#line 1031 "grammar.y"
     { (yyvsp[-2].prop).getStmt = (yyvsp[0].stmt); ;}
     break;
 
   case 142:
-#line 1030 "grammar.y"
+#line 1035 "grammar.y"
     { (yyvsp[-1].prop).loc.end = (yylsp[0]).end; ;}
     break;
 
   case 143:
-#line 1035 "grammar.y"
+#line 1040 "grammar.y"
     { (yyval.list) = MkListOne((yyvsp[0].id)); ;}
     break;
 
   case 144:
-#line 1037 "grammar.y"
+#line 1042 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].id)); ;}
     break;
 
   case 145:
-#line 1042 "grammar.y"
+#line 1047 "grammar.y"
     { (yyval.propertyWatch) = MkPropertyWatch((yyvsp[-1].list), (yyvsp[0].stmt)); ;}
     break;
 
   case 146:
-#line 1044 "grammar.y"
+#line 1049 "grammar.y"
     { (yyval.propertyWatch) = MkDeleteWatch((yyvsp[0].stmt)); ;}
     break;
 
   case 147:
-#line 1049 "grammar.y"
+#line 1054 "grammar.y"
     { (yyval.list) = MkListOne((yyvsp[0].propertyWatch)); ;}
     break;
 
   case 148:
-#line 1051 "grammar.y"
+#line 1056 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].propertyWatch)); ;}
     break;
 
   case 149:
-#line 1056 "grammar.y"
+#line 1061 "grammar.y"
     { (yyval.propertyWatch) = MkPropertyWatch((yyvsp[-2].list), (yyvsp[0].stmt)); ;}
     break;
 
   case 150:
-#line 1061 "grammar.y"
+#line 1066 "grammar.y"
     { (yyval.stmt) = MkWatchStmt(null, (yyvsp[-4].exp), (yyvsp[-1].list)); ;}
     break;
 
   case 151:
-#line 1063 "grammar.y"
+#line 1068 "grammar.y"
     { (yyval.stmt) = MkWatchStmt((yyvsp[-8].exp), (yyvsp[-4].exp), (yyvsp[-1].list)); ;}
     break;
 
   case 152:
-#line 1068 "grammar.y"
+#line 1073 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt(null, (yyvsp[-3].exp), (yyvsp[-1].list)); ;}
     break;
 
   case 153:
-#line 1070 "grammar.y"
+#line 1075 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt((yyvsp[-7].exp), (yyvsp[-3].exp), (yyvsp[-1].list)); ;}
     break;
 
   case 154:
-#line 1072 "grammar.y"
+#line 1077 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt(null, (yyvsp[-1].exp), null); ;}
     break;
 
   case 155:
-#line 1074 "grammar.y"
+#line 1079 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt((yyvsp[-5].exp), (yyvsp[-1].exp), null); ;}
     break;
 
   case 156:
-#line 1079 "grammar.y"
+#line 1084 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt(null, null); ;}
     break;
 
   case 157:
-#line 1081 "grammar.y"
+#line 1086 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt(null, (yyvsp[0].list)); ;}
     break;
 
   case 158:
-#line 1083 "grammar.y"
+#line 1088 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt((yyvsp[-2].exp), null); ;}
     break;
 
   case 159:
-#line 1085 "grammar.y"
+#line 1090 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt((yyvsp[-3].exp), (yyvsp[0].list)); ;}
     break;
 
   case 160:
-#line 1089 "grammar.y"
+#line 1094 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[-2].list), (yyvsp[-1].list), null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 161:
-#line 1090 "grammar.y"
+#line 1095 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[-1].list), null, null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 162:
-#line 1091 "grammar.y"
+#line 1096 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 163:
-#line 1092 "grammar.y"
+#line 1097 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 164:
-#line 1093 "grammar.y"
+#line 1098 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[0].classFunction)); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 165:
-#line 1094 "grammar.y"
+#line 1099 "grammar.y"
     { (yyval.classDef) = MkClassDefProperty((yyvsp[0].prop)); (yyval.classDef).loc = (yyloc); globalContext.nextID++; (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 166:
-#line 1096 "grammar.y"
+#line 1101 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[-2].list), (yyvsp[-1].list), null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[-3].declMode); ;}
     break;
 
   case 167:
-#line 1097 "grammar.y"
+#line 1102 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[-1].list), null, null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[-2].declMode); ;}
     break;
 
   case 168:
-#line 1098 "grammar.y"
+#line 1103 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[-2].declMode); ;}
     break;
 
   case 169:
-#line 1099 "grammar.y"
+#line 1104 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[-2].declMode); ;}
     break;
 
   case 170:
-#line 1100 "grammar.y"
+#line 1105 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[0].classFunction)); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[-1].declMode); ;}
     break;
 
   case 171:
-#line 1101 "grammar.y"
+#line 1106 "grammar.y"
     { (yyval.classDef) = MkClassDefProperty((yyvsp[0].prop)); (yyval.classDef).loc = (yyloc); globalContext.nextID++; (yyval.classDef).memberAccess = (yyvsp[-1].declMode); ;}
     break;
 
   case 172:
-#line 1103 "grammar.y"
+#line 1108 "grammar.y"
     { (yyval.classDef) = MkClassDefDefaultProperty((yyvsp[-1].list)); if((yyvsp[-1].list)->last) ((MemberInit)(yyvsp[-1].list)->last).loc.end = (yylsp[0]).start; (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 173:
-#line 1104 "grammar.y"
+#line 1109 "grammar.y"
     { (yyval.classDef) = MkClassDefClassData(MkStructDeclaration((yyvsp[-2].list), (yyvsp[-1].list), null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 174:
-#line 1105 "grammar.y"
+#line 1110 "grammar.y"
     { (yyval.classDef) = MkClassDefClassProperty((yyvsp[0].prop)); (yyval.classDef).loc = (yyloc); globalContext.nextID++; ;}
     break;
 
   case 175:
-#line 1106 "grammar.y"
+#line 1111 "grammar.y"
     { (yyval.classDef) = MkClassDefPropertyWatch((yyvsp[-1].propertyWatch)); (yyval.classDef).loc = (yyloc); globalContext.nextID++; ;}
     break;
 
   case 176:
-#line 1107 "grammar.y"
+#line 1112 "grammar.y"
     { (yyval.classDef) = null; deleteWatchable = true; ;}
     break;
 
   case 177:
-#line 1108 "grammar.y"
+#line 1113 "grammar.y"
     { (yyval.classDef) = MkClassDefDesigner((yyvsp[-1].id).string); FreeIdentifier((yyvsp[-1].id)); ;}
     break;
 
   case 178:
-#line 1109 "grammar.y"
+#line 1114 "grammar.y"
     { (yyval.classDef) = MkClassDefDesigner((yyvsp[-1].specifier).name); FreeSpecifier((yyvsp[-1].specifier)); ;}
     break;
 
   case 179:
-#line 1110 "grammar.y"
+#line 1115 "grammar.y"
     { (yyval.classDef) = MkClassDefNoExpansion(); ;}
     break;
 
   case 180:
-#line 1111 "grammar.y"
+#line 1116 "grammar.y"
     { (yyval.classDef) = MkClassDefFixed(); ;}
     break;
 
   case 181:
-#line 1112 "grammar.y"
+#line 1117 "grammar.y"
     { (yyval.classDef) = MkClassDefDesignerDefaultProperty((yyvsp[-1].id)); ;}
     break;
 
   case 182:
-#line 1113 "grammar.y"
+#line 1118 "grammar.y"
     { (yyval.classDef) = MkClassDefClassPropertyValue((yyvsp[-4].id), (yyvsp[-1].initializer)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 183:
-#line 1115 "grammar.y"
+#line 1120 "grammar.y"
     { (yyval.classDef) = null; ;}
     break;
 
   case 184:
-#line 1116 "grammar.y"
+#line 1121 "grammar.y"
     { memberAccessStack[defaultMemberAccess] = (yyvsp[-1].declMode); if(defaultMemberAccess == 0) { (yyval.classDef) = MkClassDefMemberAccess(); (yyval.classDef).memberAccess = (yyvsp[-1].declMode); (yyval.classDef).loc = (yyloc); } else (yyval.classDef) = null; ;}
     break;
 
   case 185:
-#line 1118 "grammar.y"
+#line 1123 "grammar.y"
     { (yyval.classDef) = MkClassDefAccessOverride((yyvsp[-3].declMode), (yyvsp[-1].id)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 186:
-#line 1122 "grammar.y"
+#line 1127 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[0].classFunction)); (yyval.classDef).loc = (yyvsp[0].classFunction).loc;  (yyval.classDef).loc.end.charPos++; (yyval.classDef).loc.end.pos++; (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 187:
-#line 1123 "grammar.y"
+#line 1128 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyvsp[-1].instance).loc; (yyval.classDef).decl.loc = (yyval.classDef).loc;  (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 188:
-#line 1124 "grammar.y"
+#line 1129 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyvsp[-1].instance).loc; (yyval.classDef).decl.loc = (yyval.classDef).loc;  (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 189:
-#line 1125 "grammar.y"
+#line 1130 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[0].instance))); (yyval.classDef).loc = (yyvsp[0].instance).loc; (yyval.classDef).decl.loc = (yyval.classDef).loc;  (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 190:
-#line 1126 "grammar.y"
+#line 1131 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[0].instance))); (yyval.classDef).loc = (yyvsp[0].instance).loc; (yyval.classDef).decl.loc = (yyval.classDef).loc;  (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 191:
-#line 1128 "grammar.y"
+#line 1133 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[0].classFunction)); (yyval.classDef).loc = (yyloc);  (yyval.classDef).loc.end.charPos++; (yyval.classDef).loc.end.pos++; (yyval.classDef).memberAccess = (yyvsp[-1].declMode); ;}
     break;
 
   case 192:
-#line 1129 "grammar.y"
+#line 1134 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyval.classDef).loc; (yyval.classDef).memberAccess = (yyvsp[-2].declMode); ;}
     break;
 
   case 193:
-#line 1130 "grammar.y"
+#line 1135 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[-1].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyval.classDef).loc; (yyval.classDef).memberAccess = (yyvsp[-2].declMode); ;}
     break;
 
   case 194:
-#line 1131 "grammar.y"
+#line 1136 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[0].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyval.classDef).loc; (yyval.classDef).memberAccess = (yyvsp[-1].declMode); ;}
     break;
 
   case 195:
-#line 1132 "grammar.y"
+#line 1137 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[0].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyval.classDef).loc; (yyval.classDef).memberAccess = (yyvsp[-1].declMode); ;}
     break;
 
   case 196:
-#line 1134 "grammar.y"
+#line 1139 "grammar.y"
     { (yyval.classDef) = MkClassDefDefaultProperty((yyvsp[0].list)); (yyval.classDef).loc = (yyloc);  (yyval.classDef).loc.end.charPos++; (yyval.classDef).loc.end.pos++; ;}
     break;
 
   case 197:
-#line 1138 "grammar.y"
+#line 1143 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].classDef)); ;}
     break;
 
   case 198:
-#line 1139 "grammar.y"
+#line 1144 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].classDef)); ;}
     break;
 
   case 199:
-#line 1140 "grammar.y"
+#line 1145 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].classDef)); ;}
     break;
 
   case 200:
-#line 1144 "grammar.y"
+#line 1149 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].classDef)); ;}
     break;
 
   case 203:
-#line 1147 "grammar.y"
+#line 1152 "grammar.y"
     { ListAdd((yyval.list), (yyvsp[0].classDef)); ;}
     break;
 
   case 204:
-#line 1148 "grammar.y"
+#line 1153 "grammar.y"
     { ListAdd((yyval.list), (yyvsp[0].classDef)); ;}
     break;
 
   case 205:
-#line 1152 "grammar.y"
+#line 1157 "grammar.y"
     { (yyval.templateDatatype) = MkTemplateDatatype((yyvsp[0].list), null); ;}
     break;
 
   case 206:
-#line 1153 "grammar.y"
+#line 1158 "grammar.y"
     { (yyval.templateDatatype) = MkTemplateDatatype((yyvsp[-1].list), (yyvsp[0].declarator)); ;}
     break;
 
   case 207:
-#line 1154 "grammar.y"
+#line 1159 "grammar.y"
     { (yyval.templateDatatype) = MkTemplateDatatype(MkListOne(MkSpecifierName((yyvsp[0].id).string)), null); FreeIdentifier((yyvsp[0].id)); ;}
     break;
 
   case 208:
-#line 1158 "grammar.y"
+#line 1163 "grammar.y"
     { (yyval.templateArgument) = MkTemplateTypeArgument((yyvsp[0].templateDatatype)); ;}
     break;
 
   case 209:
-#line 1162 "grammar.y"
+#line 1167 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[0].id), null, null); ;}
     break;
 
   case 210:
-#line 1163 "grammar.y"
+#line 1168 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[-2].id), null, (yyvsp[0].templateArgument)); ;}
     break;
 
   case 211:
-#line 1164 "grammar.y"
+#line 1169 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[-2].id), (yyvsp[0].templateDatatype), null); ;}
     break;
 
   case 212:
-#line 1165 "grammar.y"
+#line 1170 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[-4].id), (yyvsp[-2].templateDatatype), (yyvsp[0].templateArgument)); ;}
     break;
 
   case 213:
-#line 1166 "grammar.y"
+#line 1171 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[0].string)), null, null); delete (yyvsp[0].string); ;}
     break;
 
   case 214:
-#line 1167 "grammar.y"
+#line 1172 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[-2].string)), null, (yyvsp[0].templateArgument)); ;}
     break;
 
   case 215:
-#line 1168 "grammar.y"
+#line 1173 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[-2].string)), (yyvsp[0].templateDatatype), null); ;}
     break;
 
   case 216:
-#line 1169 "grammar.y"
+#line 1174 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[-4].string)), (yyvsp[-2].templateDatatype), (yyvsp[0].templateArgument)); ;}
     break;
 
   case 217:
-#line 1173 "grammar.y"
+#line 1178 "grammar.y"
     { (yyval.templateArgument) = MkTemplateIdentifierArgument((yyvsp[0].id)); ;}
     break;
 
   case 218:
-#line 1177 "grammar.y"
+#line 1182 "grammar.y"
     { (yyval.templateParameter) = MkIdentifierTemplateParameter((yyvsp[0].id), dataMember, null); ;}
     break;
 
   case 219:
-#line 1178 "grammar.y"
+#line 1183 "grammar.y"
     { (yyval.templateParameter) = MkIdentifierTemplateParameter((yyvsp[-2].id), dataMember, (yyvsp[0].templateArgument)); ;}
     break;
 
   case 220:
-#line 1182 "grammar.y"
+#line 1187 "grammar.y"
     { (yyval.templateArgument) = MkTemplateExpressionArgument((yyvsp[0].exp)); ;}
     break;
 
   case 221:
-#line 1186 "grammar.y"
+#line 1191 "grammar.y"
     { (yyval.templateParameter) = MkExpressionTemplateParameter((yyvsp[0].id), (yyvsp[-1].templateDatatype), null); ;}
     break;
 
   case 222:
-#line 1187 "grammar.y"
+#line 1192 "grammar.y"
     { (yyval.templateParameter) = MkExpressionTemplateParameter((yyvsp[-2].id), (yyvsp[-3].templateDatatype), (yyvsp[0].templateArgument)); ;}
     break;
 
   case 226:
-#line 1197 "grammar.y"
+#line 1202 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].templateParameter)); ;}
     break;
 
   case 227:
-#line 1198 "grammar.y"
+#line 1203 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].templateParameter)); ;}
     break;
 
   case 231:
-#line 1205 "grammar.y"
+#line 1210 "grammar.y"
     { (yyval.templateArgument) = (yyvsp[0].templateArgument); (yyval.templateArgument).name = (yyvsp[-2].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 232:
-#line 1206 "grammar.y"
+#line 1211 "grammar.y"
     { (yyval.templateArgument) = (yyvsp[0].templateArgument); (yyval.templateArgument).name = (yyvsp[-2].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 233:
-#line 1207 "grammar.y"
+#line 1212 "grammar.y"
     { (yyval.templateArgument) = (yyvsp[0].templateArgument); (yyval.templateArgument).name = (yyvsp[-2].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 234:
-#line 1209 "grammar.y"
+#line 1214 "grammar.y"
     {
       (yyval.templateArgument) = (yyvsp[0].templateArgument); 
       if((yyvsp[-2].templateDatatype).specifiers && (yyvsp[-2].templateDatatype).specifiers->first)
@@ -12501,7 +12626,7 @@ yyreduce:
     break;
 
   case 235:
-#line 1221 "grammar.y"
+#line 1226 "grammar.y"
     {
       (yyval.templateArgument) = (yyvsp[0].templateArgument); 
       if((yyvsp[-2].templateDatatype).specifiers && (yyvsp[-2].templateDatatype).specifiers->first)
@@ -12516,7 +12641,7 @@ yyreduce:
     break;
 
   case 236:
-#line 1233 "grammar.y"
+#line 1238 "grammar.y"
     {
       (yyval.templateArgument) = (yyvsp[0].templateArgument); 
       if((yyvsp[-2].templateDatatype).specifiers && (yyvsp[-2].templateDatatype).specifiers->first)
@@ -12531,29 +12656,29 @@ yyreduce:
     break;
 
   case 237:
-#line 1247 "grammar.y"
+#line 1252 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].templateArgument)); ;}
     break;
 
   case 238:
-#line 1248 "grammar.y"
+#line 1253 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].templateArgument)); ;}
     break;
 
   case 239:
-#line 1253 "grammar.y"
+#line 1258 "grammar.y"
     {
       PushContext();
    ;}
     break;
 
   case 240:
-#line 1258 "grammar.y"
+#line 1263 "grammar.y"
     { (yyval.symbol) = DeclClassAddNameSpace(globalContext.nextID++, (yyvsp[0].id).string); FreeIdentifier((yyvsp[0].id)); (yyval.symbol).nameLoc = (yylsp[0]); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 241:
-#line 1260 "grammar.y"
+#line 1265 "grammar.y"
     { 
       (yyval.symbol) = DeclClass(globalContext.nextID++, (yyvsp[0].specifier).name); 
       (yyval.symbol).nameLoc = (yylsp[0]); 
@@ -12564,22 +12689,22 @@ yyreduce:
     break;
 
   case 242:
-#line 1267 "grammar.y"
+#line 1272 "grammar.y"
     { (yyval.symbol) = DeclClassAddNameSpace(globalContext.nextID++, (yyvsp[0].id).string); FreeIdentifier((yyvsp[-2].id)); FreeIdentifier((yyvsp[0].id)); (yyval.symbol).nameLoc = (yylsp[0]); (yyval.symbol).isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 243:
-#line 1268 "grammar.y"
+#line 1273 "grammar.y"
     { (yyval.symbol) = DeclClass(globalContext.nextID++, (yyvsp[0].specifier).name); FreeIdentifier((yyvsp[-2].id)); (yyval.symbol).nameLoc = (yylsp[0]); (yyval.symbol).isRemote = true; FreeSpecifier((yyvsp[0].specifier)); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 244:
-#line 1270 "grammar.y"
+#line 1275 "grammar.y"
     { (yyval.symbol) = DeclClassAddNameSpace(globalContext.nextID++, (yyvsp[-3].id).string); (yyval.symbol).templateParams = (yyvsp[-1].list); FreeIdentifier((yyvsp[-3].id)); (yyval.symbol).nameLoc = (yylsp[-3]); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 245:
-#line 1272 "grammar.y"
+#line 1277 "grammar.y"
     { 
       (yyval.symbol) = DeclClass(globalContext.nextID++, (yyvsp[-3].specifier).name);
       (yyval.symbol).templateParams = (yyvsp[-1].list); 
@@ -12591,24 +12716,24 @@ yyreduce:
     break;
 
   case 246:
-#line 1280 "grammar.y"
+#line 1285 "grammar.y"
     { (yyval.symbol) = DeclClassAddNameSpace(globalContext.nextID++, (yyvsp[-3].id).string); (yyval.symbol).templateParams = (yyvsp[-1].list); FreeIdentifier((yyvsp[-5].id)); FreeIdentifier((yyvsp[-3].id)); (yyval.symbol).nameLoc = (yylsp[-3]); (yyval.symbol).isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 247:
-#line 1281 "grammar.y"
+#line 1286 "grammar.y"
     { (yyval.symbol) = DeclClass(globalContext.nextID++, (yyvsp[-3].specifier).name); (yyval.symbol).templateParams = (yyvsp[-1].list); FreeIdentifier((yyvsp[-5].id)); (yyval.symbol).nameLoc = (yylsp[-3]); (yyval.symbol).isRemote = true; FreeSpecifier((yyvsp[-3].specifier)); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 248:
-#line 1286 "grammar.y"
+#line 1291 "grammar.y"
     {
          (yyval._class).loc = (yyloc);
       ;}
     break;
 
   case 249:
-#line 1292 "grammar.y"
+#line 1297 "grammar.y"
     {
          (yyval._class) = (yyvsp[-1]._class); (yyval._class).definitions = MkList(); (yyval._class).blockStart = (yylsp[0]);  (yyval._class).loc = (yyloc); (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12617,7 +12742,7 @@ yyreduce:
     break;
 
   case 250:
-#line 1299 "grammar.y"
+#line 1304 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[-2].symbol), null, MkList()); (yyval._class).blockStart = (yylsp[-1]);  (yyval._class).loc = (yyloc); (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12626,7 +12751,7 @@ yyreduce:
     break;
 
   case 251:
-#line 1305 "grammar.y"
+#line 1310 "grammar.y"
     {
          (yyval._class) = (yyvsp[-2]._class); (yyval._class).definitions = MkList(); (yyval._class).blockStart = (yylsp[-1]);  (yyval._class).loc = (yyloc); (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12635,7 +12760,7 @@ yyreduce:
     break;
 
   case 252:
-#line 1312 "grammar.y"
+#line 1317 "grammar.y"
     {
          (yyval._class) = MkClass(DeclClassAddNameSpace(0, (yyvsp[-1].id).string), null, null); FreeIdentifier((yyvsp[-1].id));
          POP_DEFAULT_ACCESS
@@ -12644,7 +12769,7 @@ yyreduce:
     break;
 
   case 253:
-#line 1318 "grammar.y"
+#line 1323 "grammar.y"
     {
          (yyval._class) = MkClass(DeclClass(0, (yyvsp[-1].specifier).name), null, null); FreeSpecifier((yyvsp[-1].specifier));
          POP_DEFAULT_ACCESS
@@ -12653,14 +12778,14 @@ yyreduce:
     break;
 
   case 254:
-#line 1327 "grammar.y"
+#line 1332 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[-2].symbol), (yyvsp[0].list), null);
       ;}
     break;
 
   case 255:
-#line 1334 "grammar.y"
+#line 1339 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[-2].symbol), null, (yyvsp[0].list)); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[-1]); (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++; (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12669,7 +12794,7 @@ yyreduce:
     break;
 
   case 256:
-#line 1340 "grammar.y"
+#line 1345 "grammar.y"
     {
          (yyval._class) = (yyvsp[-2]._class); (yyval._class).definitions = (yyvsp[0].list); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[-1]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++; (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12678,7 +12803,7 @@ yyreduce:
     break;
 
   case 257:
-#line 1346 "grammar.y"
+#line 1351 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[-2].symbol), null, (yyvsp[0].list)); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[-1]); (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++; (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12687,7 +12812,7 @@ yyreduce:
     break;
 
   case 258:
-#line 1352 "grammar.y"
+#line 1357 "grammar.y"
     {
          (yyval._class) = (yyvsp[-2]._class); (yyval._class).definitions = (yyvsp[0].list); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[-1]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++; (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12696,7 +12821,7 @@ yyreduce:
     break;
 
   case 259:
-#line 1358 "grammar.y"
+#line 1363 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[-2].symbol), null, MkList()); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[-1]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++; (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12705,7 +12830,7 @@ yyreduce:
     break;
 
   case 260:
-#line 1364 "grammar.y"
+#line 1369 "grammar.y"
     {
          (yyval._class) = (yyvsp[-2]._class); (yyval._class).definitions = MkList(); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[-1]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++; (yyval._class).endid = globalContext.nextID++;
          POP_DEFAULT_ACCESS
@@ -12714,577 +12839,577 @@ yyreduce:
     break;
 
   case 261:
-#line 1375 "grammar.y"
+#line 1380 "grammar.y"
     { (yyval.id) = MkIdentifier(yytext); (yyval.id).loc = (yylsp[0]); ;}
     break;
 
   case 263:
-#line 1381 "grammar.y"
+#line 1386 "grammar.y"
     { (yyval.exp) = MkExpBrackets((yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 264:
-#line 1385 "grammar.y"
+#line 1390 "grammar.y"
     { (yyval.exp) = MkExpIdentifier((yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 265:
-#line 1386 "grammar.y"
+#line 1391 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[0].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 266:
-#line 1387 "grammar.y"
+#line 1392 "grammar.y"
     { (yyval.exp) = MkExpExtensionCompound((yyvsp[-1].stmt)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 267:
-#line 1388 "grammar.y"
+#line 1393 "grammar.y"
     { (yyval.exp) = MkExpExtensionExpression((yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 268:
-#line 1389 "grammar.y"
+#line 1394 "grammar.y"
     { (yyval.exp) = MkExpExtensionInitializer((yyvsp[-2].typeName), (yyvsp[0].initializer)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 269:
-#line 1390 "grammar.y"
+#line 1395 "grammar.y"
     { (yyval.exp) = MkExpExtensionInitializer((yyvsp[-5].typeName), MkInitializerAssignment(MkExpExtensionInitializer((yyvsp[-2].typeName), (yyvsp[0].initializer)))); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 270:
-#line 1391 "grammar.y"
+#line 1396 "grammar.y"
     { (yyval.exp) = MkExpConstant(yytext); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 271:
-#line 1392 "grammar.y"
+#line 1397 "grammar.y"
     { (yyval.exp) = MkExpString((yyvsp[0].string)); delete (yyvsp[0].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 272:
-#line 1393 "grammar.y"
+#line 1398 "grammar.y"
     { (yyval.exp) = MkExpIntlString((yyvsp[0].string), null); delete (yyvsp[0].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 273:
-#line 1394 "grammar.y"
+#line 1399 "grammar.y"
     { (yyval.exp) = MkExpIntlString((yyvsp[0].string), (yyvsp[-2].string)); delete (yyvsp[-2].string); delete (yyvsp[0].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 274:
-#line 1395 "grammar.y"
+#line 1400 "grammar.y"
     { Expression exp = MkExpDummy(); exp.loc.start = (yylsp[-1]).end; exp.loc.end = (yylsp[0]).start; (yyval.exp) = MkExpBrackets(MkListOne(exp)); (yyval.exp).loc = (yyloc); yyerror(); ;}
     break;
 
   case 275:
-#line 1396 "grammar.y"
+#line 1401 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 276:
-#line 1397 "grammar.y"
+#line 1402 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 277:
-#line 1398 "grammar.y"
+#line 1403 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 278:
-#line 1399 "grammar.y"
+#line 1404 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 279:
-#line 1400 "grammar.y"
+#line 1405 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 280:
-#line 1401 "grammar.y"
+#line 1406 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 281:
-#line 1402 "grammar.y"
+#line 1407 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 282:
-#line 1403 "grammar.y"
+#line 1408 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 283:
-#line 1404 "grammar.y"
+#line 1409 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[-5].exp), MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 284:
-#line 1405 "grammar.y"
+#line 1410 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[-5].exp), MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 285:
-#line 1406 "grammar.y"
+#line 1411 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[-4].exp), MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 286:
-#line 1407 "grammar.y"
+#line 1412 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[-4].exp), MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 287:
-#line 1408 "grammar.y"
+#line 1413 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[-5].exp), MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 288:
-#line 1409 "grammar.y"
+#line 1414 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[-5].exp), MkTypeName((yyvsp[-4].list),(yyvsp[-3].declarator)), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 289:
-#line 1410 "grammar.y"
+#line 1415 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[-4].exp), MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 290:
-#line 1411 "grammar.y"
+#line 1416 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[-4].exp), MkTypeName((yyvsp[-3].list),null), (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 291:
-#line 1412 "grammar.y"
+#line 1417 "grammar.y"
     { (yyval.exp) = MkExpClass((yyvsp[-1].list), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 292:
-#line 1413 "grammar.y"
+#line 1418 "grammar.y"
     { (yyval.exp) = MkExpClass((yyvsp[-2].list), (yyvsp[-1].declarator)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 293:
-#line 1414 "grammar.y"
+#line 1419 "grammar.y"
     { (yyval.exp) = MkExpClass(MkListOne(MkSpecifierName((yyvsp[-1].id).string)), null); FreeIdentifier((yyvsp[-1].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 294:
-#line 1415 "grammar.y"
+#line 1420 "grammar.y"
     { (yyval.exp) = MkExpVaArg((yyvsp[-3].exp), (yyvsp[-1].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 295:
-#line 1417 "grammar.y"
+#line 1422 "grammar.y"
     { (yyval.exp) = MkExpClassData((yyvsp[-1].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 300:
-#line 1423 "grammar.y"
+#line 1428 "grammar.y"
     { (yyval.exp) = MkExpArray((yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 301:
-#line 1427 "grammar.y"
+#line 1432 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[0].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 302:
-#line 1431 "grammar.y"
+#line 1436 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[-1].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 303:
-#line 1435 "grammar.y"
+#line 1440 "grammar.y"
     { (yyval.exp) = MkExpBrackets((yyvsp[0].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 304:
-#line 1436 "grammar.y"
+#line 1441 "grammar.y"
     { (yyval.exp) = MkExpBrackets((yyvsp[0].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 306:
-#line 1442 "grammar.y"
+#line 1447 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 307:
-#line 1443 "grammar.y"
+#line 1448 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 308:
-#line 1444 "grammar.y"
+#line 1449 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList()); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 309:
-#line 1445 "grammar.y"
+#line 1450 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).call.argLoc.start = (yylsp[-2]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 310:
-#line 1446 "grammar.y"
+#line 1451 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).call.argLoc.start = (yylsp[-2]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); if((yyvsp[-1].list)->last) ((Expression)(yyvsp[-1].list)->last).loc.end = (yylsp[0]).start; ;}
     break;
 
   case 311:
-#line 1447 "grammar.y"
+#line 1452 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 312:
-#line 1448 "grammar.y"
+#line 1453 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 313:
-#line 1449 "grammar.y"
+#line 1454 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), INC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 314:
-#line 1450 "grammar.y"
+#line 1455 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), DEC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 315:
-#line 1452 "grammar.y"
+#line 1457 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 316:
-#line 1453 "grammar.y"
+#line 1458 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 317:
-#line 1454 "grammar.y"
+#line 1459 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList()); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 318:
-#line 1455 "grammar.y"
+#line 1460 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).call.argLoc.start = (yylsp[-2]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end;(yyval.exp).loc = (yyloc); ;}
     break;
 
   case 319:
-#line 1456 "grammar.y"
+#line 1461 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 320:
-#line 1457 "grammar.y"
+#line 1462 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 321:
-#line 1458 "grammar.y"
+#line 1463 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), INC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 322:
-#line 1459 "grammar.y"
+#line 1464 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), DEC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 324:
-#line 1465 "grammar.y"
+#line 1470 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 325:
-#line 1466 "grammar.y"
+#line 1471 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 326:
-#line 1467 "grammar.y"
+#line 1472 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList()); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 327:
-#line 1468 "grammar.y"
+#line 1473 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).call.argLoc.start = (yylsp[-2]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 328:
-#line 1469 "grammar.y"
+#line 1474 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).call.argLoc.start = (yylsp[-2]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); if((yyvsp[-1].list)->last) ((Expression)(yyvsp[-1].list)->last).loc.end = (yylsp[0]).start; ;}
     break;
 
   case 329:
-#line 1470 "grammar.y"
+#line 1475 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 330:
-#line 1471 "grammar.y"
+#line 1476 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 331:
-#line 1472 "grammar.y"
+#line 1477 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), INC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 332:
-#line 1473 "grammar.y"
+#line 1478 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), DEC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 333:
-#line 1475 "grammar.y"
+#line 1480 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 334:
-#line 1476 "grammar.y"
+#line 1481 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 335:
-#line 1477 "grammar.y"
+#line 1482 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList()); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 336:
-#line 1478 "grammar.y"
+#line 1483 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-3].exp), (yyvsp[-1].list)); (yyval.exp).call.argLoc.start = (yylsp[-2]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end;(yyval.exp).loc = (yyloc); ;}
     break;
 
   case 337:
-#line 1479 "grammar.y"
+#line 1484 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 338:
-#line 1480 "grammar.y"
+#line 1485 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), (yyvsp[0].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 339:
-#line 1481 "grammar.y"
+#line 1486 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), INC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 340:
-#line 1482 "grammar.y"
+#line 1487 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-1].exp), DEC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 341:
-#line 1486 "grammar.y"
+#line 1491 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 342:
-#line 1487 "grammar.y"
+#line 1492 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 343:
-#line 1488 "grammar.y"
+#line 1493 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp));  ;}
     break;
 
   case 344:
-#line 1489 "grammar.y"
+#line 1494 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp));  ;}
     break;
 
   case 345:
-#line 1493 "grammar.y"
+#line 1498 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 346:
-#line 1494 "grammar.y"
+#line 1499 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 347:
-#line 1495 "grammar.y"
+#line 1500 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp));  ;}
     break;
 
   case 348:
-#line 1496 "grammar.y"
+#line 1501 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp));  ;}
     break;
 
   case 349:
-#line 1497 "grammar.y"
+#line 1502 "grammar.y"
     { Expression exp = MkExpDummy(); exp.loc.start = (yylsp[0]).end; exp.loc.end = (yylsp[0]).end; ListAdd((yyvsp[-1].list), exp); ;}
     break;
 
   case 350:
-#line 1501 "grammar.y"
+#line 1506 "grammar.y"
     { (yyval.exp) = MkExpOp(null, INC_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 351:
-#line 1502 "grammar.y"
+#line 1507 "grammar.y"
     { (yyval.exp) = MkExpOp(null, DEC_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 352:
-#line 1503 "grammar.y"
+#line 1508 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 353:
-#line 1504 "grammar.y"
+#line 1509 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 354:
-#line 1505 "grammar.y"
+#line 1510 "grammar.y"
     { (yyval.exp) = MkExpOp(null, SIZEOF, (yyvsp[-1].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 355:
-#line 1506 "grammar.y"
+#line 1511 "grammar.y"
     { (yyval.exp) = MkExpOp(null, SIZEOF, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 356:
-#line 1507 "grammar.y"
+#line 1512 "grammar.y"
     { (yyval.exp) = MkExpTypeSize((yyvsp[-1].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 357:
-#line 1508 "grammar.y"
+#line 1513 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[-1].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 358:
-#line 1509 "grammar.y"
+#line 1514 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[-1].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 363:
-#line 1523 "grammar.y"
+#line 1528 "grammar.y"
     { (yyval.i) = '&'; ;}
     break;
 
   case 364:
-#line 1524 "grammar.y"
+#line 1529 "grammar.y"
     { (yyval.i) = '*'; ;}
     break;
 
   case 365:
-#line 1525 "grammar.y"
+#line 1530 "grammar.y"
     { (yyval.i) = '+'; ;}
     break;
 
   case 366:
-#line 1526 "grammar.y"
+#line 1531 "grammar.y"
     { (yyval.i) = '-'; ;}
     break;
 
   case 367:
-#line 1527 "grammar.y"
+#line 1532 "grammar.y"
     { (yyval.i) = '~'; ;}
     break;
 
   case 368:
-#line 1528 "grammar.y"
+#line 1533 "grammar.y"
     { (yyval.i) = '!'; ;}
     break;
 
   case 369:
-#line 1529 "grammar.y"
+#line 1534 "grammar.y"
     { (yyval.i) = DELETE; ;}
     break;
 
   case 370:
-#line 1530 "grammar.y"
+#line 1535 "grammar.y"
     { (yyval.i) = _INCREF; ;}
     break;
 
   case 372:
-#line 1535 "grammar.y"
+#line 1540 "grammar.y"
     { (yyval.exp) = MkExpCast((yyvsp[-2].typeName), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 374:
-#line 1540 "grammar.y"
+#line 1545 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '*', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 375:
-#line 1541 "grammar.y"
+#line 1546 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '/', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 376:
-#line 1542 "grammar.y"
+#line 1547 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '%', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 377:
-#line 1543 "grammar.y"
+#line 1548 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '*', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 378:
-#line 1544 "grammar.y"
+#line 1549 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '/', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 379:
-#line 1545 "grammar.y"
+#line 1550 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '%', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 381:
-#line 1550 "grammar.y"
+#line 1555 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '+', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 382:
-#line 1551 "grammar.y"
+#line 1556 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '-', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 383:
-#line 1552 "grammar.y"
+#line 1557 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '+', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 384:
-#line 1553 "grammar.y"
+#line 1558 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '-', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 386:
-#line 1558 "grammar.y"
+#line 1563 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LEFT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 387:
-#line 1559 "grammar.y"
+#line 1564 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), RIGHT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 388:
-#line 1560 "grammar.y"
+#line 1565 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LEFT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 389:
-#line 1561 "grammar.y"
+#line 1566 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), RIGHT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 390:
-#line 1566 "grammar.y"
+#line 1571 "grammar.y"
     {
       (yyval.exp) = (yyvsp[-1].exp);
       skipErrors = true;
@@ -13292,642 +13417,642 @@ yyreduce:
     break;
 
   case 392:
-#line 1574 "grammar.y"
+#line 1579 "grammar.y"
     { skipErrors = false; (yyval.exp) = MkExpOp((yyvsp[-1].exp), '<', (yyvsp[0].exp)/*$3*/); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 393:
-#line 1575 "grammar.y"
+#line 1580 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '>', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 394:
-#line 1576 "grammar.y"
+#line 1581 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 395:
-#line 1577 "grammar.y"
+#line 1582 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), GE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 396:
-#line 1578 "grammar.y"
+#line 1583 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '<', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 397:
-#line 1579 "grammar.y"
+#line 1584 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '>', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 398:
-#line 1580 "grammar.y"
+#line 1585 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 399:
-#line 1581 "grammar.y"
+#line 1586 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), GE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 401:
-#line 1586 "grammar.y"
+#line 1591 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 402:
-#line 1587 "grammar.y"
+#line 1592 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 403:
-#line 1588 "grammar.y"
+#line 1593 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 404:
-#line 1589 "grammar.y"
+#line 1594 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 405:
-#line 1591 "grammar.y"
+#line 1596 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 406:
-#line 1592 "grammar.y"
+#line 1597 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 407:
-#line 1593 "grammar.y"
+#line 1598 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 408:
-#line 1594 "grammar.y"
+#line 1599 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 410:
-#line 1599 "grammar.y"
+#line 1604 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 411:
-#line 1600 "grammar.y"
+#line 1605 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 412:
-#line 1602 "grammar.y"
+#line 1607 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 413:
-#line 1603 "grammar.y"
+#line 1608 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 415:
-#line 1608 "grammar.y"
+#line 1613 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 416:
-#line 1609 "grammar.y"
+#line 1614 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 417:
-#line 1611 "grammar.y"
+#line 1616 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 418:
-#line 1612 "grammar.y"
+#line 1617 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 420:
-#line 1617 "grammar.y"
+#line 1622 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 421:
-#line 1618 "grammar.y"
+#line 1623 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 422:
-#line 1620 "grammar.y"
+#line 1625 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 423:
-#line 1621 "grammar.y"
+#line 1626 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 425:
-#line 1626 "grammar.y"
+#line 1631 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), AND_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 426:
-#line 1627 "grammar.y"
+#line 1632 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), AND_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 428:
-#line 1632 "grammar.y"
+#line 1637 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), OR_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 429:
-#line 1633 "grammar.y"
+#line 1638 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), OR_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 431:
-#line 1638 "grammar.y"
+#line 1643 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 432:
-#line 1639 "grammar.y"
+#line 1644 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 433:
-#line 1640 "grammar.y"
+#line 1645 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 434:
-#line 1641 "grammar.y"
+#line 1646 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 435:
-#line 1643 "grammar.y"
+#line 1648 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 436:
-#line 1644 "grammar.y"
+#line 1649 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 437:
-#line 1645 "grammar.y"
+#line 1650 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 438:
-#line 1646 "grammar.y"
+#line 1651 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 439:
-#line 1648 "grammar.y"
+#line 1653 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 440:
-#line 1649 "grammar.y"
+#line 1654 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 441:
-#line 1650 "grammar.y"
+#line 1655 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 442:
-#line 1651 "grammar.y"
+#line 1656 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 443:
-#line 1653 "grammar.y"
+#line 1658 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 444:
-#line 1654 "grammar.y"
+#line 1659 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 445:
-#line 1655 "grammar.y"
+#line 1660 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 446:
-#line 1656 "grammar.y"
+#line 1661 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 448:
-#line 1661 "grammar.y"
+#line 1666 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 449:
-#line 1662 "grammar.y"
+#line 1667 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 450:
-#line 1663 "grammar.y"
+#line 1668 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 451:
-#line 1664 "grammar.y"
+#line 1669 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 452:
-#line 1666 "grammar.y"
+#line 1671 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 453:
-#line 1667 "grammar.y"
+#line 1672 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 454:
-#line 1668 "grammar.y"
+#line 1673 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 455:
-#line 1669 "grammar.y"
+#line 1674 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 456:
-#line 1673 "grammar.y"
+#line 1678 "grammar.y"
     { (yyval.i) = '='; ;}
     break;
 
   case 457:
-#line 1674 "grammar.y"
+#line 1679 "grammar.y"
     { (yyval.i) = MUL_ASSIGN; ;}
     break;
 
   case 458:
-#line 1675 "grammar.y"
+#line 1680 "grammar.y"
     { (yyval.i) = DIV_ASSIGN; ;}
     break;
 
   case 459:
-#line 1676 "grammar.y"
+#line 1681 "grammar.y"
     { (yyval.i) = MOD_ASSIGN; ;}
     break;
 
   case 460:
-#line 1677 "grammar.y"
+#line 1682 "grammar.y"
     { (yyval.i) = ADD_ASSIGN; ;}
     break;
 
   case 461:
-#line 1678 "grammar.y"
+#line 1683 "grammar.y"
     { (yyval.i) = SUB_ASSIGN; ;}
     break;
 
   case 462:
-#line 1679 "grammar.y"
+#line 1684 "grammar.y"
     { (yyval.i) = LEFT_ASSIGN; ;}
     break;
 
   case 463:
-#line 1680 "grammar.y"
+#line 1685 "grammar.y"
     { (yyval.i) = RIGHT_ASSIGN; ;}
     break;
 
   case 464:
-#line 1681 "grammar.y"
+#line 1686 "grammar.y"
     { (yyval.i) = AND_ASSIGN; ;}
     break;
 
   case 465:
-#line 1682 "grammar.y"
+#line 1687 "grammar.y"
     { (yyval.i) = XOR_ASSIGN; ;}
     break;
 
   case 466:
-#line 1683 "grammar.y"
+#line 1688 "grammar.y"
     { (yyval.i) = OR_ASSIGN; ;}
     break;
 
   case 467:
-#line 1687 "grammar.y"
+#line 1692 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 468:
-#line 1688 "grammar.y"
+#line 1693 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 469:
-#line 1689 "grammar.y"
+#line 1694 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 471:
-#line 1694 "grammar.y"
+#line 1699 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 472:
-#line 1695 "grammar.y"
+#line 1700 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 473:
-#line 1696 "grammar.y"
+#line 1701 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 475:
-#line 1701 "grammar.y"
+#line 1706 "grammar.y"
     { (yyval.exp) = MkExpDummy(); (yyval.exp).loc = (yyloc); /*printf("Sorry, didn't mean that syntax error\n");*/ ;}
     break;
 
   case 477:
-#line 1703 "grammar.y"
+#line 1708 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[-1].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 478:
-#line 1705 "grammar.y"
+#line 1710 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 479:
-#line 1706 "grammar.y"
+#line 1711 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 480:
-#line 1708 "grammar.y"
+#line 1713 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), (yyvsp[0].list)); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 481:
-#line 1709 "grammar.y"
+#line 1714 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), (yyvsp[0].list)); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 482:
-#line 1710 "grammar.y"
+#line 1715 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-4].exp), (yyvsp[-2].list)); (yyval.exp).call.argLoc.start = (yylsp[-3]).start; (yyval.exp).call.argLoc.end = (yylsp[-1]).end;(yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 483:
-#line 1711 "grammar.y"
+#line 1716 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList() ); (yyloc).end = yylloc.start; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = yylloc.start; /*@2.end; $$.call.argLoc.end.charPos++;*/ ;}
     break;
 
   case 484:
-#line 1712 "grammar.y"
+#line 1717 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 485:
-#line 1714 "grammar.y"
+#line 1719 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), (yyvsp[0].list)); (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 486:
-#line 1715 "grammar.y"
+#line 1720 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-4].exp), (yyvsp[-2].list)); (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-3]).start; (yyval.exp).call.argLoc.end = (yylsp[-1]).end; (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 487:
-#line 1716 "grammar.y"
+#line 1721 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList() ); (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[-1]).end; (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 488:
-#line 1717 "grammar.y"
+#line 1722 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 489:
-#line 1721 "grammar.y"
+#line 1726 "grammar.y"
     { (yyval.exp) = MkExpDummy(); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 491:
-#line 1723 "grammar.y"
+#line 1728 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[-1].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 492:
-#line 1725 "grammar.y"
+#line 1730 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 493:
-#line 1726 "grammar.y"
+#line 1731 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 494:
-#line 1728 "grammar.y"
+#line 1733 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), (yyvsp[0].list)); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 495:
-#line 1729 "grammar.y"
+#line 1734 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), (yyvsp[0].list)); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 496:
-#line 1730 "grammar.y"
+#line 1735 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-4].exp), (yyvsp[-2].list)); (yyval.exp).call.argLoc.start = (yylsp[-3]).start; (yyval.exp).call.argLoc.end = (yylsp[-1]).end;(yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 497:
-#line 1731 "grammar.y"
+#line 1736 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList() ); (yyloc).end = yylloc.start; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = yylloc.start; /*@2.end; $$.call.argLoc.end.charPos++;*/ ;}
     break;
 
   case 498:
-#line 1732 "grammar.y"
+#line 1737 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 499:
-#line 1734 "grammar.y"
+#line 1739 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), (yyvsp[0].list)); (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[0]).end; (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 500:
-#line 1735 "grammar.y"
+#line 1740 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-4].exp), (yyvsp[-2].list)); (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-3]).start; (yyval.exp).call.argLoc.end = (yylsp[-1]).end; (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 501:
-#line 1736 "grammar.y"
+#line 1741 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[-2].exp), MkList() ); (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[-1]).start; (yyval.exp).call.argLoc.end = (yylsp[-1]).end; (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 502:
-#line 1737 "grammar.y"
+#line 1742 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[-2].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 503:
-#line 1741 "grammar.y"
+#line 1746 "grammar.y"
     { (yyval.exp) = MkExpOp(null, INC_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 504:
-#line 1742 "grammar.y"
+#line 1747 "grammar.y"
     { (yyval.exp) = MkExpOp(null, DEC_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 505:
-#line 1743 "grammar.y"
+#line 1748 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 506:
-#line 1744 "grammar.y"
+#line 1749 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 507:
-#line 1745 "grammar.y"
+#line 1750 "grammar.y"
     { (yyval.exp) = MkExpOp(null, SIZEOF, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 508:
-#line 1746 "grammar.y"
+#line 1751 "grammar.y"
     { (yyval.exp) = MkExpOp(null, SIZEOF, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 509:
-#line 1747 "grammar.y"
+#line 1752 "grammar.y"
     { (yyval.exp) = MkExpTypeSize((yyvsp[-2].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 510:
-#line 1748 "grammar.y"
+#line 1753 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[-2].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 511:
-#line 1749 "grammar.y"
+#line 1754 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[-2].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 517:
-#line 1765 "grammar.y"
+#line 1770 "grammar.y"
     { (yyval.exp) = MkExpCast((yyvsp[-2].typeName), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 519:
-#line 1770 "grammar.y"
+#line 1775 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '*', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 520:
-#line 1771 "grammar.y"
+#line 1776 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '/', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 521:
-#line 1772 "grammar.y"
+#line 1777 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '%', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 522:
-#line 1773 "grammar.y"
+#line 1778 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '*', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 523:
-#line 1774 "grammar.y"
+#line 1779 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '/', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 524:
-#line 1775 "grammar.y"
+#line 1780 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '%', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 526:
-#line 1780 "grammar.y"
+#line 1785 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '+', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 527:
-#line 1781 "grammar.y"
+#line 1786 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '+', null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 528:
-#line 1782 "grammar.y"
+#line 1787 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '-', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 529:
-#line 1783 "grammar.y"
+#line 1788 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '-', null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 530:
-#line 1784 "grammar.y"
+#line 1789 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '+', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 531:
-#line 1785 "grammar.y"
+#line 1790 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '+', null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 532:
-#line 1786 "grammar.y"
+#line 1791 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '-', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 533:
-#line 1787 "grammar.y"
+#line 1792 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '-', null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 535:
-#line 1792 "grammar.y"
+#line 1797 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LEFT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 536:
-#line 1793 "grammar.y"
+#line 1798 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), RIGHT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 537:
-#line 1794 "grammar.y"
+#line 1799 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LEFT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 538:
-#line 1795 "grammar.y"
+#line 1800 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), RIGHT_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 540:
-#line 1801 "grammar.y"
+#line 1806 "grammar.y"
     {
       if((yyvsp[-1].exp).type == identifierExp)
       {
@@ -13980,302 +14105,302 @@ yyreduce:
     break;
 
   case 541:
-#line 1850 "grammar.y"
+#line 1855 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '>', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 542:
-#line 1851 "grammar.y"
+#line 1856 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 543:
-#line 1852 "grammar.y"
+#line 1857 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), GE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 544:
-#line 1853 "grammar.y"
+#line 1858 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '<', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 545:
-#line 1854 "grammar.y"
+#line 1859 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '>', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 546:
-#line 1855 "grammar.y"
+#line 1860 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), LE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 547:
-#line 1856 "grammar.y"
+#line 1861 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), GE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 549:
-#line 1861 "grammar.y"
+#line 1866 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 550:
-#line 1862 "grammar.y"
+#line 1867 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 551:
-#line 1863 "grammar.y"
+#line 1868 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 552:
-#line 1864 "grammar.y"
+#line 1869 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 553:
-#line 1866 "grammar.y"
+#line 1871 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, MkExpDummy()); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 554:
-#line 1867 "grammar.y"
+#line 1872 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, MkExpDummy()); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 555:
-#line 1868 "grammar.y"
+#line 1873 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, MkExpDummy()); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 556:
-#line 1869 "grammar.y"
+#line 1874 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, MkExpDummy()); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 557:
-#line 1871 "grammar.y"
+#line 1876 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 558:
-#line 1872 "grammar.y"
+#line 1877 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 559:
-#line 1873 "grammar.y"
+#line 1878 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), EQ_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 560:
-#line 1874 "grammar.y"
+#line 1879 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), NE_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 562:
-#line 1879 "grammar.y"
+#line 1884 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 563:
-#line 1880 "grammar.y"
+#line 1885 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 564:
-#line 1882 "grammar.y"
+#line 1887 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 565:
-#line 1883 "grammar.y"
+#line 1888 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '&', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 567:
-#line 1888 "grammar.y"
+#line 1893 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 568:
-#line 1889 "grammar.y"
+#line 1894 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 569:
-#line 1891 "grammar.y"
+#line 1896 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 570:
-#line 1892 "grammar.y"
+#line 1897 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '^', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 572:
-#line 1897 "grammar.y"
+#line 1902 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 573:
-#line 1898 "grammar.y"
+#line 1903 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 574:
-#line 1900 "grammar.y"
+#line 1905 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 575:
-#line 1901 "grammar.y"
+#line 1906 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), '|', (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 577:
-#line 1906 "grammar.y"
+#line 1911 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), AND_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 578:
-#line 1907 "grammar.y"
+#line 1912 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), AND_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 580:
-#line 1912 "grammar.y"
+#line 1917 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), OR_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 581:
-#line 1913 "grammar.y"
+#line 1918 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), OR_OP, (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 583:
-#line 1918 "grammar.y"
+#line 1923 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 584:
-#line 1919 "grammar.y"
+#line 1924 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 585:
-#line 1920 "grammar.y"
+#line 1925 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 586:
-#line 1921 "grammar.y"
+#line 1926 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 587:
-#line 1922 "grammar.y"
+#line 1927 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 588:
-#line 1923 "grammar.y"
+#line 1928 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 589:
-#line 1924 "grammar.y"
+#line 1929 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 590:
-#line 1925 "grammar.y"
+#line 1930 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 591:
-#line 1927 "grammar.y"
+#line 1932 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 592:
-#line 1928 "grammar.y"
+#line 1933 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 593:
-#line 1929 "grammar.y"
+#line 1934 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 594:
-#line 1930 "grammar.y"
+#line 1935 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 595:
-#line 1931 "grammar.y"
+#line 1936 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 596:
-#line 1932 "grammar.y"
+#line 1937 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 597:
-#line 1933 "grammar.y"
+#line 1938 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 598:
-#line 1934 "grammar.y"
+#line 1939 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-3].exp), (yyvsp[-1].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[-1]); ;}
     break;
 
   case 599:
-#line 1936 "grammar.y"
+#line 1941 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 600:
-#line 1937 "grammar.y"
+#line 1942 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 601:
-#line 1938 "grammar.y"
+#line 1943 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 602:
-#line 1939 "grammar.y"
+#line 1944 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 603:
-#line 1941 "grammar.y"
+#line 1946 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 604:
-#line 1942 "grammar.y"
+#line 1947 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 605:
-#line 1943 "grammar.y"
+#line 1948 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 606:
-#line 1944 "grammar.y"
+#line 1949 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[-4].exp), (yyvsp[-2].list), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 607:
-#line 1947 "grammar.y"
+#line 1952 "grammar.y"
     { 
          (yyval.exp) = MkExpCondition((yyvsp[-2].exp), MkListOne(MkExpDummy()), MkExpDummy()); 
          (yyval.exp).loc = (yyloc); 
@@ -14285,658 +14410,658 @@ yyreduce:
     break;
 
   case 608:
-#line 1954 "grammar.y"
+#line 1959 "grammar.y"
     {
          (yyval.exp) = MkExpCondition((yyvsp[-2].exp), MkListOne(MkExpDummy()), MkExpDummy()); (yyval.exp).loc = (yyloc); ((Expression)(yyval.exp).cond.exp->last).loc = (yylsp[-1]); (yyval.exp).cond.elseExp.loc = (yylsp[0]);
       ;}
     break;
 
   case 609:
-#line 1958 "grammar.y"
+#line 1963 "grammar.y"
     {
          (yyval.exp) = MkExpCondition((yyvsp[-1].exp), MkListOne(MkExpDummy()), MkExpDummy()); (yyval.exp).loc = (yyloc); ((Expression)(yyval.exp).cond.exp->last).loc = (yylsp[0]); (yyval.exp).cond.elseExp.loc = (yylsp[0]);
       ;}
     break;
 
   case 610:
-#line 1962 "grammar.y"
+#line 1967 "grammar.y"
     {
          (yyval.exp) = MkExpCondition((yyvsp[-1].exp), MkListOne(MkExpDummy()), MkExpDummy()); (yyval.exp).loc = (yyloc); ((Expression)(yyval.exp).cond.exp->last).loc = (yylsp[0]); (yyval.exp).cond.elseExp.loc = (yylsp[0]);
       ;}
     break;
 
   case 612:
-#line 1969 "grammar.y"
+#line 1974 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 613:
-#line 1970 "grammar.y"
+#line 1975 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).op.exp2.loc = (yylsp[-1]); ;}
     break;
 
   case 614:
-#line 1971 "grammar.y"
+#line 1976 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 615:
-#line 1972 "grammar.y"
+#line 1977 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).op.exp2.loc = (yylsp[-1]); ;}
     break;
 
   case 616:
-#line 1974 "grammar.y"
+#line 1979 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 617:
-#line 1975 "grammar.y"
+#line 1980 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[-2].exp), (yyvsp[-1].i), (yyvsp[0].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 618:
-#line 1979 "grammar.y"
+#line 1984 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 619:
-#line 1980 "grammar.y"
+#line 1985 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[-1].exp)); ;}
     break;
 
   case 620:
-#line 1981 "grammar.y"
+#line 1986 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 621:
-#line 1982 "grammar.y"
+#line 1987 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 625:
-#line 1986 "grammar.y"
+#line 1991 "grammar.y"
     { FreeList((yyvsp[0].list), FreeExpression); ;}
     break;
 
   case 626:
-#line 1987 "grammar.y"
+#line 1992 "grammar.y"
     { FreeList((yyvsp[0].list), FreeExpression); ;}
     break;
 
   case 627:
-#line 1988 "grammar.y"
+#line 1993 "grammar.y"
     { FreeList((yyvsp[0].list), FreeExpression); ;}
     break;
 
   case 628:
-#line 1992 "grammar.y"
+#line 1997 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].exp)); ;}
     break;
 
   case 629:
-#line 1993 "grammar.y"
+#line 1998 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[-1].exp)); ;}
     break;
 
   case 630:
-#line 1994 "grammar.y"
+#line 1999 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 631:
-#line 1995 "grammar.y"
+#line 2000 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].exp)); ;}
     break;
 
   case 634:
-#line 2005 "grammar.y"
+#line 2010 "grammar.y"
     { (yyval.specifier) = MkSpecifier(TYPEDEF); ;}
     break;
 
   case 635:
-#line 2006 "grammar.y"
+#line 2011 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTERN); ;}
     break;
 
   case 636:
-#line 2007 "grammar.y"
+#line 2012 "grammar.y"
     { (yyval.specifier) = MkSpecifier(STATIC); ;}
     break;
 
   case 637:
-#line 2008 "grammar.y"
+#line 2013 "grammar.y"
     { (yyval.specifier) = MkSpecifier(AUTO); ;}
     break;
 
   case 638:
-#line 2009 "grammar.y"
+#line 2014 "grammar.y"
     { (yyval.specifier) = MkSpecifier(REGISTER); ;}
     break;
 
   case 639:
-#line 2013 "grammar.y"
+#line 2018 "grammar.y"
     { (yyval.specifier) = MkSpecifier(TYPEDEF); declMode = defaultAccess; ;}
     break;
 
   case 640:
-#line 2014 "grammar.y"
+#line 2019 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTERN); ;}
     break;
 
   case 641:
-#line 2015 "grammar.y"
+#line 2020 "grammar.y"
     { (yyval.specifier) = MkSpecifier(STATIC); declMode = staticAccess; ;}
     break;
 
   case 642:
-#line 2016 "grammar.y"
+#line 2021 "grammar.y"
     { (yyval.specifier) = MkSpecifier(AUTO); ;}
     break;
 
   case 643:
-#line 2017 "grammar.y"
+#line 2022 "grammar.y"
     { (yyval.specifier) = MkSpecifier(REGISTER); ;}
     break;
 
   case 644:
-#line 2021 "grammar.y"
+#line 2026 "grammar.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[0].id), null); ;}
     break;
 
   case 645:
-#line 2022 "grammar.y"
+#line 2027 "grammar.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[-2].id), (yyvsp[0].exp)); ;}
     break;
 
   case 646:
-#line 2023 "grammar.y"
+#line 2028 "grammar.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[-2].id), (yyvsp[0].exp)); ;}
     break;
 
   case 647:
-#line 2027 "grammar.y"
+#line 2032 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].enumerator)); ;}
     break;
 
   case 648:
-#line 2028 "grammar.y"
+#line 2033 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].enumerator)); ;}
     break;
 
   case 650:
-#line 2033 "grammar.y"
+#line 2038 "grammar.y"
     { memberAccessStack[++defaultMemberAccess] = publicAccess; ;}
     break;
 
   case 651:
-#line 2037 "grammar.y"
+#line 2042 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[0].id), null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 652:
-#line 2038 "grammar.y"
+#line 2043 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[0].specifier).name), null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 653:
-#line 2042 "grammar.y"
+#line 2047 "grammar.y"
     { (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 654:
-#line 2043 "grammar.y"
+#line 2048 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-2].id), null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 655:
-#line 2044 "grammar.y"
+#line 2049 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[-2].specifier).name), null); FreeSpecifier((yyvsp[-2].specifier)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 656:
-#line 2048 "grammar.y"
+#line 2053 "grammar.y"
     { (yyval.specifier) = MkEnum(null, (yyvsp[0].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 657:
-#line 2049 "grammar.y"
+#line 2054 "grammar.y"
     { (yyval.specifier) = MkEnum(null, null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 658:
-#line 2051 "grammar.y"
+#line 2056 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-2].id), (yyvsp[0].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 659:
-#line 2052 "grammar.y"
+#line 2057 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-3].id), (yyvsp[-1].list));  (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 660:
-#line 2053 "grammar.y"
+#line 2058 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-2].id), null);  (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 661:
-#line 2054 "grammar.y"
+#line 2059 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-4].id), (yyvsp[-2].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[0].list);  POP_DEFAULT_ACCESS ;}
     break;
 
   case 662:
-#line 2055 "grammar.y"
+#line 2060 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-4].id), (yyvsp[-2].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[0].list);  POP_DEFAULT_ACCESS ;}
     break;
 
   case 663:
-#line 2057 "grammar.y"
+#line 2062 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[-2].specifier).name), (yyvsp[0].list)); (yyval.specifier).loc = (yyloc); FreeSpecifier((yyvsp[-2].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 664:
-#line 2058 "grammar.y"
+#line 2063 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[-3].specifier).name), (yyvsp[-1].list)); (yyval.specifier).loc = (yyloc); FreeSpecifier((yyvsp[-3].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 665:
-#line 2059 "grammar.y"
+#line 2064 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[-2].specifier).name), null); (yyval.specifier).loc = (yyloc); FreeSpecifier((yyvsp[-2].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 666:
-#line 2060 "grammar.y"
+#line 2065 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[-4].specifier).name), (yyvsp[-2].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[0].list); FreeSpecifier((yyvsp[-4].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 667:
-#line 2061 "grammar.y"
+#line 2066 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[-4].specifier).name), (yyvsp[-2].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[0].list); FreeSpecifier((yyvsp[-4].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 668:
-#line 2065 "grammar.y"
+#line 2070 "grammar.y"
     { (yyval.id) = (yyvsp[0].id); if(declMode) DeclClassAddNameSpace(globalContext.nextID++, (yyvsp[0].id).string); ;}
     break;
 
   case 669:
-#line 2066 "grammar.y"
+#line 2071 "grammar.y"
     { (yyval.id) = MkIdentifier((yyvsp[0].specifier).name); if(declMode) DeclClass(globalContext.nextID++, (yyvsp[0].specifier).name); FreeSpecifier((yyvsp[0].specifier)); ;}
     break;
 
   case 670:
-#line 2070 "grammar.y"
+#line 2075 "grammar.y"
     { (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 671:
-#line 2071 "grammar.y"
+#line 2076 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-4].id), null); (yyval.specifier).baseSpecs = (yyvsp[-2].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 672:
-#line 2072 "grammar.y"
+#line 2077 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-2].id), null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 673:
-#line 2076 "grammar.y"
+#line 2081 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-4].id), (yyvsp[0].list)); (yyval.specifier).baseSpecs = (yyvsp[-2].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 674:
-#line 2077 "grammar.y"
+#line 2082 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-5].id), (yyvsp[-1].list)); (yyval.specifier).baseSpecs = (yyvsp[-3].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 675:
-#line 2078 "grammar.y"
+#line 2083 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-4].id), null); (yyval.specifier).baseSpecs = (yyvsp[-2].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 676:
-#line 2079 "grammar.y"
+#line 2084 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-6].id), (yyvsp[-2].list)); (yyval.specifier).baseSpecs = (yyvsp[-4].list); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 677:
-#line 2080 "grammar.y"
+#line 2085 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-6].id), (yyvsp[-2].list)); (yyval.specifier).baseSpecs = (yyvsp[-4].list); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 678:
-#line 2081 "grammar.y"
+#line 2086 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-7].id), (yyvsp[-3].list)); (yyval.specifier).baseSpecs = (yyvsp[-5].list); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 679:
-#line 2082 "grammar.y"
+#line 2087 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-7].id), (yyvsp[-3].list)); (yyval.specifier).baseSpecs = (yyvsp[-5].list); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 680:
-#line 2083 "grammar.y"
+#line 2088 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-6].id), null); (yyval.specifier).baseSpecs = (yyvsp[-4].list); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 681:
-#line 2084 "grammar.y"
+#line 2089 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-6].id), null); (yyval.specifier).baseSpecs = (yyvsp[-4].list); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 682:
-#line 2086 "grammar.y"
+#line 2091 "grammar.y"
     { (yyval.specifier) = MkEnum(null, (yyvsp[0].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 683:
-#line 2087 "grammar.y"
+#line 2092 "grammar.y"
     { (yyval.specifier) = MkEnum(null, null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 684:
-#line 2089 "grammar.y"
+#line 2094 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-2].id), (yyvsp[0].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 685:
-#line 2090 "grammar.y"
+#line 2095 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-3].id), (yyvsp[-1].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 686:
-#line 2091 "grammar.y"
+#line 2096 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-2].id), null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 687:
-#line 2092 "grammar.y"
+#line 2097 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-4].id), (yyvsp[-2].list)); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 688:
-#line 2093 "grammar.y"
+#line 2098 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[-4].id), (yyvsp[-2].list)); (yyval.specifier).definitions = (yyvsp[0].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 693:
-#line 2107 "grammar.y"
+#line 2112 "grammar.y"
     { (yyval.specifier) = MkSpecifierExtended(yytext); ;}
     break;
 
   case 694:
-#line 2108 "grammar.y"
+#line 2113 "grammar.y"
     { (yyval.specifier) = MkSpecifierExtended((yyvsp[0].string)); delete (yyvsp[0].string); ;}
     break;
 
   case 695:
-#line 2112 "grammar.y"
+#line 2117 "grammar.y"
     { (yyval.specifier) = MkSpecifier(CONST); ;}
     break;
 
   case 696:
-#line 2113 "grammar.y"
+#line 2118 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VOLATILE); ;}
     break;
 
   case 697:
-#line 2114 "grammar.y"
+#line 2119 "grammar.y"
     { (yyval.specifier) = (yyvsp[0].specifier); ;}
     break;
 
   case 698:
-#line 2119 "grammar.y"
+#line 2124 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 699:
-#line 2120 "grammar.y"
+#line 2125 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier));  ;}
     break;
 
   case 700:
-#line 2124 "grammar.y"
+#line 2129 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VOID); ;}
     break;
 
   case 701:
-#line 2125 "grammar.y"
+#line 2130 "grammar.y"
     { (yyval.specifier) = MkSpecifier(CHAR); ;}
     break;
 
   case 702:
-#line 2126 "grammar.y"
+#line 2131 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SHORT); ;}
     break;
 
   case 703:
-#line 2127 "grammar.y"
+#line 2132 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT); ;}
     break;
 
   case 704:
-#line 2128 "grammar.y"
+#line 2133 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UINT); ;}
     break;
 
   case 705:
-#line 2129 "grammar.y"
+#line 2134 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT64); ;}
     break;
 
   case 706:
-#line 2130 "grammar.y"
+#line 2135 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VALIST); ;}
     break;
 
   case 707:
-#line 2131 "grammar.y"
+#line 2136 "grammar.y"
     { (yyval.specifier) = MkSpecifier(LONG); ;}
     break;
 
   case 708:
-#line 2132 "grammar.y"
+#line 2137 "grammar.y"
     { (yyval.specifier) = MkSpecifier(FLOAT); ;}
     break;
 
   case 709:
-#line 2133 "grammar.y"
+#line 2138 "grammar.y"
     { (yyval.specifier) = MkSpecifier(DOUBLE); ;}
     break;
 
   case 710:
-#line 2134 "grammar.y"
+#line 2139 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SIGNED); ;}
     break;
 
   case 711:
-#line 2135 "grammar.y"
+#line 2140 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UNSIGNED); ;}
     break;
 
   case 712:
-#line 2136 "grammar.y"
+#line 2141 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTENSION); ;}
     break;
 
   case 716:
-#line 2140 "grammar.y"
+#line 2145 "grammar.y"
     { (yyval.specifier) = MkSpecifierTypeOf((yyvsp[-1].exp)); ;}
     break;
 
   case 717:
-#line 2141 "grammar.y"
+#line 2146 "grammar.y"
     { (yyval.specifier) = MkSpecifierSubClass((yyvsp[-1].specifier)); ;}
     break;
 
   case 718:
-#line 2142 "grammar.y"
+#line 2147 "grammar.y"
     { _DeclClass(0, (yyvsp[-1].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[-1].id).string)); FreeIdentifier((yyvsp[-1].id)); ;}
     break;
 
   case 719:
-#line 2143 "grammar.y"
+#line 2148 "grammar.y"
     { (yyval.specifier) = MkSpecifier(THISCLASS); ;}
     break;
 
   case 720:
-#line 2144 "grammar.y"
+#line 2149 "grammar.y"
     { (yyval.specifier) = MkSpecifier(TYPED_OBJECT); ;}
     break;
 
   case 721:
-#line 2145 "grammar.y"
+#line 2150 "grammar.y"
     { (yyval.specifier) = MkSpecifier(ANY_OBJECT); ;}
     break;
 
   case 722:
-#line 2149 "grammar.y"
+#line 2154 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VOID); ;}
     break;
 
   case 723:
-#line 2150 "grammar.y"
+#line 2155 "grammar.y"
     { (yyval.specifier) = MkSpecifier(CHAR); ;}
     break;
 
   case 724:
-#line 2151 "grammar.y"
+#line 2156 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SHORT); ;}
     break;
 
   case 725:
-#line 2152 "grammar.y"
+#line 2157 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT); ;}
     break;
 
   case 726:
-#line 2153 "grammar.y"
+#line 2158 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UINT); ;}
     break;
 
   case 727:
-#line 2154 "grammar.y"
+#line 2159 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT64); ;}
     break;
 
   case 728:
-#line 2155 "grammar.y"
+#line 2160 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VALIST); ;}
     break;
 
   case 729:
-#line 2156 "grammar.y"
+#line 2161 "grammar.y"
     { (yyval.specifier) = MkSpecifier(LONG); ;}
     break;
 
   case 730:
-#line 2157 "grammar.y"
+#line 2162 "grammar.y"
     { (yyval.specifier) = MkSpecifier(FLOAT); ;}
     break;
 
   case 731:
-#line 2158 "grammar.y"
+#line 2163 "grammar.y"
     { (yyval.specifier) = MkSpecifier(DOUBLE); ;}
     break;
 
   case 732:
-#line 2159 "grammar.y"
+#line 2164 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SIGNED); ;}
     break;
 
   case 733:
-#line 2160 "grammar.y"
+#line 2165 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UNSIGNED); ;}
     break;
 
   case 734:
-#line 2161 "grammar.y"
+#line 2166 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTENSION); ;}
     break;
 
   case 738:
-#line 2165 "grammar.y"
+#line 2170 "grammar.y"
     { (yyval.specifier) = MkSpecifierTypeOf((yyvsp[-1].exp)); ;}
     break;
 
   case 739:
-#line 2166 "grammar.y"
+#line 2171 "grammar.y"
     { (yyval.specifier) = MkSpecifierSubClass((yyvsp[-1].specifier)); ;}
     break;
 
   case 740:
-#line 2167 "grammar.y"
+#line 2172 "grammar.y"
     { _DeclClass(0, (yyvsp[-1].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[-1].id).string)); FreeIdentifier((yyvsp[-1].id)); ;}
     break;
 
   case 741:
-#line 2168 "grammar.y"
+#line 2173 "grammar.y"
     { (yyval.specifier) = MkSpecifier(THISCLASS); ;}
     break;
 
   case 742:
-#line 2175 "grammar.y"
+#line 2180 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[0].declarator), null); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 743:
-#line 2177 "grammar.y"
+#line 2182 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[-1].declarator), null); (yyval.declarator).structDecl.attrib = (yyvsp[0].string); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 744:
-#line 2179 "grammar.y"
+#line 2184 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator(null, (yyvsp[0].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 745:
-#line 2181 "grammar.y"
+#line 2186 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[-2].declarator), (yyvsp[0].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 746:
-#line 2183 "grammar.y"
+#line 2188 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[-4].declarator), (yyvsp[-2].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[0].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 747:
-#line 2185 "grammar.y"
+#line 2190 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator(null, (yyvsp[0].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 748:
-#line 2187 "grammar.y"
+#line 2192 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[-2].declarator), (yyvsp[0].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 749:
-#line 2189 "grammar.y"
+#line 2194 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[-4].declarator), (yyvsp[-2].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[0].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 750:
-#line 2191 "grammar.y"
+#line 2196 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[-4].declarator), (yyvsp[-2].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[0].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 751:
-#line 2193 "grammar.y"
+#line 2198 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[-4].declarator), (yyvsp[-2].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[0].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 752:
-#line 2197 "grammar.y"
+#line 2202 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].declarator)); ;}
     break;
 
   case 753:
-#line 2198 "grammar.y"
+#line 2203 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].declarator)); ;}
     break;
 
   case 754:
-#line 2203 "grammar.y"
+#line 2208 "grammar.y"
     {
          (yyval.specifier) = MkStructOrUnion((yyvsp[-1].specifierType), (yyvsp[0].id), null);
          (yyval.specifier).addNameSpace = true;
@@ -14945,7 +15070,7 @@ yyreduce:
     break;
 
   case 755:
-#line 2209 "grammar.y"
+#line 2214 "grammar.y"
     {
          (yyval.specifier) = MkStructOrUnion((yyvsp[-1].specifierType), MkIdentifier((yyvsp[0].specifier).name), null);
          (yyval.specifier).ctx = PushContext();
@@ -14954,57 +15079,57 @@ yyreduce:
     break;
 
   case 756:
-#line 2217 "grammar.y"
+#line 2222 "grammar.y"
     { (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 757:
-#line 2218 "grammar.y"
+#line 2223 "grammar.y"
     { (yyval.specifier) = (yyvsp[-2].specifier); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 758:
-#line 2219 "grammar.y"
+#line 2224 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 759:
-#line 2223 "grammar.y"
+#line 2228 "grammar.y"
     { (yyval.specifier) = (yyvsp[-2].specifier); AddStructDefinitions((yyvsp[-2].specifier), (yyvsp[0].list));  POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 760:
-#line 2224 "grammar.y"
+#line 2229 "grammar.y"
     { (yyval.specifier) = (yyvsp[-2].specifier); AddStructDefinitions((yyvsp[-2].specifier), (yyvsp[0].list));  POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 761:
-#line 2225 "grammar.y"
+#line 2230 "grammar.y"
     { (yyval.specifier) = (yyvsp[-2].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 762:
-#line 2227 "grammar.y"
+#line 2232 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, (yyvsp[0].list)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 763:
-#line 2228 "grammar.y"
+#line 2233 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, (yyvsp[0].list)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 764:
-#line 2229 "grammar.y"
+#line 2234 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 765:
-#line 2233 "grammar.y"
+#line 2238 "grammar.y"
     { (yyval.specifier) = (yyvsp[0].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 766:
-#line 2238 "grammar.y"
+#line 2243 "grammar.y"
     {
         (yyval.specifier) = (yyvsp[0].specifier);
         if(declMode)
@@ -15015,7 +15140,7 @@ yyreduce:
     break;
 
   case 767:
-#line 2246 "grammar.y"
+#line 2251 "grammar.y"
     {
       Symbol symbol = ((yyvsp[-3].specifier).addNameSpace ? DeclClassAddNameSpace : DeclClass)(globalContext.nextID++, (yyvsp[-3].specifier).id.string);
       (yyval.specifier) = (yyvsp[-3].specifier);
@@ -15024,7 +15149,7 @@ yyreduce:
     break;
 
   case 768:
-#line 2255 "grammar.y"
+#line 2260 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[-2].specifier);
       (yyval.specifier).baseSpecs = (yyvsp[0].list);
@@ -15033,27 +15158,27 @@ yyreduce:
     break;
 
   case 769:
-#line 2263 "grammar.y"
+#line 2268 "grammar.y"
     { (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 770:
-#line 2265 "grammar.y"
+#line 2270 "grammar.y"
     { (yyval.specifier) = (yyvsp[-2].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 771:
-#line 2266 "grammar.y"
+#line 2271 "grammar.y"
     { POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 772:
-#line 2267 "grammar.y"
+#line 2272 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 773:
-#line 2272 "grammar.y"
+#line 2277 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[-2].specifier);
       (yyval.specifier).definitions = (yyvsp[0].list);
@@ -15063,7 +15188,7 @@ yyreduce:
     break;
 
   case 774:
-#line 2279 "grammar.y"
+#line 2284 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[-2].specifier);
       (yyval.specifier).definitions = (yyvsp[0].list);
@@ -15073,12 +15198,12 @@ yyreduce:
     break;
 
   case 775:
-#line 2286 "grammar.y"
+#line 2291 "grammar.y"
     { (yyval.specifier) = (yyvsp[-2].specifier); POP_DEFAULT_ACCESS PopContext(curContext);;}
     break;
 
   case 776:
-#line 2289 "grammar.y"
+#line 2294 "grammar.y"
     {
         PopContext(curContext);
         if(!declMode)
@@ -15094,7 +15219,7 @@ yyreduce:
     break;
 
   case 777:
-#line 2302 "grammar.y"
+#line 2307 "grammar.y"
     {
         PopContext(curContext);
 
@@ -15111,347 +15236,347 @@ yyreduce:
     break;
 
   case 778:
-#line 2316 "grammar.y"
+#line 2321 "grammar.y"
     { POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 779:
-#line 2319 "grammar.y"
+#line 2324 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, (yyvsp[0].list)); POP_DEFAULT_ACCESS  ;}
     break;
 
   case 780:
-#line 2321 "grammar.y"
+#line 2326 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, (yyvsp[0].list)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 781:
-#line 2323 "grammar.y"
+#line 2328 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[-2].specifierType), null, null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 782:
-#line 2327 "grammar.y"
+#line 2332 "grammar.y"
     { (yyval.specifierType) = structSpecifier; memberAccessStack[++defaultMemberAccess] = publicAccess; ;}
     break;
 
   case 783:
-#line 2328 "grammar.y"
+#line 2333 "grammar.y"
     { (yyval.specifierType) = unionSpecifier; memberAccessStack[++defaultMemberAccess] = publicAccess; ;}
     break;
 
   case 784:
-#line 2332 "grammar.y"
+#line 2337 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 785:
-#line 2333 "grammar.y"
+#line 2338 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 786:
-#line 2334 "grammar.y"
+#line 2339 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 787:
-#line 2335 "grammar.y"
+#line 2340 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 788:
-#line 2336 "grammar.y"
+#line 2341 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 789:
-#line 2337 "grammar.y"
+#line 2342 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 790:
-#line 2338 "grammar.y"
+#line 2343 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 791:
-#line 2339 "grammar.y"
+#line 2344 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 792:
-#line 2343 "grammar.y"
+#line 2348 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 793:
-#line 2344 "grammar.y"
+#line 2349 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 794:
-#line 2345 "grammar.y"
+#line 2350 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 795:
-#line 2346 "grammar.y"
+#line 2351 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 796:
-#line 2347 "grammar.y"
+#line 2352 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 797:
-#line 2348 "grammar.y"
+#line 2353 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 798:
-#line 2349 "grammar.y"
+#line 2354 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 799:
-#line 2350 "grammar.y"
+#line 2355 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 800:
-#line 2351 "grammar.y"
+#line 2356 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 801:
-#line 2352 "grammar.y"
+#line 2357 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 802:
-#line 2356 "grammar.y"
+#line 2361 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 803:
-#line 2357 "grammar.y"
+#line 2362 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 804:
-#line 2358 "grammar.y"
+#line 2363 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 805:
-#line 2359 "grammar.y"
+#line 2364 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 806:
-#line 2360 "grammar.y"
+#line 2365 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 807:
-#line 2361 "grammar.y"
+#line 2366 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 808:
-#line 2362 "grammar.y"
+#line 2367 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 809:
-#line 2363 "grammar.y"
+#line 2368 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 810:
-#line 2364 "grammar.y"
+#line 2369 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 811:
-#line 2365 "grammar.y"
+#line 2370 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 812:
-#line 2369 "grammar.y"
+#line 2374 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 813:
-#line 2370 "grammar.y"
+#line 2375 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 814:
-#line 2371 "grammar.y"
+#line 2376 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 815:
-#line 2372 "grammar.y"
+#line 2377 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 816:
-#line 2373 "grammar.y"
+#line 2378 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 817:
-#line 2374 "grammar.y"
+#line 2379 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 818:
-#line 2375 "grammar.y"
+#line 2380 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 819:
-#line 2376 "grammar.y"
+#line 2381 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 820:
-#line 2377 "grammar.y"
+#line 2382 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 821:
-#line 2378 "grammar.y"
+#line 2383 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 822:
-#line 2379 "grammar.y"
+#line 2384 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 823:
-#line 2380 "grammar.y"
+#line 2385 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 824:
-#line 2384 "grammar.y"
+#line 2389 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 825:
-#line 2385 "grammar.y"
+#line 2390 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 826:
-#line 2386 "grammar.y"
+#line 2391 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 827:
-#line 2387 "grammar.y"
+#line 2392 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 828:
-#line 2388 "grammar.y"
+#line 2393 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 829:
-#line 2389 "grammar.y"
+#line 2394 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 830:
-#line 2390 "grammar.y"
+#line 2395 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 831:
-#line 2391 "grammar.y"
+#line 2396 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 832:
-#line 2392 "grammar.y"
+#line 2397 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 833:
-#line 2393 "grammar.y"
+#line 2398 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 834:
-#line 2397 "grammar.y"
+#line 2402 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 835:
-#line 2398 "grammar.y"
+#line 2403 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 836:
-#line 2402 "grammar.y"
+#line 2407 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifier(PRIVATE)); ;}
     break;
 
   case 837:
-#line 2403 "grammar.y"
+#line 2408 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifier(PUBLIC)); ;}
     break;
 
   case 838:
-#line 2404 "grammar.y"
+#line 2409 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 839:
-#line 2405 "grammar.y"
+#line 2410 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 840:
-#line 2406 "grammar.y"
+#line 2411 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 841:
-#line 2407 "grammar.y"
+#line 2412 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 842:
-#line 2408 "grammar.y"
+#line 2413 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 843:
-#line 2409 "grammar.y"
+#line 2414 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 844:
-#line 2411 "grammar.y"
+#line 2416 "grammar.y"
     { _DeclClass(0, (yyvsp[0].id).string); (yyval.list) = MkListOne(MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id)); ;}
     break;
 
   case 845:
-#line 2412 "grammar.y"
+#line 2417 "grammar.y"
     { _DeclClass(0, (yyvsp[0].id).string); ListAdd((yyvsp[-1].list), MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id)); ;}
     break;
 
   case 846:
-#line 2415 "grammar.y"
+#line 2420 "grammar.y"
     {
          // if($1._class && !$1._class.name)
          if((yyvsp[-3].id)._class)
@@ -15472,7 +15597,7 @@ yyreduce:
     break;
 
   case 847:
-#line 2433 "grammar.y"
+#line 2438 "grammar.y"
     {
          if((yyvsp[-3].id)._class && !(yyvsp[-3].id)._class.name)
          {
@@ -15489,52 +15614,52 @@ yyreduce:
     break;
 
   case 849:
-#line 2450 "grammar.y"
+#line 2455 "grammar.y"
     { (yyval.list) = MkListOne(MkStructOrUnion((yyvsp[0].specifierType), null, null)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 850:
-#line 2454 "grammar.y"
+#line 2459 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 851:
-#line 2455 "grammar.y"
+#line 2460 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 852:
-#line 2456 "grammar.y"
+#line 2461 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 853:
-#line 2457 "grammar.y"
+#line 2462 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 854:
-#line 2458 "grammar.y"
+#line 2463 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 855:
-#line 2459 "grammar.y"
+#line 2464 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 856:
-#line 2460 "grammar.y"
+#line 2465 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id));}
     break;
 
   case 857:
-#line 2461 "grammar.y"
+#line 2466 "grammar.y"
     { ListAdd((yyvsp[-1].list), MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id));}
     break;
 
   case 858:
-#line 2463 "grammar.y"
+#line 2468 "grammar.y"
     {
          // if($1._class && !$1._class.name)
          if((yyvsp[-3].id)._class)
@@ -15555,7 +15680,7 @@ yyreduce:
     break;
 
   case 859:
-#line 2481 "grammar.y"
+#line 2486 "grammar.y"
     {
          if((yyvsp[-3].id)._class && !(yyvsp[-3].id)._class.name)
          {
@@ -15572,67 +15697,67 @@ yyreduce:
     break;
 
   case 860:
-#line 2497 "grammar.y"
+#line 2502 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 861:
-#line 2498 "grammar.y"
+#line 2503 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 862:
-#line 2499 "grammar.y"
+#line 2504 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 863:
-#line 2500 "grammar.y"
+#line 2505 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 864:
-#line 2501 "grammar.y"
+#line 2506 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 865:
-#line 2502 "grammar.y"
+#line 2507 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 866:
-#line 2503 "grammar.y"
+#line 2508 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 867:
-#line 2504 "grammar.y"
+#line 2509 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 868:
-#line 2505 "grammar.y"
+#line 2510 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 869:
-#line 2506 "grammar.y"
+#line 2511 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 870:
-#line 2507 "grammar.y"
+#line 2512 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id));}
     break;
 
   case 871:
-#line 2508 "grammar.y"
+#line 2513 "grammar.y"
     { ListAdd((yyvsp[-1].list), MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id));}
     break;
 
   case 872:
-#line 2510 "grammar.y"
+#line 2515 "grammar.y"
     {
          // if($1._class && !$1._class.name)
          if((yyvsp[-3].id)._class)
@@ -15653,7 +15778,7 @@ yyreduce:
     break;
 
   case 873:
-#line 2528 "grammar.y"
+#line 2533 "grammar.y"
     {
          if((yyvsp[-3].id)._class && !(yyvsp[-3].id)._class.name)
          {
@@ -15670,67 +15795,67 @@ yyreduce:
     break;
 
   case 874:
-#line 2544 "grammar.y"
+#line 2549 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 875:
-#line 2545 "grammar.y"
+#line 2550 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 876:
-#line 2546 "grammar.y"
+#line 2551 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 877:
-#line 2547 "grammar.y"
+#line 2552 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 878:
-#line 2548 "grammar.y"
+#line 2553 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 879:
-#line 2549 "grammar.y"
+#line 2554 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 880:
-#line 2550 "grammar.y"
+#line 2555 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 881:
-#line 2551 "grammar.y"
+#line 2556 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 882:
-#line 2552 "grammar.y"
+#line 2557 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].specifier)); ;}
     break;
 
   case 883:
-#line 2553 "grammar.y"
+#line 2558 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].specifier)); ;}
     break;
 
   case 884:
-#line 2554 "grammar.y"
+#line 2559 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id));}
     break;
 
   case 885:
-#line 2555 "grammar.y"
+#line 2560 "grammar.y"
     { ListAdd((yyvsp[-1].list), MkSpecifierName((yyvsp[0].id).string)); FreeIdentifier((yyvsp[0].id));}
     break;
 
   case 886:
-#line 2557 "grammar.y"
+#line 2562 "grammar.y"
     {
          // if($1._class && !$1._class.name)
          if((yyvsp[-3].id)._class)
@@ -15751,7 +15876,7 @@ yyreduce:
     break;
 
   case 887:
-#line 2575 "grammar.y"
+#line 2580 "grammar.y"
     {
          if((yyvsp[-3].id)._class && !(yyvsp[-3].id)._class.name)
          {
@@ -15768,97 +15893,97 @@ yyreduce:
     break;
 
   case 888:
-#line 2591 "grammar.y"
+#line 2596 "grammar.y"
     { ListAdd((yyvsp[-2].list), null); ;}
     break;
 
   case 889:
-#line 2592 "grammar.y"
+#line 2597 "grammar.y"
     { ListAdd((yyvsp[-2].list), null); ;}
     break;
 
   case 890:
-#line 2596 "grammar.y"
+#line 2601 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[0].id)))); ;}
     break;
 
   case 891:
-#line 2597 "grammar.y"
+#line 2602 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[0].id)))); ;}
     break;
 
   case 892:
-#line 2598 "grammar.y"
+#line 2603 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[0].id)))); ;}
     break;
 
   case 893:
-#line 2599 "grammar.y"
+#line 2604 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[0].id)))); ;}
     break;
 
   case 894:
-#line 2600 "grammar.y"
+#line 2605 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[0].id)))); ;}
     break;
 
   case 895:
-#line 2604 "grammar.y"
+#line 2609 "grammar.y"
     { (yyval.declarator) = MkDeclaratorIdentifier((yyvsp[0].id)); ;}
     break;
 
   case 896:
-#line 2605 "grammar.y"
+#line 2610 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[-1].declarator)); ;}
     break;
 
   case 897:
-#line 2606 "grammar.y"
+#line 2611 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[-3].declarator), (yyvsp[-1].exp)); ;}
     break;
 
   case 898:
-#line 2607 "grammar.y"
+#line 2612 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[-3].declarator), (yyvsp[-1].exp)); ;}
     break;
 
   case 899:
-#line 2608 "grammar.y"
+#line 2613 "grammar.y"
     { (yyval.declarator) = MkDeclaratorEnumArray((yyvsp[-3].declarator), (yyvsp[-1].specifier)); ;}
     break;
 
   case 900:
-#line 2609 "grammar.y"
+#line 2614 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[-2].declarator), null); ;}
     break;
 
   case 902:
-#line 2617 "grammar.y"
+#line 2622 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-2].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 903:
-#line 2618 "grammar.y"
+#line 2623 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-2].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 904:
-#line 2619 "grammar.y"
+#line 2624 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-2].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 905:
-#line 2620 "grammar.y"
+#line 2625 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-2].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 906:
-#line 2621 "grammar.y"
+#line 2626 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-1].declarator), null); ;}
     break;
 
   case 907:
-#line 2627 "grammar.y"
+#line 2632 "grammar.y"
     { 
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[-1].declarator), null); 
          fileInput.Seek((yylsp[-1]).end.pos, start); 
@@ -15870,7 +15995,7 @@ yyreduce:
     break;
 
   case 908:
-#line 2636 "grammar.y"
+#line 2641 "grammar.y"
     { 
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[-1].declarator), null); 
          fileInput.Seek((yylsp[-1]).end.pos, start); 
@@ -15882,7 +16007,7 @@ yyreduce:
     break;
 
   case 909:
-#line 2645 "grammar.y"
+#line 2650 "grammar.y"
     { 
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[-2].declarator), null); 
          fileInput.Seek((yylsp[-2]).end.pos, start); 
@@ -15894,7 +16019,7 @@ yyreduce:
     break;
 
   case 910:
-#line 2654 "grammar.y"
+#line 2659 "grammar.y"
     { 
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[-3].declarator), null); 
          fileInput.Seek((yylsp[-3]).end.pos, start); 
@@ -15907,22 +16032,22 @@ yyreduce:
     break;
 
   case 913:
-#line 2669 "grammar.y"
+#line 2674 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator)); ;}
     break;
 
   case 914:
-#line 2671 "grammar.y"
+#line 2676 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator)); ;}
     break;
 
   case 915:
-#line 2715 "grammar.y"
+#line 2720 "grammar.y"
     { (yyval.string) = CopyString(yytext); ;}
     break;
 
   case 917:
-#line 2718 "grammar.y"
+#line 2723 "grammar.y"
     {
          char temp[1024];
          strcpy(temp, "__asm__(");
@@ -15934,277 +16059,277 @@ yyreduce:
     break;
 
   case 918:
-#line 2729 "grammar.y"
+#line 2734 "grammar.y"
     { (yyval.string) = CopyString(yytext); ;}
     break;
 
   case 919:
-#line 2735 "grammar.y"
+#line 2740 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[-1].declarator)); ;}
     break;
 
   case 920:
-#line 2737 "grammar.y"
+#line 2742 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray(null, null); ;}
     break;
 
   case 921:
-#line 2739 "grammar.y"
+#line 2744 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray(null, (yyvsp[-1].exp)); ;}
     break;
 
   case 922:
-#line 2741 "grammar.y"
+#line 2746 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray(null, (yyvsp[-1].exp)); ;}
     break;
 
   case 923:
-#line 2743 "grammar.y"
+#line 2748 "grammar.y"
     { (yyval.declarator) = MkDeclaratorEnumArray(null, (yyvsp[-1].specifier)); ;}
     break;
 
   case 924:
-#line 2745 "grammar.y"
+#line 2750 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[-2].declarator), null); ;}
     break;
 
   case 925:
-#line 2747 "grammar.y"
+#line 2752 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[-3].declarator), (yyvsp[-1].exp)); ;}
     break;
 
   case 926:
-#line 2749 "grammar.y"
+#line 2754 "grammar.y"
     { (yyval.declarator) = MkDeclaratorEnumArray((yyvsp[-3].declarator), (yyvsp[-1].specifier)); ;}
     break;
 
   case 927:
-#line 2751 "grammar.y"
+#line 2756 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[-3].declarator), (yyvsp[-1].exp)); ;}
     break;
 
   case 928:
-#line 2753 "grammar.y"
+#line 2758 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, null); ;}
     break;
 
   case 929:
-#line 2755 "grammar.y"
+#line 2760 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[-1].list)); ;}
     break;
 
   case 930:
-#line 2757 "grammar.y"
+#line 2762 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[-1].list)); ;}
     break;
 
   case 931:
-#line 2759 "grammar.y"
+#line 2764 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-2].declarator), null); ;}
     break;
 
   case 932:
-#line 2761 "grammar.y"
+#line 2766 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-3].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 933:
-#line 2763 "grammar.y"
+#line 2768 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-3].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 934:
-#line 2768 "grammar.y"
+#line 2773 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[-1].declarator)); ;}
     break;
 
   case 935:
-#line 2770 "grammar.y"
+#line 2775 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, null); ;}
     break;
 
   case 936:
-#line 2772 "grammar.y"
+#line 2777 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[-1].list)); ;}
     break;
 
   case 937:
-#line 2774 "grammar.y"
+#line 2779 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[-1].list)); ;}
     break;
 
   case 938:
-#line 2776 "grammar.y"
+#line 2781 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-2].declarator), null); ;}
     break;
 
   case 939:
-#line 2778 "grammar.y"
+#line 2783 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-3].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 940:
-#line 2780 "grammar.y"
+#line 2785 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[-3].declarator), (yyvsp[-1].list)); ;}
     break;
 
   case 941:
-#line 2784 "grammar.y"
+#line 2789 "grammar.y"
     { (yyval.pointer) = MkPointer(null, null); ;}
     break;
 
   case 942:
-#line 2785 "grammar.y"
+#line 2790 "grammar.y"
     { (yyval.pointer) = MkPointer((yyvsp[0].list), null); ;}
     break;
 
   case 943:
-#line 2786 "grammar.y"
+#line 2791 "grammar.y"
     { (yyval.pointer) = MkPointer(null, (yyvsp[0].pointer)); ;}
     break;
 
   case 944:
-#line 2787 "grammar.y"
+#line 2792 "grammar.y"
     { (yyval.pointer) = MkPointer((yyvsp[-1].list), (yyvsp[0].pointer)); ;}
     break;
 
   case 945:
-#line 2791 "grammar.y"
+#line 2796 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[0].pointer), null); ;}
     break;
 
   case 947:
-#line 2793 "grammar.y"
+#line 2798 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator)); ;}
     break;
 
   case 948:
-#line 2794 "grammar.y"
+#line 2799 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), MkDeclaratorPointer((yyvsp[0].pointer), null)); ;}
     break;
 
   case 949:
-#line 2795 "grammar.y"
+#line 2800 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator)); ;}
     break;
 
   case 950:
-#line 2796 "grammar.y"
+#line 2801 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-2].string), MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator))); ;}
     break;
 
   case 951:
-#line 2800 "grammar.y"
+#line 2805 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[0].pointer), null); ;}
     break;
 
   case 953:
-#line 2802 "grammar.y"
+#line 2807 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator)); ;}
     break;
 
   case 954:
-#line 2803 "grammar.y"
+#line 2808 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), MkDeclaratorPointer((yyvsp[0].pointer), null)); ;}
     break;
 
   case 955:
-#line 2804 "grammar.y"
+#line 2809 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator)); ;}
     break;
 
   case 956:
-#line 2805 "grammar.y"
+#line 2810 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-2].string), MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator))); ;}
     break;
 
   case 958:
-#line 2811 "grammar.y"
+#line 2816 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator)); ;}
     break;
 
   case 959:
-#line 2813 "grammar.y"
+#line 2818 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-2].string), MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator))); ;}
     break;
 
   case 960:
-#line 2815 "grammar.y"
+#line 2820 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtendedEnd((yyvsp[0].string), (yyvsp[-1].declarator)); ;}
     break;
 
   case 962:
-#line 2820 "grammar.y"
+#line 2825 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator)); ;}
     break;
 
   case 963:
-#line 2821 "grammar.y"
+#line 2826 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator)); ;}
     break;
 
   case 964:
-#line 2822 "grammar.y"
+#line 2827 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-2].string), MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator))); ;}
     break;
 
   case 965:
-#line 2823 "grammar.y"
+#line 2828 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-2].pointer), MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator))); ;}
     break;
 
   case 967:
-#line 2828 "grammar.y"
+#line 2833 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator)); ;}
     break;
 
   case 968:
-#line 2829 "grammar.y"
+#line 2834 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator)); ;}
     break;
 
   case 969:
-#line 2830 "grammar.y"
+#line 2835 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-2].string), MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator))); ;}
     break;
 
   case 970:
-#line 2831 "grammar.y"
+#line 2836 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-2].pointer), MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator))); ;}
     break;
 
   case 972:
-#line 2836 "grammar.y"
+#line 2841 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator)); ;}
     break;
 
   case 973:
-#line 2837 "grammar.y"
+#line 2842 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator)); ;}
     break;
 
   case 974:
-#line 2838 "grammar.y"
+#line 2843 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[-2].string), MkDeclaratorPointer((yyvsp[-1].pointer), (yyvsp[0].declarator))); ;}
     break;
 
   case 975:
-#line 2839 "grammar.y"
+#line 2844 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[-2].pointer), MkDeclaratorExtended((yyvsp[-1].string), (yyvsp[0].declarator))); ;}
     break;
 
   case 976:
-#line 2843 "grammar.y"
+#line 2848 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[0].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 977:
-#line 2844 "grammar.y"
+#line 2849 "grammar.y"
     { (yyval.initializer) = MkInitializerList((yyvsp[-1].list)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 978:
-#line 2846 "grammar.y"
+#line 2851 "grammar.y"
     { 
          (yyval.initializer) = MkInitializerList((yyvsp[-2].list)); 
          (yyval.initializer).loc = (yyloc); 
@@ -16220,22 +16345,22 @@ yyreduce:
     break;
 
   case 979:
-#line 2861 "grammar.y"
+#line 2866 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[0].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 980:
-#line 2862 "grammar.y"
+#line 2867 "grammar.y"
     { (yyval.initializer) = MkInitializerList((yyvsp[-2].list)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 981:
-#line 2863 "grammar.y"
+#line 2868 "grammar.y"
     { (yyval.initializer) = MkInitializerList((yyvsp[0].list)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 982:
-#line 2865 "grammar.y"
+#line 2870 "grammar.y"
     { 
          (yyval.initializer) = MkInitializerList((yyvsp[-3].list)); 
          (yyval.initializer).loc = (yyloc);
@@ -16251,7 +16376,7 @@ yyreduce:
     break;
 
   case 983:
-#line 2878 "grammar.y"
+#line 2883 "grammar.y"
     { 
          (yyval.initializer) = MkInitializerList((yyvsp[-1].list)); 
          (yyval.initializer).loc = (yyloc);
@@ -16267,1092 +16392,1092 @@ yyreduce:
     break;
 
   case 984:
-#line 2893 "grammar.y"
+#line 2898 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[0].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 985:
-#line 2895 "grammar.y"
+#line 2900 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[0].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 986:
-#line 2899 "grammar.y"
+#line 2904 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[0].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 987:
-#line 2900 "grammar.y"
+#line 2905 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[0].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 988:
-#line 2904 "grammar.y"
+#line 2909 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].initializer)); ;}
     break;
 
   case 989:
-#line 2905 "grammar.y"
+#line 2910 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].initializer)); ;}
     break;
 
   case 990:
-#line 2906 "grammar.y"
+#line 2911 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].initializer)); ;}
     break;
 
   case 991:
-#line 2907 "grammar.y"
+#line 2912 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].initializer)); ;}
     break;
 
   case 992:
-#line 2910 "grammar.y"
+#line 2915 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].initializer)); ;}
     break;
 
   case 993:
-#line 2911 "grammar.y"
+#line 2916 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].initializer)); ;}
     break;
 
   case 994:
-#line 2915 "grammar.y"
+#line 2920 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[0].declarator), null); (yyval.initDeclarator).loc = (yyloc); ;}
     break;
 
   case 995:
-#line 2916 "grammar.y"
+#line 2921 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[-2].declarator), (yyvsp[0].initializer)); (yyval.initDeclarator).loc = (yyloc); (yyval.initDeclarator).initializer.loc.start = (yylsp[-1]).end; ;}
     break;
 
   case 996:
-#line 2920 "grammar.y"
+#line 2925 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[-1].declarator), null); (yyval.initDeclarator).loc = (yyloc); ;}
     break;
 
   case 997:
-#line 2921 "grammar.y"
+#line 2926 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[-2].declarator), MkInitializerAssignment(MkExpDummy())); (yyval.initDeclarator).loc = (yyloc); (yyval.initDeclarator).initializer.loc = (yylsp[-1]); (yyval.initDeclarator).initializer.exp.loc = (yylsp[-1]); ;}
     break;
 
   case 998:
-#line 2922 "grammar.y"
+#line 2927 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[-2].declarator), (yyvsp[0].initializer)); (yyval.initDeclarator).loc = (yyloc); (yyval.initDeclarator).initializer.loc.start = (yylsp[-1]).end; ;}
     break;
 
   case 999:
-#line 2926 "grammar.y"
+#line 2931 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].initDeclarator)); ;}
     break;
 
   case 1000:
-#line 2927 "grammar.y"
+#line 2932 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].initDeclarator)); ;}
     break;
 
   case 1001:
-#line 2928 "grammar.y"
+#line 2933 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].initDeclarator)); ;}
     break;
 
   case 1002:
-#line 2932 "grammar.y"
+#line 2937 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].initDeclarator)); ;}
     break;
 
   case 1003:
-#line 2933 "grammar.y"
+#line 2938 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[-1].initDeclarator)); ;}
     break;
 
   case 1004:
-#line 2934 "grammar.y"
+#line 2939 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].initDeclarator)); ;}
     break;
 
   case 1005:
-#line 2935 "grammar.y"
+#line 2940 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].initDeclarator)); ;}
     break;
 
   case 1006:
-#line 2939 "grammar.y"
+#line 2944 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[0].list), null); ;}
     break;
 
   case 1007:
-#line 2940 "grammar.y"
+#line 2945 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-1].list), (yyvsp[0].declarator)); ;}
     break;
 
   case 1008:
-#line 2944 "grammar.y"
+#line 2949 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[0].list), null); ;}
     break;
 
   case 1009:
-#line 2945 "grammar.y"
+#line 2950 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-1].list), (yyvsp[0].declarator)); ;}
     break;
 
   case 1010:
-#line 2950 "grammar.y"
+#line 2955 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-1].list), (yyvsp[0].declarator)); ;}
     break;
 
   case 1011:
-#line 2951 "grammar.y"
+#line 2956 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-1].list), (yyvsp[0].declarator)); ;}
     break;
 
   case 1012:
-#line 2952 "grammar.y"
+#line 2957 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-1].list), MkDeclaratorPointer(MkPointer(null,null), null)); ;}
     break;
 
   case 1013:
-#line 2953 "grammar.y"
+#line 2958 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-2].list), MkDeclaratorPointer(MkPointer(null,null), (yyvsp[0].declarator))); ;}
     break;
 
   case 1014:
-#line 2954 "grammar.y"
+#line 2959 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[0].list), null); ;}
     break;
 
   case 1015:
-#line 2956 "grammar.y"
+#line 2961 "grammar.y"
     { (yyval.typeName) = MkTypeName(MkListOne(MkSpecifier(CLASS)), null); ;}
     break;
 
   case 1016:
-#line 2974 "grammar.y"
+#line 2979 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-2].list), (yyvsp[-1].declarator)); ;}
     break;
 
   case 1017:
-#line 2975 "grammar.y"
+#line 2980 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[-2].list), (yyvsp[-1].declarator)); ;}
     break;
 
   case 1018:
-#line 2979 "grammar.y"
+#line 2984 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1019:
-#line 2980 "grammar.y"
+#line 2985 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1020:
-#line 2981 "grammar.y"
+#line 2986 "grammar.y"
     { ListAdd((yyvsp[-3].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1021:
-#line 2982 "grammar.y"
+#line 2987 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1022:
-#line 2983 "grammar.y"
+#line 2988 "grammar.y"
     { ListAdd((yyvsp[-3].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1023:
-#line 2984 "grammar.y"
+#line 2989 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(MkList(), null)); ListAdd((yyval.list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1024:
-#line 2986 "grammar.y"
+#line 2991 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1025:
-#line 2987 "grammar.y"
+#line 2992 "grammar.y"
     { ListAdd((yyvsp[-3].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1026:
-#line 2988 "grammar.y"
+#line 2993 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1027:
-#line 2989 "grammar.y"
+#line 2994 "grammar.y"
     { ListAdd((yyvsp[-3].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1028:
-#line 2993 "grammar.y"
+#line 2998 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1029:
-#line 2994 "grammar.y"
+#line 2999 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1030:
-#line 2995 "grammar.y"
+#line 3000 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1031:
-#line 2996 "grammar.y"
+#line 3001 "grammar.y"
     { ListAdd((yyvsp[-3].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1032:
-#line 2997 "grammar.y"
+#line 3002 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(MkList(), null)); ListAdd((yyval.list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1033:
-#line 2999 "grammar.y"
+#line 3004 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1034:
-#line 3000 "grammar.y"
+#line 3005 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1035:
-#line 3001 "grammar.y"
+#line 3006 "grammar.y"
     { ListAdd((yyvsp[-3].list), (yyvsp[0].typeName)); ;}
     break;
 
   case 1037:
-#line 3006 "grammar.y"
+#line 3011 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, null)); ;}
     break;
 
   case 1038:
-#line 3007 "grammar.y"
+#line 3012 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, null)); ;}
     break;
 
   case 1039:
-#line 3008 "grammar.y"
+#line 3013 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, null)); ;}
     break;
 
   case 1040:
-#line 3009 "grammar.y"
+#line 3014 "grammar.y"
     { ListAdd((yyvsp[-2].list), MkTypeName(null, null)); ;}
     break;
 
   case 1041:
-#line 3010 "grammar.y"
+#line 3015 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(null, null)); ;}
     break;
 
   case 1043:
-#line 3015 "grammar.y"
+#line 3020 "grammar.y"
     { ListAdd((yyvsp[-2].list), null); ;}
     break;
 
   case 1046:
-#line 3022 "grammar.y"
+#line 3027 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); ;}
     break;
 
   case 1048:
-#line 3024 "grammar.y"
+#line 3029 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); ;}
     break;
 
   case 1049:
-#line 3025 "grammar.y"
+#line 3030 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); ;}
     break;
 
   case 1050:
-#line 3026 "grammar.y"
+#line 3031 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[-1].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1054:
-#line 3030 "grammar.y"
+#line 3035 "grammar.y"
     {;}
     break;
 
   case 1058:
-#line 3038 "grammar.y"
+#line 3043 "grammar.y"
     { (yyval.stmt) = (yyvsp[0].stmt); Compiler_Error("syntax error\n"); ;}
     break;
 
   case 1059:
-#line 3039 "grammar.y"
+#line 3044 "grammar.y"
     { (yyval.stmt) = (yyvsp[0].stmt); Compiler_Error("syntax error\n"); ;}
     break;
 
   case 1060:
-#line 3040 "grammar.y"
+#line 3045 "grammar.y"
     { (yyval.stmt) = (yyvsp[0].stmt); Compiler_Error("syntax error\n"); ;}
     break;
 
   case 1061:
-#line 3041 "grammar.y"
+#line 3046 "grammar.y"
     { (yyval.stmt) = (yyvsp[0].stmt); Compiler_Error("syntax error\n"); ;}
     break;
 
   case 1062:
-#line 3042 "grammar.y"
+#line 3047 "grammar.y"
     { (yyval.stmt) = (yyvsp[0].stmt); Compiler_Error("syntax error\n"); ;}
     break;
 
   case 1063:
-#line 3043 "grammar.y"
+#line 3048 "grammar.y"
     { (yyval.stmt) = (yyvsp[-1].stmt); Compiler_Error("syntax error\n"); ;}
     break;
 
   case 1064:
-#line 3044 "grammar.y"
+#line 3049 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[0].list)); Compiler_Error("syntax error\n"); (yyval.stmt).loc = (yylsp[0]); ;}
     break;
 
   case 1065:
-#line 3048 "grammar.y"
+#line 3053 "grammar.y"
     { (yyval.asmField) = MkAsmField((yyvsp[0].string), null); (yyval.asmField).loc = (yylsp[0]); ;}
     break;
 
   case 1066:
-#line 3049 "grammar.y"
+#line 3054 "grammar.y"
     { (yyval.asmField) = MkAsmField((yyvsp[-3].string), (yyvsp[-1].exp)); (yyval.asmField).loc = (yyloc); ;}
     break;
 
   case 1067:
-#line 3053 "grammar.y"
+#line 3058 "grammar.y"
     { (yyval.list) = MkListOne((yyvsp[0].asmField)); ;}
     break;
 
   case 1068:
-#line 3054 "grammar.y"
+#line 3059 "grammar.y"
     { ListAdd((yyval.list), (yyvsp[0].asmField)); ;}
     break;
 
   case 1069:
-#line 3055 "grammar.y"
+#line 3060 "grammar.y"
     { (yyval.list) = null; ;}
     break;
 
   case 1070:
-#line 3059 "grammar.y"
+#line 3064 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[-4].specifier), (yyvsp[-2].string), null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1071:
-#line 3060 "grammar.y"
+#line 3065 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[-6].specifier), (yyvsp[-4].string), (yyvsp[-2].list), null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1072:
-#line 3061 "grammar.y"
+#line 3066 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[-8].specifier), (yyvsp[-6].string), (yyvsp[-4].list), (yyvsp[-2].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1073:
-#line 3062 "grammar.y"
+#line 3067 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[-10].specifier), (yyvsp[-8].string), (yyvsp[-6].list), (yyvsp[-4].list), (yyvsp[-2].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1074:
-#line 3064 "grammar.y"
+#line 3069 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[-6].specifier), (yyvsp[-4].string), null, (yyvsp[-2].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1075:
-#line 3065 "grammar.y"
+#line 3070 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[-8].specifier), (yyvsp[-6].string), null, (yyvsp[-4].list), (yyvsp[-2].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1076:
-#line 3066 "grammar.y"
+#line 3071 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[-8].specifier), (yyvsp[-6].string), (yyvsp[-4].list), null, (yyvsp[-2].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1077:
-#line 3068 "grammar.y"
+#line 3073 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[-2].string), null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1078:
-#line 3069 "grammar.y"
+#line 3074 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[-4].string), (yyvsp[-2].list), null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1079:
-#line 3070 "grammar.y"
+#line 3075 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[-6].string), (yyvsp[-4].list), (yyvsp[-2].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1080:
-#line 3071 "grammar.y"
+#line 3076 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[-8].string), (yyvsp[-6].list), (yyvsp[-4].list), (yyvsp[-2].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1081:
-#line 3073 "grammar.y"
+#line 3078 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[-4].string), null, (yyvsp[-2].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1082:
-#line 3074 "grammar.y"
+#line 3079 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[-6].string), null, (yyvsp[-4].list), (yyvsp[-2].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1083:
-#line 3075 "grammar.y"
+#line 3080 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[-6].string), (yyvsp[-4].list), null, (yyvsp[-2].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1084:
-#line 3079 "grammar.y"
+#line 3084 "grammar.y"
     { (yyval.stmt) = MkLabeledStmt((yyvsp[-2].id), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1085:
-#line 3080 "grammar.y"
+#line 3085 "grammar.y"
     { (yyval.stmt) = MkCaseStmt((yyvsp[-2].exp), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[-2].exp).loc.start = (yylsp[-3]).end; ;}
     break;
 
   case 1086:
-#line 3081 "grammar.y"
+#line 3086 "grammar.y"
     { (yyval.stmt) = MkCaseStmt((yyvsp[-2].exp), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[-2].exp).loc.start = (yylsp[-3]).end; ;}
     break;
 
   case 1087:
-#line 3082 "grammar.y"
+#line 3087 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(MkExpDummy(), (yyvsp[0].stmt)); (yyval.stmt).caseStmt.exp.loc = (yylsp[-1]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[-2]).end; ;}
     break;
 
   case 1088:
-#line 3083 "grammar.y"
+#line 3088 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1089:
-#line 3087 "grammar.y"
+#line 3092 "grammar.y"
     { (yyval.stmt) = MkLabeledStmt((yyvsp[-2].id), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1090:
-#line 3088 "grammar.y"
+#line 3093 "grammar.y"
     { (yyval.stmt) = MkCaseStmt((yyvsp[-2].exp), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[-2].exp).loc.start = (yylsp[-3]).end; ;}
     break;
 
   case 1091:
-#line 3089 "grammar.y"
+#line 3094 "grammar.y"
     { (yyval.stmt) = MkCaseStmt((yyvsp[-2].exp), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[-2].exp).loc.start = (yylsp[-3]).end; ;}
     break;
 
   case 1092:
-#line 3090 "grammar.y"
+#line 3095 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(MkExpDummy(), (yyvsp[0].stmt)); (yyval.stmt).caseStmt.exp.loc = (yylsp[-1]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[-2]).end; ;}
     break;
 
   case 1093:
-#line 3091 "grammar.y"
+#line 3096 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(MkExpDummy(), null); (yyval.stmt).caseStmt.exp.loc = (yylsp[0]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[-1]).end; ;}
     break;
 
   case 1094:
-#line 3092 "grammar.y"
+#line 3097 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1095:
-#line 3093 "grammar.y"
+#line 3098 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1096:
-#line 3097 "grammar.y"
+#line 3102 "grammar.y"
     { (yyval.declMode) = declMode = publicAccess; ;}
     break;
 
   case 1097:
-#line 3098 "grammar.y"
+#line 3103 "grammar.y"
     { (yyval.declMode) = declMode = privateAccess; ;}
     break;
 
   case 1098:
-#line 3099 "grammar.y"
+#line 3104 "grammar.y"
     { (yyval.declMode) = declMode = defaultAccess; ;}
     break;
 
   case 1099:
-#line 3103 "grammar.y"
+#line 3108 "grammar.y"
     { (yyval.declMode) = publicAccess; ;}
     break;
 
   case 1100:
-#line 3104 "grammar.y"
+#line 3109 "grammar.y"
     { (yyval.declMode) = privateAccess; ;}
     break;
 
   case 1101:
-#line 3108 "grammar.y"
+#line 3113 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-1].list), null); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1102:
-#line 3109 "grammar.y"
+#line 3114 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-2].list), (yyvsp[-1].list)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1103:
-#line 3110 "grammar.y"
+#line 3115 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[-1].instance)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1104:
-#line 3111 "grammar.y"
+#line 3116 "grammar.y"
     {;}
     break;
 
   case 1105:
-#line 3115 "grammar.y"
+#line 3120 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-1].list), null); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1106:
-#line 3116 "grammar.y"
+#line 3121 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-2].list), (yyvsp[-1].list)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1107:
-#line 3117 "grammar.y"
+#line 3122 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-2].list), (yyvsp[-1].list)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1108:
-#line 3119 "grammar.y"
+#line 3124 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[-1].instance)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1109:
-#line 3120 "grammar.y"
+#line 3125 "grammar.y"
     { (yyval.declaration) = MkDeclarationDefine((yyvsp[-3].id), (yyvsp[-1].exp)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1110:
-#line 3121 "grammar.y"
+#line 3126 "grammar.y"
     { declMode = staticAccess; (yyval.declaration) = MkDeclarationDefine((yyvsp[-3].id), (yyvsp[-1].exp)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1111:
-#line 3125 "grammar.y"
+#line 3130 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-1].list), null); (yyval.declaration).loc = (yyloc); yyerrok; ;}
     break;
 
   case 1112:
-#line 3129 "grammar.y"
+#line 3134 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-1].list), null); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1113:
-#line 3130 "grammar.y"
+#line 3135 "grammar.y"
     {;}
     break;
 
   case 1114:
-#line 3132 "grammar.y"
+#line 3137 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[-1].instance)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1115:
-#line 3133 "grammar.y"
+#line 3138 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[-1].instance)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1116:
-#line 3134 "grammar.y"
+#line 3139 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[-1].list), (yyvsp[0].list)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1117:
-#line 3138 "grammar.y"
+#line 3143 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].declaration)); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1118:
-#line 3139 "grammar.y"
+#line 3144 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].declaration)); /*declMode = defaultDeclMode; */;}
     break;
 
   case 1119:
-#line 3140 "grammar.y"
+#line 3145 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].declaration)); /*declMode = defaultDeclMode; */;}
     break;
 
   case 1120:
-#line 3141 "grammar.y"
+#line 3146 "grammar.y"
     { ;}
     break;
 
   case 1121:
-#line 3145 "grammar.y"
+#line 3150 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].declaration)); ;}
     break;
 
   case 1122:
-#line 3146 "grammar.y"
+#line 3151 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].declaration)); ;}
     break;
 
   case 1123:
-#line 3150 "grammar.y"
+#line 3155 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].stmt)); ;}
     break;
 
   case 1124:
-#line 3151 "grammar.y"
+#line 3156 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].stmt)); ;}
     break;
 
   case 1125:
-#line 3152 "grammar.y"
+#line 3157 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].stmt)); ;}
     break;
 
   case 1126:
-#line 3156 "grammar.y"
+#line 3161 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].stmt)); ;}
     break;
 
   case 1127:
-#line 3157 "grammar.y"
+#line 3162 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].stmt)); ;}
     break;
 
   case 1128:
-#line 3158 "grammar.y"
+#line 3163 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].stmt)); ;}
     break;
 
   case 1129:
-#line 3159 "grammar.y"
+#line 3164 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[0].declaration)); stmt.loc = (yylsp[0]); yyerror(); ListAdd((yyvsp[-1].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1130:
-#line 3160 "grammar.y"
+#line 3165 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[0].declaration)); stmt.loc = (yylsp[0]); yyerror(); ListAdd((yyvsp[-1].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1131:
-#line 3161 "grammar.y"
+#line 3166 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[0].declaration)); stmt.loc = (yylsp[0]); yyerror(); ListAdd((yyvsp[-1].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1132:
-#line 3162 "grammar.y"
+#line 3167 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[0].declaration)); stmt.loc = (yylsp[0]); yyerror(); ListAdd((yyvsp[-1].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1133:
-#line 3166 "grammar.y"
+#line 3171 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt(null, (yyvsp[0].list)); ;}
     break;
 
   case 1134:
-#line 3167 "grammar.y"
+#line 3172 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[0].list), null); ;}
     break;
 
   case 1135:
-#line 3168 "grammar.y"
+#line 3173 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[-1].list), (yyvsp[0].list)); ;}
     break;
 
   case 1136:
-#line 3169 "grammar.y"
+#line 3174 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[-1].list), (yyvsp[0].list)); ;}
     break;
 
   case 1137:
-#line 3173 "grammar.y"
+#line 3178 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt(null, (yyvsp[0].list)); ;}
     break;
 
   case 1138:
-#line 3174 "grammar.y"
+#line 3179 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[0].list), null); ;}
     break;
 
   case 1139:
-#line 3175 "grammar.y"
+#line 3180 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[-1].list), (yyvsp[0].list)); ;}
     break;
 
   case 1140:
-#line 3176 "grammar.y"
+#line 3181 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[-1].list), (yyvsp[0].list)); ;}
     break;
 
   case 1141:
-#line 3180 "grammar.y"
+#line 3185 "grammar.y"
     { (yyval.context) = PushContext(); ;}
     break;
 
   case 1142:
-#line 3184 "grammar.y"
+#line 3189 "grammar.y"
     { (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1143:
-#line 3189 "grammar.y"
+#line 3194 "grammar.y"
     { (yyval.stmt) = (yyvsp[0].stmt); (yyval.stmt).compound.context = (yyvsp[-1].context); PopContext((yyvsp[-1].context)); (yyval.stmt).loc = (yyloc); (yyval.stmt).loc.end.charPos++; (yyval.stmt).loc.end.pos++; ;}
     break;
 
   case 1144:
-#line 3191 "grammar.y"
+#line 3196 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt(null, null); (yyval.stmt).compound.context = (yyvsp[0].context); PopContext((yyvsp[0].context)); (yyval.stmt).loc = (yyloc); (yyval.stmt).loc.end.charPos++; (yyval.stmt).loc.end.pos++; ;}
     break;
 
   case 1145:
-#line 3194 "grammar.y"
+#line 3199 "grammar.y"
     { (yyval.stmt) = (yyvsp[0].stmt); (yyval.stmt).compound.context = (yyvsp[-1].context); PopContext((yyvsp[-1].context)); (yyval.stmt).loc = (yyloc); (yyval.stmt).loc.end.charPos++; (yyval.stmt).loc.end.pos++; ;}
     break;
 
   case 1146:
-#line 3199 "grammar.y"
+#line 3204 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1147:
-#line 3200 "grammar.y"
+#line 3205 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[-1].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1148:
-#line 3201 "grammar.y"
+#line 3206 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[-1].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1149:
-#line 3205 "grammar.y"
+#line 3210 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[-2].list), (yyvsp[0].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1150:
-#line 3206 "grammar.y"
+#line 3211 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[-2].list), (yyvsp[0].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1151:
-#line 3207 "grammar.y"
+#line 3212 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[-4].list), (yyvsp[-2].stmt), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1152:
-#line 3208 "grammar.y"
+#line 3213 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[-4].list), (yyvsp[-2].stmt), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1153:
-#line 3209 "grammar.y"
+#line 3214 "grammar.y"
     { (yyval.stmt) = MkSwitchStmt((yyvsp[-2].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1154:
-#line 3210 "grammar.y"
+#line 3215 "grammar.y"
     { (yyval.stmt) = MkSwitchStmt((yyvsp[-2].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1155:
-#line 3214 "grammar.y"
+#line 3219 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[0].list), null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1157:
-#line 3219 "grammar.y"
+#line 3224 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[-2].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1158:
-#line 3220 "grammar.y"
+#line 3225 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[-1].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1159:
-#line 3221 "grammar.y"
+#line 3226 "grammar.y"
     { (yyval.stmt) = MkWhileStmt(null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1160:
-#line 3223 "grammar.y"
+#line 3228 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[-5].stmt), (yyvsp[-2].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1161:
-#line 3224 "grammar.y"
+#line 3229 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[-4].stmt), (yyvsp[-1].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1162:
-#line 3226 "grammar.y"
+#line 3231 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-3].stmt), (yyvsp[-2].stmt), null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1163:
-#line 3227 "grammar.y"
+#line 3232 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-2].stmt), null, null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1164:
-#line 3228 "grammar.y"
+#line 3233 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-4].stmt), (yyvsp[-3].stmt), (yyvsp[-2].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1165:
-#line 3229 "grammar.y"
+#line 3234 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-3].stmt), (yyvsp[-2].stmt), (yyvsp[-1].list), (yyvsp[0].stmt) ); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1166:
-#line 3230 "grammar.y"
+#line 3235 "grammar.y"
     { (yyval.stmt) = MkForStmt(null, null, null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1167:
-#line 3232 "grammar.y"
+#line 3237 "grammar.y"
     { (yyval.stmt) = MkForEachStmt((yyvsp[-4].id), (yyvsp[-2].list), null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1168:
-#line 3233 "grammar.y"
+#line 3238 "grammar.y"
     { (yyval.stmt) = MkForEachStmt((yyvsp[-6].id), (yyvsp[-4].list), (yyvsp[-2].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1169:
-#line 3237 "grammar.y"
+#line 3242 "grammar.y"
     { (yyval.stmt) = MkForStmt(null, null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1170:
-#line 3238 "grammar.y"
+#line 3243 "grammar.y"
     { (yyval.stmt) = MkForStmt(MkExpressionStmt((yyvsp[-1].list)), null, null, null); (yyval.stmt).forStmt.init.loc = (yylsp[-1]); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1171:
-#line 3239 "grammar.y"
+#line 3244 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-1].stmt), null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1172:
-#line 3240 "grammar.y"
+#line 3245 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-2].stmt), MkExpressionStmt((yyvsp[-1].list)), null, null); (yyval.stmt).loc = (yyloc); (yyval.stmt).forStmt.check.loc = (yylsp[-1]); ;}
     break;
 
   case 1173:
-#line 3241 "grammar.y"
+#line 3246 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-2].stmt), (yyvsp[-1].stmt), null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1174:
-#line 3242 "grammar.y"
+#line 3247 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-2].stmt), (yyvsp[-1].stmt), (yyvsp[0].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1175:
-#line 3243 "grammar.y"
+#line 3248 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-3].stmt), (yyvsp[-2].stmt), null, (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1176:
-#line 3244 "grammar.y"
+#line 3249 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-4].stmt), (yyvsp[-3].stmt), (yyvsp[-2].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1177:
-#line 3245 "grammar.y"
+#line 3250 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[-3].stmt), (yyvsp[-2].stmt), (yyvsp[-1].list), (yyvsp[0].stmt) ); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1178:
-#line 3247 "grammar.y"
+#line 3252 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[-4].stmt), (yyvsp[-1].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1179:
-#line 3248 "grammar.y"
+#line 3253 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[-3].stmt), (yyvsp[0].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1180:
-#line 3249 "grammar.y"
+#line 3254 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[-3].stmt), (yyvsp[0].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1181:
-#line 3250 "grammar.y"
+#line 3255 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[-2].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1182:
-#line 3251 "grammar.y"
+#line 3256 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[-1].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1183:
-#line 3252 "grammar.y"
+#line 3257 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[0].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1184:
-#line 3253 "grammar.y"
+#line 3258 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1185:
-#line 3256 "grammar.y"
+#line 3261 "grammar.y"
     { (yyval.stmt) = MkWhileStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1186:
-#line 3257 "grammar.y"
+#line 3262 "grammar.y"
     { (yyval.stmt) = MkWhileStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1187:
-#line 3258 "grammar.y"
+#line 3263 "grammar.y"
     { (yyval.stmt) = MkWhileStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1188:
-#line 3259 "grammar.y"
+#line 3264 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[0].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1189:
-#line 3260 "grammar.y"
+#line 3265 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[-1].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1190:
-#line 3261 "grammar.y"
+#line 3266 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[-2].list), (yyvsp[0].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1191:
-#line 3262 "grammar.y"
+#line 3267 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[-1].list), (yyvsp[0].stmt) ); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1192:
-#line 3266 "grammar.y"
+#line 3271 "grammar.y"
     { (yyval.stmt) = MkGotoStmt((yyvsp[-1].id)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1193:
-#line 3267 "grammar.y"
+#line 3272 "grammar.y"
     { (yyval.stmt) = MkContinueStmt(); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1194:
-#line 3268 "grammar.y"
+#line 3273 "grammar.y"
     { (yyval.stmt) = MkBreakStmt(); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1195:
-#line 3269 "grammar.y"
+#line 3274 "grammar.y"
     { Expression exp = MkExpDummy(); (yyval.stmt) = MkReturnStmt(MkListOne(exp)); (yyval.stmt).loc = (yyloc); exp.loc = (yylsp[0]); ;}
     break;
 
   case 1196:
-#line 3270 "grammar.y"
+#line 3275 "grammar.y"
     { (yyval.stmt) = MkReturnStmt((yyvsp[-1].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1197:
-#line 3271 "grammar.y"
+#line 3276 "grammar.y"
     { (yyval.stmt) = MkReturnStmt((yyvsp[-1].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1198:
-#line 3272 "grammar.y"
+#line 3277 "grammar.y"
     { (yyval.stmt) = MkReturnStmt(MkListOne((yyvsp[-1].exp))); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1199:
-#line 3273 "grammar.y"
+#line 3278 "grammar.y"
     { (yyval.stmt) = MkReturnStmt(MkListOne((yyvsp[-1].exp))); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1200:
-#line 3277 "grammar.y"
+#line 3282 "grammar.y"
     { (yyval.stmt) = MkReturnStmt((yyvsp[0].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1201:
-#line 3278 "grammar.y"
+#line 3283 "grammar.y"
     { (yyval.stmt) = MkReturnStmt(MkListOne((yyvsp[0].exp))); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1202:
-#line 3279 "grammar.y"
+#line 3284 "grammar.y"
     { Expression exp = MkExpDummy(); (yyval.stmt) = MkReturnStmt(MkListOne(exp)); (yyval.stmt).loc = (yyloc); exp.loc.start = exp.loc.end = (yylsp[0]).end; ;}
     break;
 
   case 1203:
-#line 3280 "grammar.y"
+#line 3285 "grammar.y"
     { (yyval.stmt) = MkGotoStmt(null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1204:
-#line 3286 "grammar.y"
+#line 3291 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[-3].list), (yyvsp[-2].declarator), (yyvsp[-1].list)); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1205:
-#line 3288 "grammar.y"
+#line 3293 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[-2].list), (yyvsp[-1].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1206:
-#line 3290 "grammar.y"
+#line 3295 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[-2].declarator), (yyvsp[-1].list)); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1207:
-#line 3291 "grammar.y"
+#line 3296 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[-1].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc);;}
     break;
 
   case 1208:
-#line 3294 "grammar.y"
+#line 3299 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[-3].list), (yyvsp[-2].declarator), (yyvsp[-1].list)); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[0].stmt).loc.end; ;}
     break;
 
   case 1209:
-#line 3295 "grammar.y"
+#line 3300 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[-2].list), (yyvsp[-1].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[0].stmt).loc.end; ;}
     break;
 
   case 1210:
-#line 3296 "grammar.y"
+#line 3301 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[-2].declarator), (yyvsp[-1].list)); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[0].stmt).loc.end; ;}
     break;
 
   case 1211:
-#line 3297 "grammar.y"
+#line 3302 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[-1].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[0].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[0].stmt).loc.end; ;}
     break;
 
   case 1212:
-#line 3301 "grammar.y"
+#line 3306 "grammar.y"
     { (yyval.string) = CopyString(yytext); ;}
     break;
 
   case 1213:
-#line 3303 "grammar.y"
+#line 3308 "grammar.y"
     { 
       int len1 = strlen((yyvsp[-1].string));
       int len2 = strlen(yytext);
@@ -17364,272 +17489,272 @@ yyreduce:
     break;
 
   case 1214:
-#line 3314 "grammar.y"
+#line 3319 "grammar.y"
     { (yyval.external) = MkExternalFunction((yyvsp[0].function)); (yyval.external).loc = (yyloc); (yyvsp[0].function).declMode = declMode; declMode = defaultDeclMode; ;}
     break;
 
   case 1215:
-#line 3316 "grammar.y"
+#line 3321 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[0]._class));  (yyval.external).loc = (yyloc); (yyvsp[0]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1216:
-#line 3319 "grammar.y"
-    { (yyval.external) = MkExternalClass((yyvsp[0]._class));  (yyval.external).loc = (yyloc); (yyvsp[0]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
+#line 3324 "grammar.y"
+    { (yyval.external) = MkExternalClass((yyvsp[0]._class));  (yyval.external).loc = (yyloc); (yyvsp[0]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; FreeList((yyvsp[-1].list), FreeSpecifier); ;}
     break;
 
   case 1217:
-#line 3322 "grammar.y"
+#line 3327 "grammar.y"
     { (yyval.external) = MkExternalDeclaration((yyvsp[0].declaration));  (yyval.external).loc = (yyloc); (yyvsp[0].declaration).declMode = declMode; declMode = defaultDeclMode; ;}
     break;
 
   case 1218:
-#line 3323 "grammar.y"
+#line 3328 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[0].string), normalImport, (declMode != defaultAccess) ? declMode : privateAccess);  (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1219:
-#line 3324 "grammar.y"
+#line 3329 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[0].string), staticImport, (declMode != defaultAccess) ? declMode : privateAccess);  (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1220:
-#line 3325 "grammar.y"
+#line 3330 "grammar.y"
     { if(!strcmp((yyvsp[-1].id).string, "remote")) { (yyval.external) = MkExternalImport((yyvsp[0].string), remoteImport, (declMode != defaultAccess) ? declMode : privateAccess);  (yyval.external).loc = (yyloc); } else yyerror(); FreeIdentifier((yyvsp[-1].id)); ;}
     break;
 
   case 1221:
-#line 3327 "grammar.y"
+#line 3332 "grammar.y"
     { (yyval.external) = null; ;}
     break;
 
   case 1222:
-#line 3329 "grammar.y"
+#line 3334 "grammar.y"
     { (yyval.external) = MkExternalFunction((yyvsp[0].function)); (yyval.external).loc = (yyloc); (yyvsp[0].function).declMode = (yyvsp[-1].declMode); declMode = defaultDeclMode; ;}
     break;
 
   case 1223:
-#line 3331 "grammar.y"
+#line 3336 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[0]._class));  (yyval.external).loc = (yyloc); (yyvsp[0]._class).declMode = ((yyvsp[-1].declMode) != defaultAccess) ? (yyvsp[-1].declMode) : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1224:
-#line 3332 "grammar.y"
+#line 3337 "grammar.y"
     { (yyval.external) = MkExternalDeclaration((yyvsp[0].declaration)); (yyval.external).loc = (yyloc); (yyvsp[0].declaration).declMode = (yyvsp[-1].declMode); declMode = defaultDeclMode; ;}
     break;
 
   case 1225:
-#line 3333 "grammar.y"
+#line 3338 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[0].string), normalImport, ((yyvsp[-2].declMode) != defaultAccess) ? (yyvsp[-2].declMode) : privateAccess);  (yyval.external).loc = (yyloc); declMode = defaultDeclMode; ;}
     break;
 
   case 1226:
-#line 3334 "grammar.y"
+#line 3339 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[0].string), staticImport, ((yyvsp[-3].declMode) != defaultAccess) ? (yyvsp[-3].declMode) : privateAccess);  (yyval.external).loc = (yyloc); declMode = defaultDeclMode; ;}
     break;
 
   case 1227:
-#line 3335 "grammar.y"
+#line 3340 "grammar.y"
     { if(!strcmp((yyvsp[-1].id).string, "remote")) { (yyval.external) = MkExternalImport((yyvsp[0].string), remoteImport, ((yyvsp[-3].declMode) != defaultAccess) ? (yyvsp[-3].declMode) : privateAccess);  (yyval.external).loc = (yyloc); FreeIdentifier((yyvsp[-1].id)); } else yyerror();  declMode = defaultDeclMode; ;}
     break;
 
   case 1228:
-#line 3336 "grammar.y"
+#line 3341 "grammar.y"
     { defaultDeclMode = (yyvsp[-1].declMode); (yyval.external) = null; ;}
     break;
 
   case 1229:
-#line 3337 "grammar.y"
+#line 3342 "grammar.y"
     { defaultDeclMode = staticAccess; (yyval.external) = null; ;}
     break;
 
   case 1230:
-#line 3338 "grammar.y"
+#line 3343 "grammar.y"
     { (yyval.external) = MkExternalNameSpace((yyvsp[0].id)); (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1231:
-#line 3339 "grammar.y"
+#line 3344 "grammar.y"
     { (yyval.external) = MkExternalNameSpace(MkIdentifier((yyvsp[0].specifier).name)); FreeSpecifier((yyvsp[0].specifier)); (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1232:
-#line 3340 "grammar.y"
+#line 3345 "grammar.y"
     { (yyval.external) = MkExternalDBTable((yyvsp[0].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[0].dbtableDef).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1233:
-#line 3341 "grammar.y"
+#line 3346 "grammar.y"
     { (yyval.external) = MkExternalDBTable((yyvsp[0].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[0].dbtableDef).declMode = ((yyvsp[-1].declMode) != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1234:
-#line 3345 "grammar.y"
+#line 3350 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[0]._class));  (yyval.external).loc = (yyvsp[0]._class).loc; (yyvsp[0]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1235:
-#line 3346 "grammar.y"
+#line 3351 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[0]._class));  (yyval.external).loc = (yyvsp[0]._class).loc; (yyvsp[0]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1236:
-#line 3347 "grammar.y"
+#line 3352 "grammar.y"
     { (yyval.external) = MkExternalFunction((yyvsp[0].function)); (yyval.external).loc = (yyvsp[0].function).loc;  (yyvsp[0].function).declMode = declMode; declMode = defaultDeclMode; ;}
     break;
 
   case 1237:
-#line 3349 "grammar.y"
+#line 3354 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[0]._class));  (yyval.external).loc = (yyvsp[0]._class).loc; (yyvsp[0]._class).declMode = ((yyvsp[-1].declMode) != defaultAccess) ? (yyvsp[-1].declMode) : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1238:
-#line 3350 "grammar.y"
+#line 3355 "grammar.y"
     { (yyval.external) = MkExternalFunction((yyvsp[0].function)); (yyval.external).loc = (yyvsp[0].function).loc; (yyvsp[0].function).declMode = (yyvsp[-1].declMode); declMode = defaultDeclMode; ;}
     break;
 
   case 1239:
-#line 3353 "grammar.y"
+#line 3358 "grammar.y"
     { (yyval.external) = MkExternalDeclaration((yyvsp[0].declaration));  (yyval.external).loc = (yyloc); (yyvsp[0].declaration).declMode = declMode; declMode = defaultDeclMode; ;}
     break;
 
   case 1240:
-#line 3354 "grammar.y"
+#line 3359 "grammar.y"
     { (yyval.external) = MkExternalDeclaration((yyvsp[0].declaration)); (yyval.external).loc = (yyloc); (yyvsp[0].declaration).declMode = (yyvsp[-1].declMode); declMode = defaultDeclMode; ;}
     break;
 
   case 1241:
-#line 3358 "grammar.y"
+#line 3363 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].external)); ast = (yyval.list); ;}
     break;
 
   case 1242:
-#line 3359 "grammar.y"
+#line 3364 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].external)); ;}
     break;
 
   case 1243:
-#line 3360 "grammar.y"
+#line 3365 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].external)); ;}
     break;
 
   case 1246:
-#line 3366 "grammar.y"
+#line 3371 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].external)); ast = (yyval.list); ;}
     break;
 
   case 1247:
-#line 3367 "grammar.y"
+#line 3372 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].external)); ;}
     break;
 
   case 1248:
-#line 3369 "grammar.y"
+#line 3374 "grammar.y"
     { External _class = MkExternalClass((yyvsp[0]._class)); ListAdd((yyvsp[-1].list), _class); _class.loc = (yylsp[0]);  (yyvsp[0]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1249:
-#line 3371 "grammar.y"
+#line 3376 "grammar.y"
     { External _class = MkExternalClass((yyvsp[0]._class)); ListAdd((yyvsp[-2].list), _class); _class.loc = (yylsp[0]);  (yyvsp[0]._class).declMode = ((yyvsp[-1].declMode) != defaultAccess) ? (yyvsp[-1].declMode) : privateAccess; declMode = defaultDeclMode; ;}
     break;
 
   case 1252:
-#line 3377 "grammar.y"
+#line 3382 "grammar.y"
     { ast = MkList(); ;}
     break;
 
   case 1253:
-#line 3381 "grammar.y"
+#line 3386 "grammar.y"
     { Symbol symbol = DeclClassAddNameSpace(globalContext.nextID++, (yyvsp[-3].id).string); FreeIdentifier((yyvsp[-3].id)); (yyval.dbtableDef) = MkDBTableDef((yyvsp[-4].string), symbol, (yyvsp[-1].list)); ;}
     break;
 
   case 1254:
-#line 3382 "grammar.y"
+#line 3387 "grammar.y"
     { Symbol symbol = DeclClass(globalContext.nextID++, (yyvsp[-3].specifier).name); FreeSpecifier((yyvsp[-3].specifier)); (yyval.dbtableDef) = MkDBTableDef((yyvsp[-4].string), symbol, (yyvsp[-1].list)); ;}
     break;
 
   case 1255:
-#line 3383 "grammar.y"
+#line 3388 "grammar.y"
     { (yyval.dbtableDef) = MkDBTableDef((yyvsp[-3].string), null, (yyvsp[-1].list)); ;}
     break;
 
   case 1256:
-#line 3387 "grammar.y"
+#line 3392 "grammar.y"
     { (yyval.dbtableEntry) = MkDBFieldEntry(MkTypeName((yyvsp[-3].list), null), (yyvsp[-2].id), (yyvsp[-1].string)); ;}
     break;
 
   case 1257:
-#line 3391 "grammar.y"
+#line 3396 "grammar.y"
     { (yyval.dbindexItem) = MkDBIndexItem((yyvsp[0].id), ascending); ;}
     break;
 
   case 1258:
-#line 3392 "grammar.y"
+#line 3397 "grammar.y"
     { (yyval.dbindexItem) = MkDBIndexItem((yyvsp[0].id), descending); ;}
     break;
 
   case 1259:
-#line 3393 "grammar.y"
+#line 3398 "grammar.y"
     { (yyval.dbindexItem) = MkDBIndexItem((yyvsp[0].id), ascending); ;}
     break;
 
   case 1260:
-#line 3397 "grammar.y"
+#line 3402 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].dbindexItem)); ;}
     break;
 
   case 1261:
-#line 3398 "grammar.y"
+#line 3403 "grammar.y"
     { ListAdd((yyvsp[-2].list), (yyvsp[0].dbindexItem)); ;}
     break;
 
   case 1262:
-#line 3402 "grammar.y"
+#line 3407 "grammar.y"
     { (yyval.dbtableEntry) = MkDBIndexEntry((yyvsp[-1].list), null); ;}
     break;
 
   case 1263:
-#line 3403 "grammar.y"
+#line 3408 "grammar.y"
     { (yyval.dbtableEntry) = MkDBIndexEntry((yyvsp[-2].list), (yyvsp[-1].id)); ;}
     break;
 
   case 1264:
-#line 3407 "grammar.y"
+#line 3412 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].dbtableEntry)); ;}
     break;
 
   case 1265:
-#line 3408 "grammar.y"
+#line 3413 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[0].dbtableEntry)); ;}
     break;
 
   case 1266:
-#line 3409 "grammar.y"
+#line 3414 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].dbtableEntry)); ;}
     break;
 
   case 1267:
-#line 3410 "grammar.y"
+#line 3415 "grammar.y"
     { ListAdd((yyvsp[-1].list), (yyvsp[0].dbtableEntry)); ;}
     break;
 
   case 1268:
-#line 3414 "grammar.y"
+#line 3419 "grammar.y"
     { (yyval.exp) = MkExpDBOpen((yyvsp[-3].exp), (yyvsp[-1].exp)); ;}
     break;
 
   case 1269:
-#line 3418 "grammar.y"
+#line 3423 "grammar.y"
     { (yyval.exp) = MkExpDBField((yyvsp[-3].string), (yyvsp[-1].id)); ;}
     break;
 
   case 1270:
-#line 3422 "grammar.y"
+#line 3427 "grammar.y"
     { (yyval.exp) = MkExpDBIndex((yyvsp[-3].string), (yyvsp[-1].id)); ;}
     break;
 
   case 1271:
-#line 3426 "grammar.y"
+#line 3431 "grammar.y"
     { (yyval.exp) = MkExpDBTable((yyvsp[-1].string)); ;}
     break;
 
@@ -17637,7 +17762,7 @@ yyreduce:
     }
 
 /* Line 1037 of yacc.c.  */
-#line 17641 "grammar.ec"
+#line 17766 "grammar.ec"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -17872,6 +17997,6 @@ yyreturn:
 }
 
 
-#line 3429 "grammar.y"
+#line 3434 "grammar.y"
 
 
index 03ae39d..9918d34 100644 (file)
@@ -158,6 +158,7 @@ default:
 %type <dbtableEntry> dbindex_entry dbfield_entry
 %type <dbindexItem> dbindex_item
 %type <dbtableDef> dbtable_definition
+%type <context> compound_start
 
 %token IDENTIFIER CONSTANT STRING_LITERAL SIZEOF
 %token PTR_OP INC_OP DEC_OP LEFT_OP RIGHT_OP LE_OP GE_OP EQ_OP NE_OP
@@ -182,7 +183,6 @@ default:
 %token NEW0OP RENEW0 VAARG
 %token DBTABLE DBFIELD DBINDEX DATABASE_OPEN
 
-
 %destructor { FreeIdentifier($$); } identifier 
 %destructor { FreePointer($$); } pointer
 %destructor { FreeExpression($$); } primary_expression primary_expression_error postfix_expression unary_expression cast_expression
@@ -196,10 +196,11 @@ default:
                                     relational_expression_error equality_expression_error and_expression_error
                                     exclusive_or_expression_error inclusive_or_expression_error logical_and_expression_error
                                     logical_or_expression_error conditional_expression_error assignment_expression_error
-%destructor { FreeSpecifier($$); }  storage_class_specifier external_storage_class_specifier type_qualifier type_specifier
-                                    struct_or_union_specifier_compound struct_or_union_specifier_nocompound type ext_storage class_specifier class_specifier_error
-                                    struct_or_union_specifier_compound_error struct_class struct_class_error
-                                    enum_specifier_compound_error
+%destructor { FreeSpecifier($$); }  storage_class_specifier enum_specifier_compound enum_specifier_nocompound type_qualifier type_specifier class_specifier class_specifier_error
+                                    struct_or_union_specifier_compound struct_or_union_specifier_nocompound ext_storage type strict_type guess_type enum_class strict_type_specifier struct_class
+                                    struct_or_union_specifier_compound_error struct_class_error struct_decl
+                                    enum_specifier_compound_error enum_class_error external_storage_class_specifier
+                                    base_strict_type struct_head struct_entry
 %destructor { FreeEnumerator($$); } enumerator
 %destructor { FreeDeclarator($$); } declarator direct_declarator direct_abstract_declarator abstract_declarator
                                     direct_abstract_declarator_noarray abstract_declarator_noarray
@@ -232,7 +233,8 @@ default:
 
 %destructor { FreeList($$, FreeExpression); }  argument_expression_list expression expression_error argument_expression_list_error 
 %destructor { FreeList($$, FreeEnumerator); }  enumerator_list 
-%destructor { FreeList($$, FreeSpecifier); }   type_qualifier_list specifier_qualifier_list declaration_specifiers inheritance_specifiers _inheritance_specifiers
+%destructor { FreeList($$, FreeSpecifier); }   type_qualifier_list specifier_qualifier_list declaration_specifiers inheritance_specifiers _inheritance_specifiers external_guess_declaration_specifiers external_guess_declaration_specifiers_error
+                                               guess_declaration_specifiers guess_specifier_qualifier_list
 %destructor { FreeList($$, FreeDeclarator); }  struct_declarator_list
 %destructor { FreeList($$, FreeDeclaration); } declaration_list declaration_list_error 
 %destructor { FreeList($$, FreeInitializer); } initializer_list
@@ -243,9 +245,12 @@ default:
 %destructor { FreeList($$, FreeClassDef); } struct_declaration_list struct_declaration_list_error
 %destructor { FreeList($$, FreeMemberInit); } default_property_list default_property_list_error data_member_initialization_list data_member_initialization_list_coloned data_member_initialization_list_error
 %destructor { FreeList($$, FreeMembersInit); } members_initialization_list members_initialization_list_coloned members_initialization_list_error  
+%destructor { PopContext($$); FreeContext($$); delete $$; } compound_start
+%destructor { FreeTemplateParameter($$); } template_parameter template_type_parameter template_identifier_parameter template_expression_parameter
+%destructor { FreeTemplateArgument($$); } template_argument template_type_argument template_identifier_argument template_expression_argument
+%destructor { FreeTemplateDataType($$); } template_datatype
 %destructor { } declaration_mode
 
-
 %start thefile
 
 %%
@@ -3316,7 +3321,7 @@ external_declaration:
       { $$ = MkExternalClass($1);  $$.loc = @$; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; }
 
    | external_guess_declaration_specifiers class
-      { $$ = MkExternalClass($2);  $$.loc = @$; $2.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; }
+      { $$ = MkExternalClass($2);  $$.loc = @$; $2.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; FreeList($1, FreeSpecifier); }
 
        | external_guess_declaration
       { $$ = MkExternalDeclaration($1);  $$.loc = @$; $1.declMode = declMode; declMode = defaultDeclMode; }
index d1d560e..291508e 100644 (file)
@@ -3629,6 +3629,9 @@ bool MatchTypeExpression(Expression sourceExp, Type dest, OldList conversions, b
             sourceExp._classExp.decl = decl;
             sourceExp.expType = dest;
             dest.refCount++;
+
+            FreeType(source);
+            FreeType(dest);
             return true;
          }
       }