Changeset 8780e30


Ignore:
Timestamp:
Nov 9, 2016, 1:55:46 PM (5 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
b3b2077
Parents:
dc86541
Message:

build appropriate nodes when parsing member tuple expressions

Location:
src/Parser
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ExpressionNode.cc

    rdc86541 r8780e30  
    172172} // build_constantStr
    173173
     174Expression * build_field_name_FLOATINGconstant( const std::string & str ) {
     175        // str is of the form A.B -> separate at the . and return member expression
     176        int a, b;
     177        char dot;
     178        std::stringstream ss( str );
     179        ss >> a >> dot >> b;
     180        UntypedMemberExpr * ret = new UntypedMemberExpr(
     181                new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::SignedInt ), toString( b ) ) ),
     182                new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::SignedInt ), toString( a ) ) ) );
     183        delete &str;
     184        return ret;
     185} // build_field_name_FLOATINGconstant
     186
     187Expression * make_field_name_fraction_constants( Expression * fieldName, Expression * fracts ) {
     188        if ( fracts ) {
     189                if ( UntypedMemberExpr * memberExpr = dynamic_cast< UntypedMemberExpr * >( fracts ) ) {
     190                        memberExpr->set_member( make_field_name_fraction_constants( fieldName, memberExpr->get_aggregate() ) );
     191                        return memberExpr;
     192                } else {
     193                        return new UntypedMemberExpr( fracts, fieldName );
     194                }
     195        }
     196        return fieldName;
     197} // make_field_name_fraction_constants
     198
     199Expression * build_field_name_fraction_constants( Expression * fieldName, ExpressionNode * fracts ) {
     200        return make_field_name_fraction_constants( fieldName, maybeMoveBuild< Expression >( fracts ) );
     201} // build_field_name_fraction_constants
     202
     203Expression * build_field_name_REALFRACTIONconstant( const std::string & str ) {
     204        assert( str[0] == '.' );
     205        Expression * ret = build_constantInteger( *new std::string( str.substr(1) ) );
     206        delete &str;
     207        return ret;
     208} // build_field_name_REALFRACTIONconstant
     209
     210Expression * build_field_name_REALDECIMALconstant( const std::string & str ) {
     211        assert( str[str.size()-1] == '.' );
     212        Expression * ret = build_constantInteger( *new std::string( str.substr( 0, str.size()-1 ) ) );
     213        delete &str;
     214        return ret;
     215} // build_field_name_REALDECIMALconstant
     216
    174217NameExpr * build_varref( const string *name, bool labelp ) {
    175218        NameExpr *expr = new NameExpr( *name, nullptr );
  • src/Parser/ParseNode.h

    rdc86541 r8780e30  
    155155Expression * build_constantChar( const std::string &str );
    156156ConstantExpr * build_constantStr( const std::string &str );
     157Expression * build_field_name_FLOATINGconstant( const std::string & str );
     158Expression * build_field_name_fraction_constants( Expression * fieldName, ExpressionNode * fracts );
     159Expression * build_field_name_REALFRACTIONconstant( const std::string & str );
     160Expression * build_field_name_REALDECIMALconstant( const std::string & str );
    157161
    158162NameExpr * build_varref( const std::string * name, bool labelp = false );
  • src/Parser/parser.cc

    rdc86541 r8780e30  
    10311031     384,   386,   388,   390,   392,   394,   396,   398,   407,   408,
    10321032     414,   415,   419,   420,   424,   425,   427,   429,   431,   433,
    1033      435,   440,   442,   444,   448,   450,   454,   457,   459,   461,
    1034      466,   479,   481,   483,   485,   487,   489,   491,   493,   495,
    1035      497,   499,   506,   507,   513,   514,   515,   516,   520,   521,
    1036      528,   529,   531,   533,   538,   539,   541,   546,   547,   549,
    1037      554,   555,   557,   559,   561,   566,   567,   569,   574,   575,
    1038      580,   581,   586,   587,   592,   593,   598,   599,   604,   605,
    1039      608,   615,   620,   621,   629,   630,   634,   635,   636,   637,
    1040      638,   639,   640,   641,   642,   643,   644,   645,   655,   657,
    1041      662,   663,   668,   669,   675,   676,   682,   683,   684,   685,
    1042      686,   687,   688,   689,   690,   700,   707,   709,   719,   720,
    1043      725,   727,   733,   735,   739,   740,   745,   750,   753,   755,
    1044      757,   767,   769,   780,   781,   783,   787,   789,   793,   794,
    1045      799,   800,   804,   809,   810,   814,   816,   822,   823,   827,
    1046      829,   831,   833,   839,   840,   844,   846,   851,   853,   855,
    1047      860,   862,   867,   869,   873,   876,   880,   883,   887,   889,
    1048      891,   893,   898,   900,   902,   907,   909,   911,   913,   915,
    1049      920,   922,   924,   926,   931,   943,   944,   949,   951,   956,
    1050      960,   962,   964,   966,   968,   974,   975,   981,   982,   986,
    1051      987,   992,   994,  1000,  1001,  1003,  1008,  1013,  1023,  1025,
    1052     1029,  1030,  1035,  1037,  1041,  1042,  1046,  1048,  1052,  1053,
    1053     1057,  1058,  1062,  1063,  1078,  1079,  1080,  1081,  1082,  1086,
    1054     1091,  1098,  1108,  1113,  1118,  1126,  1131,  1136,  1141,  1146,
    1055     1176,  1181,  1188,  1190,  1197,  1202,  1207,  1218,  1223,  1228,
    1056     1233,  1238,  1247,  1252,  1260,  1261,  1262,  1263,  1269,  1274,
    1057     1282,  1283,  1284,  1285,  1289,  1290,  1291,  1292,  1297,  1298,
    1058     1307,  1308,  1313,  1314,  1319,  1321,  1323,  1325,  1327,  1330,
    1059     1329,  1341,  1342,  1344,  1354,  1355,  1360,  1362,  1364,  1366,
    1060     1368,  1371,  1373,  1376,  1381,  1383,  1385,  1387,  1389,  1391,
    1061     1393,  1395,  1397,  1399,  1401,  1403,  1405,  1411,  1412,  1414,
    1062     1416,  1418,  1423,  1424,  1430,  1431,  1433,  1435,  1440,  1442,
    1063     1444,  1446,  1451,  1452,  1454,  1456,  1461,  1462,  1464,  1469,
    1064     1470,  1472,  1474,  1479,  1481,  1483,  1488,  1489,  1493,  1495,
    1065     1501,  1500,  1504,  1506,  1511,  1513,  1519,  1520,  1525,  1526,
    1066     1528,  1529,  1538,  1539,  1541,  1543,  1548,  1550,  1556,  1557,
    1067     1559,  1562,  1565,  1570,  1571,  1576,  1581,  1585,  1587,  1593,
    1068     1592,  1599,  1601,  1607,  1608,  1616,  1617,  1621,  1622,  1623,
    1069     1625,  1627,  1634,  1635,  1637,  1639,  1644,  1645,  1651,  1652,
    1070     1656,  1657,  1662,  1663,  1664,  1666,  1674,  1675,  1677,  1680,
    1071     1682,  1686,  1687,  1688,  1690,  1692,  1696,  1701,  1709,  1710,
    1072     1719,  1721,  1726,  1727,  1728,  1732,  1733,  1734,  1738,  1739,
    1073     1740,  1744,  1745,  1746,  1751,  1752,  1753,  1754,  1760,  1761,
    1074     1763,  1768,  1769,  1774,  1775,  1776,  1777,  1778,  1793,  1794,
    1075     1799,  1800,  1806,  1808,  1811,  1813,  1815,  1838,  1839,  1841,
    1076     1843,  1848,  1849,  1851,  1856,  1861,  1862,  1868,  1867,  1871,
    1077     1875,  1877,  1879,  1885,  1886,  1891,  1896,  1898,  1903,  1905,
    1078     1906,  1908,  1913,  1915,  1917,  1922,  1924,  1929,  1934,  1942,
    1079     1948,  1947,  1961,  1962,  1967,  1968,  1972,  1977,  1982,  1990,
    1080     1995,  2006,  2007,  2012,  2013,  2019,  2020,  2024,  2025,  2026,
    1081     2029,  2028,  2039,  2048,  2054,  2060,  2069,  2075,  2081,  2087,
    1082     2093,  2101,  2107,  2115,  2121,  2130,  2131,  2132,  2136,  2140,
    1083     2142,  2147,  2148,  2152,  2153,  2158,  2164,  2165,  2168,  2170,
    1084     2171,  2175,  2176,  2177,  2178,  2212,  2214,  2215,  2217,  2222,
    1085     2227,  2232,  2234,  2236,  2241,  2243,  2245,  2247,  2252,  2254,
    1086     2263,  2265,  2266,  2271,  2273,  2275,  2280,  2282,  2284,  2289,
    1087     2291,  2293,  2302,  2303,  2304,  2308,  2310,  2312,  2317,  2319,
    1088     2321,  2326,  2328,  2330,  2345,  2347,  2348,  2350,  2355,  2356,
    1089     2361,  2363,  2365,  2370,  2372,  2374,  2376,  2381,  2383,  2385,
    1090     2395,  2397,  2398,  2400,  2405,  2407,  2409,  2414,  2416,  2418,
    1091     2420,  2425,  2427,  2429,  2460,  2462,  2463,  2465,  2470,  2475,
    1092     2483,  2485,  2487,  2492,  2494,  2499,  2501,  2515,  2516,  2518,
    1093     2523,  2525,  2527,  2529,  2531,  2536,  2537,  2539,  2541,  2546,
    1094     2548,  2550,  2556,  2558,  2560,  2564,  2566,  2568,  2570,  2584,
    1095     2585,  2587,  2592,  2594,  2596,  2598,  2600,  2605,  2606,  2608,
    1096     2610,  2615,  2617,  2619,  2625,  2626,  2628,  2637,  2640,  2642,
    1097     2645,  2647,  2649,  2662,  2663,  2665,  2670,  2672,  2674,  2676,
    1098     2678,  2683,  2684,  2686,  2688,  2693,  2695,  2703,  2704,  2705,
    1099     2710,  2711,  2715,  2717,  2719,  2721,  2723,  2725,  2732,  2734,
    1100     2736,  2738,  2740,  2743,  2745,  2747,  2749,  2751,  2756,  2758,
    1101     2760,  2765,  2791,  2792,  2794,  2798,  2799,  2803,  2805,  2807,
    1102     2809,  2811,  2813,  2820,  2822,  2824,  2826,  2828,  2830,  2835,
    1103     2842,  2844,  2862,  2864,  2869,  2870
     1033     435,   440,   442,   444,   450,   451,   459,   462,   464,   466,
     1034     471,   484,   486,   488,   490,   492,   494,   496,   498,   500,
     1035     502,   504,   511,   512,   518,   519,   520,   521,   525,   526,
     1036     533,   534,   536,   538,   543,   544,   546,   551,   552,   554,
     1037     559,   560,   562,   564,   566,   571,   572,   574,   579,   580,
     1038     585,   586,   591,   592,   597,   598,   603,   604,   609,   610,
     1039     613,   620,   625,   626,   634,   635,   639,   640,   641,   642,
     1040     643,   644,   645,   646,   647,   648,   649,   650,   660,   662,
     1041     667,   668,   673,   674,   680,   681,   687,   688,   689,   690,
     1042     691,   692,   693,   694,   695,   705,   712,   714,   724,   725,
     1043     730,   732,   738,   740,   744,   745,   750,   755,   758,   760,
     1044     762,   772,   774,   785,   786,   788,   792,   794,   798,   799,
     1045     804,   805,   809,   814,   815,   819,   821,   827,   828,   832,
     1046     834,   836,   838,   844,   845,   849,   851,   856,   858,   860,
     1047     865,   867,   872,   874,   878,   881,   885,   888,   892,   894,
     1048     896,   898,   903,   905,   907,   912,   914,   916,   918,   920,
     1049     925,   927,   929,   931,   936,   948,   949,   954,   956,   961,
     1050     965,   967,   969,   971,   973,   979,   980,   986,   987,   991,
     1051     992,   997,   999,  1005,  1006,  1008,  1013,  1018,  1028,  1030,
     1052    1034,  1035,  1040,  1042,  1046,  1047,  1051,  1053,  1057,  1058,
     1053    1062,  1063,  1067,  1068,  1083,  1084,  1085,  1086,  1087,  1091,
     1054    1096,  1103,  1113,  1118,  1123,  1131,  1136,  1141,  1146,  1151,
     1055    1181,  1186,  1193,  1195,  1202,  1207,  1212,  1223,  1228,  1233,
     1056    1238,  1243,  1252,  1257,  1265,  1266,  1267,  1268,  1274,  1279,
     1057    1287,  1288,  1289,  1290,  1294,  1295,  1296,  1297,  1302,  1303,
     1058    1312,  1313,  1318,  1319,  1324,  1326,  1328,  1330,  1332,  1335,
     1059    1334,  1346,  1347,  1349,  1359,  1360,  1365,  1367,  1369,  1371,
     1060    1373,  1376,  1378,  1381,  1386,  1388,  1390,  1392,  1394,  1396,
     1061    1398,  1400,  1402,  1404,  1406,  1408,  1410,  1416,  1417,  1419,
     1062    1421,  1423,  1428,  1429,  1435,  1436,  1438,  1440,  1445,  1447,
     1063    1449,  1451,  1456,  1457,  1459,  1461,  1466,  1467,  1469,  1474,
     1064    1475,  1477,  1479,  1484,  1486,  1488,  1493,  1494,  1498,  1500,
     1065    1506,  1505,  1509,  1511,  1516,  1518,  1524,  1525,  1530,  1531,
     1066    1533,  1534,  1543,  1544,  1546,  1548,  1553,  1555,  1561,  1562,
     1067    1564,  1567,  1570,  1575,  1576,  1581,  1586,  1590,  1592,  1598,
     1068    1597,  1604,  1606,  1612,  1613,  1621,  1622,  1626,  1627,  1628,
     1069    1630,  1632,  1639,  1640,  1642,  1644,  1649,  1650,  1656,  1657,
     1070    1661,  1662,  1667,  1668,  1669,  1671,  1679,  1680,  1682,  1685,
     1071    1687,  1691,  1692,  1693,  1695,  1697,  1701,  1706,  1714,  1715,
     1072    1724,  1726,  1731,  1732,  1733,  1737,  1738,  1739,  1743,  1744,
     1073    1745,  1749,  1750,  1751,  1756,  1757,  1758,  1759,  1765,  1766,
     1074    1768,  1773,  1774,  1779,  1780,  1781,  1782,  1783,  1798,  1799,
     1075    1804,  1805,  1811,  1813,  1816,  1818,  1820,  1843,  1844,  1846,
     1076    1848,  1853,  1854,  1856,  1861,  1866,  1867,  1873,  1872,  1876,
     1077    1880,  1882,  1884,  1890,  1891,  1896,  1901,  1903,  1908,  1910,
     1078    1911,  1913,  1918,  1920,  1922,  1927,  1929,  1934,  1939,  1947,
     1079    1953,  1952,  1966,  1967,  1972,  1973,  1977,  1982,  1987,  1995,
     1080    2000,  2011,  2012,  2017,  2018,  2024,  2025,  2029,  2030,  2031,
     1081    2034,  2033,  2044,  2053,  2059,  2065,  2074,  2080,  2086,  2092,
     1082    2098,  2106,  2112,  2120,  2126,  2135,  2136,  2137,  2141,  2145,
     1083    2147,  2152,  2153,  2157,  2158,  2163,  2169,  2170,  2173,  2175,
     1084    2176,  2180,  2181,  2182,  2183,  2217,  2219,  2220,  2222,  2227,
     1085    2232,  2237,  2239,  2241,  2246,  2248,  2250,  2252,  2257,  2259,
     1086    2268,  2270,  2271,  2276,  2278,  2280,  2285,  2287,  2289,  2294,
     1087    2296,  2298,  2307,  2308,  2309,  2313,  2315,  2317,  2322,  2324,
     1088    2326,  2331,  2333,  2335,  2350,  2352,  2353,  2355,  2360,  2361,
     1089    2366,  2368,  2370,  2375,  2377,  2379,  2381,  2386,  2388,  2390,
     1090    2400,  2402,  2403,  2405,  2410,  2412,  2414,  2419,  2421,  2423,
     1091    2425,  2430,  2432,  2434,  2465,  2467,  2468,  2470,  2475,  2480,
     1092    2488,  2490,  2492,  2497,  2499,  2504,  2506,  2520,  2521,  2523,
     1093    2528,  2530,  2532,  2534,  2536,  2541,  2542,  2544,  2546,  2551,
     1094    2553,  2555,  2561,  2563,  2565,  2569,  2571,  2573,  2575,  2589,
     1095    2590,  2592,  2597,  2599,  2601,  2603,  2605,  2610,  2611,  2613,
     1096    2615,  2620,  2622,  2624,  2630,  2631,  2633,  2642,  2645,  2647,
     1097    2650,  2652,  2654,  2667,  2668,  2670,  2675,  2677,  2679,  2681,
     1098    2683,  2688,  2689,  2691,  2693,  2698,  2700,  2708,  2709,  2710,
     1099    2715,  2716,  2720,  2722,  2724,  2726,  2728,  2730,  2737,  2739,
     1100    2741,  2743,  2745,  2748,  2750,  2752,  2754,  2756,  2761,  2763,
     1101    2765,  2770,  2796,  2797,  2799,  2803,  2804,  2808,  2810,  2812,
     1102    2814,  2816,  2818,  2825,  2827,  2829,  2831,  2833,  2835,  2840,
     1103    2847,  2849,  2867,  2869,  2874,  2875
    11041104};
    11051105#endif
     
    49824982/* Line 1806 of yacc.c  */
    49834983#line 387 "parser.yy"
    4984     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (2)].en), build_constantInteger( *(yyvsp[(2) - (2)].tok) ) ) ); }
     4984    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (2)].en), build_field_name_REALFRACTIONconstant( *(yyvsp[(2) - (2)].tok) ) ) ); }
    49854985    break;
    49864986
     
    50565056/* Line 1806 of yacc.c  */
    50575057#line 426 "parser.yy"
    5058     { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (2)].tok) ) ), maybeMoveBuild<Expression>( (yyvsp[(2) - (2)].en) ) ) ); }
     5058    { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *(yyvsp[(1) - (2)].tok) ) ), maybeMoveBuild<Expression>( (yyvsp[(2) - (2)].en) ) ) ); }
    50595059    break;
    50605060
     
    50635063/* Line 1806 of yacc.c  */
    50645064#line 428 "parser.yy"
    5065     { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (6)].tok) ) ), build_tuple( (yyvsp[(4) - (6)].en) ) ) ); }
     5065    { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *(yyvsp[(1) - (6)].tok) ) ), build_tuple( (yyvsp[(4) - (6)].en) ) ) ); }
    50665066    break;
    50675067
     
    50985098/* Line 1806 of yacc.c  */
    50995099#line 441 "parser.yy"
    5100     { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (2)].tok) ) ); }
     5100    { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_constantInteger( *(yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
    51015101    break;
    51025102
     
    51055105/* Line 1806 of yacc.c  */
    51065106#line 443 "parser.yy"
    5107     { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (2)].tok) ) ); }
     5107    { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *(yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
    51085108    break;
    51095109
     
    51125112/* Line 1806 of yacc.c  */
    51135113#line 445 "parser.yy"
    5114     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     5114    { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_varref( (yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
     5115    break;
     5116
     5117  case 54:
     5118
     5119/* Line 1806 of yacc.c  */
     5120#line 450 "parser.yy"
     5121    { (yyval.en) = nullptr; }
     5122    break;
     5123
     5124  case 55:
     5125
     5126/* Line 1806 of yacc.c  */
     5127#line 452 "parser.yy"
     5128    {
     5129                        Expression * constant = build_field_name_REALFRACTIONconstant( *(yyvsp[(2) - (2)].tok) );
     5130                        (yyval.en) = (yyvsp[(1) - (2)].en) != nullptr ? new ExpressionNode( build_fieldSel( (yyvsp[(1) - (2)].en),  constant ) ) : new ExpressionNode( constant );
     5131                }
    51155132    break;
    51165133
     
    51185135
    51195136/* Line 1806 of yacc.c  */
    5120 #line 458 "parser.yy"
     5137#line 463 "parser.yy"
    51215138    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    51225139    break;
     
    51255142
    51265143/* Line 1806 of yacc.c  */
    5127 #line 460 "parser.yy"
     5144#line 465 "parser.yy"
    51285145    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
    51295146    break;
     
    51325149
    51335150/* Line 1806 of yacc.c  */
    5134 #line 462 "parser.yy"
     5151#line 467 "parser.yy"
    51355152    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
    51365153    break;
     
    51395156
    51405157/* Line 1806 of yacc.c  */
    5141 #line 467 "parser.yy"
     5158#line 472 "parser.yy"
    51425159    {
    51435160                        switch ( (yyvsp[(1) - (2)].op) ) {
     
    51575174
    51585175/* Line 1806 of yacc.c  */
    5159 #line 480 "parser.yy"
     5176#line 485 "parser.yy"
    51605177    { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
    51615178    break;
     
    51645181
    51655182/* Line 1806 of yacc.c  */
    5166 #line 482 "parser.yy"
     5183#line 487 "parser.yy"
    51675184    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
    51685185    break;
     
    51715188
    51725189/* Line 1806 of yacc.c  */
    5173 #line 484 "parser.yy"
     5190#line 489 "parser.yy"
    51745191    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
    51755192    break;
     
    51785195
    51795196/* Line 1806 of yacc.c  */
    5180 #line 486 "parser.yy"
     5197#line 491 "parser.yy"
    51815198    { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
    51825199    break;
     
    51855202
    51865203/* Line 1806 of yacc.c  */
    5187 #line 488 "parser.yy"
     5204#line 493 "parser.yy"
    51885205    { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
    51895206    break;
     
    51925209
    51935210/* Line 1806 of yacc.c  */
    5194 #line 490 "parser.yy"
     5211#line 495 "parser.yy"
    51955212    { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
    51965213    break;
     
    51995216
    52005217/* Line 1806 of yacc.c  */
    5201 #line 492 "parser.yy"
     5218#line 497 "parser.yy"
    52025219    { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
    52035220    break;
     
    52065223
    52075224/* Line 1806 of yacc.c  */
    5208 #line 494 "parser.yy"
     5225#line 499 "parser.yy"
    52095226    { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
    52105227    break;
     
    52135230
    52145231/* Line 1806 of yacc.c  */
    5215 #line 496 "parser.yy"
     5232#line 501 "parser.yy"
    52165233    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
    52175234    break;
     
    52205237
    52215238/* Line 1806 of yacc.c  */
    5222 #line 498 "parser.yy"
     5239#line 503 "parser.yy"
    52235240    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
    52245241    break;
     
    52275244
    52285245/* Line 1806 of yacc.c  */
    5229 #line 500 "parser.yy"
     5246#line 505 "parser.yy"
    52305247    { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
    52315248    break;
     
    52345251
    52355252/* Line 1806 of yacc.c  */
    5236 #line 506 "parser.yy"
     5253#line 511 "parser.yy"
    52375254    { (yyval.op) = OperKinds::PointTo; }
    52385255    break;
     
    52415258
    52425259/* Line 1806 of yacc.c  */
    5243 #line 507 "parser.yy"
     5260#line 512 "parser.yy"
    52445261    { (yyval.op) = OperKinds::AddressOf; }
    52455262    break;
     
    52485265
    52495266/* Line 1806 of yacc.c  */
    5250 #line 513 "parser.yy"
     5267#line 518 "parser.yy"
    52515268    { (yyval.op) = OperKinds::UnPlus; }
    52525269    break;
     
    52555272
    52565273/* Line 1806 of yacc.c  */
    5257 #line 514 "parser.yy"
     5274#line 519 "parser.yy"
    52585275    { (yyval.op) = OperKinds::UnMinus; }
    52595276    break;
     
    52625279
    52635280/* Line 1806 of yacc.c  */
    5264 #line 515 "parser.yy"
     5281#line 520 "parser.yy"
    52655282    { (yyval.op) = OperKinds::Neg; }
    52665283    break;
     
    52695286
    52705287/* Line 1806 of yacc.c  */
    5271 #line 516 "parser.yy"
     5288#line 521 "parser.yy"
    52725289    { (yyval.op) = OperKinds::BitNeg; }
    52735290    break;
     
    52765293
    52775294/* Line 1806 of yacc.c  */
    5278 #line 522 "parser.yy"
     5295#line 527 "parser.yy"
    52795296    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
    52805297    break;
     
    52835300
    52845301/* Line 1806 of yacc.c  */
    5285 #line 530 "parser.yy"
     5302#line 535 "parser.yy"
    52865303    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    52875304    break;
     
    52905307
    52915308/* Line 1806 of yacc.c  */
    5292 #line 532 "parser.yy"
     5309#line 537 "parser.yy"
    52935310    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    52945311    break;
     
    52975314
    52985315/* Line 1806 of yacc.c  */
    5299 #line 534 "parser.yy"
     5316#line 539 "parser.yy"
    53005317    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53015318    break;
     
    53045321
    53055322/* Line 1806 of yacc.c  */
    5306 #line 540 "parser.yy"
     5323#line 545 "parser.yy"
    53075324    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53085325    break;
     
    53115328
    53125329/* Line 1806 of yacc.c  */
    5313 #line 542 "parser.yy"
     5330#line 547 "parser.yy"
    53145331    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53155332    break;
     
    53185335
    53195336/* Line 1806 of yacc.c  */
    5320 #line 548 "parser.yy"
     5337#line 553 "parser.yy"
    53215338    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53225339    break;
     
    53255342
    53265343/* Line 1806 of yacc.c  */
    5327 #line 550 "parser.yy"
     5344#line 555 "parser.yy"
    53285345    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53295346    break;
     
    53325349
    53335350/* Line 1806 of yacc.c  */
    5334 #line 556 "parser.yy"
     5351#line 561 "parser.yy"
    53355352    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53365353    break;
     
    53395356
    53405357/* Line 1806 of yacc.c  */
    5341 #line 558 "parser.yy"
     5358#line 563 "parser.yy"
    53425359    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53435360    break;
     
    53465363
    53475364/* Line 1806 of yacc.c  */
    5348 #line 560 "parser.yy"
     5365#line 565 "parser.yy"
    53495366    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53505367    break;
     
    53535370
    53545371/* Line 1806 of yacc.c  */
    5355 #line 562 "parser.yy"
     5372#line 567 "parser.yy"
    53565373    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53575374    break;
     
    53605377
    53615378/* Line 1806 of yacc.c  */
    5362 #line 568 "parser.yy"
     5379#line 573 "parser.yy"
    53635380    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53645381    break;
     
    53675384
    53685385/* Line 1806 of yacc.c  */
    5369 #line 570 "parser.yy"
     5386#line 575 "parser.yy"
    53705387    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53715388    break;
     
    53745391
    53755392/* Line 1806 of yacc.c  */
    5376 #line 576 "parser.yy"
     5393#line 581 "parser.yy"
    53775394    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53785395    break;
     
    53815398
    53825399/* Line 1806 of yacc.c  */
    5383 #line 582 "parser.yy"
     5400#line 587 "parser.yy"
    53845401    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53855402    break;
     
    53885405
    53895406/* Line 1806 of yacc.c  */
    5390 #line 588 "parser.yy"
     5407#line 593 "parser.yy"
    53915408    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53925409    break;
     
    53955412
    53965413/* Line 1806 of yacc.c  */
    5397 #line 594 "parser.yy"
     5414#line 599 "parser.yy"
    53985415    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
    53995416    break;
     
    54025419
    54035420/* Line 1806 of yacc.c  */
    5404 #line 600 "parser.yy"
     5421#line 605 "parser.yy"
    54055422    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
    54065423    break;
     
    54095426
    54105427/* Line 1806 of yacc.c  */
    5411 #line 606 "parser.yy"
     5428#line 611 "parser.yy"
    54125429    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
    54135430    break;
     
    54165433
    54175434/* Line 1806 of yacc.c  */
    5418 #line 609 "parser.yy"
     5435#line 614 "parser.yy"
    54195436    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
    54205437    break;
     
    54235440
    54245441/* Line 1806 of yacc.c  */
    5425 #line 622 "parser.yy"
     5442#line 627 "parser.yy"
    54265443    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54275444    break;
     
    54305447
    54315448/* Line 1806 of yacc.c  */
    5432 #line 629 "parser.yy"
     5449#line 634 "parser.yy"
    54335450    { (yyval.en) = nullptr; }
    54345451    break;
     
    54375454
    54385455/* Line 1806 of yacc.c  */
    5439 #line 634 "parser.yy"
     5456#line 639 "parser.yy"
    54405457    { (yyval.op) = OperKinds::Assign; }
    54415458    break;
     
    54445461
    54455462/* Line 1806 of yacc.c  */
    5446 #line 635 "parser.yy"
     5463#line 640 "parser.yy"
    54475464    { (yyval.op) = OperKinds::AtAssn; }
    54485465    break;
     
    54515468
    54525469/* Line 1806 of yacc.c  */
    5453 #line 636 "parser.yy"
     5470#line 641 "parser.yy"
    54545471    { (yyval.op) = OperKinds::MulAssn; }
    54555472    break;
     
    54585475
    54595476/* Line 1806 of yacc.c  */
    5460 #line 637 "parser.yy"
     5477#line 642 "parser.yy"
    54615478    { (yyval.op) = OperKinds::DivAssn; }
    54625479    break;
     
    54655482
    54665483/* Line 1806 of yacc.c  */
    5467 #line 638 "parser.yy"
     5484#line 643 "parser.yy"
    54685485    { (yyval.op) = OperKinds::ModAssn; }
    54695486    break;
     
    54725489
    54735490/* Line 1806 of yacc.c  */
    5474 #line 639 "parser.yy"
     5491#line 644 "parser.yy"
    54755492    { (yyval.op) = OperKinds::PlusAssn; }
    54765493    break;
     
    54795496
    54805497/* Line 1806 of yacc.c  */
    5481 #line 640 "parser.yy"
     5498#line 645 "parser.yy"
    54825499    { (yyval.op) = OperKinds::MinusAssn; }
    54835500    break;
     
    54865503
    54875504/* Line 1806 of yacc.c  */
    5488 #line 641 "parser.yy"
     5505#line 646 "parser.yy"
    54895506    { (yyval.op) = OperKinds::LSAssn; }
    54905507    break;
     
    54935510
    54945511/* Line 1806 of yacc.c  */
    5495 #line 642 "parser.yy"
     5512#line 647 "parser.yy"
    54965513    { (yyval.op) = OperKinds::RSAssn; }
    54975514    break;
     
    55005517
    55015518/* Line 1806 of yacc.c  */
    5502 #line 643 "parser.yy"
     5519#line 648 "parser.yy"
    55035520    { (yyval.op) = OperKinds::AndAssn; }
    55045521    break;
     
    55075524
    55085525/* Line 1806 of yacc.c  */
    5509 #line 644 "parser.yy"
     5526#line 649 "parser.yy"
    55105527    { (yyval.op) = OperKinds::ERAssn; }
    55115528    break;
     
    55145531
    55155532/* Line 1806 of yacc.c  */
    5516 #line 645 "parser.yy"
     5533#line 650 "parser.yy"
    55175534    { (yyval.op) = OperKinds::OrAssn; }
    55185535    break;
     
    55215538
    55225539/* Line 1806 of yacc.c  */
    5523 #line 656 "parser.yy"
     5540#line 661 "parser.yy"
    55245541    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
    55255542    break;
     
    55285545
    55295546/* Line 1806 of yacc.c  */
    5530 #line 658 "parser.yy"
     5547#line 663 "parser.yy"
    55315548    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
    55325549    break;
     
    55355552
    55365553/* Line 1806 of yacc.c  */
    5537 #line 664 "parser.yy"
     5554#line 669 "parser.yy"
    55385555    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    55395556    break;
     
    55425559
    55435560/* Line 1806 of yacc.c  */
    5544 #line 670 "parser.yy"
     5561#line 675 "parser.yy"
    55455562    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    55465563    break;
     
    55495566
    55505567/* Line 1806 of yacc.c  */
    5551 #line 675 "parser.yy"
     5568#line 680 "parser.yy"
    55525569    { (yyval.en) = 0; }
    55535570    break;
     
    55565573
    55575574/* Line 1806 of yacc.c  */
    5558 #line 684 "parser.yy"
     5575#line 689 "parser.yy"
    55595576    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    55605577    break;
     
    55635580
    55645581/* Line 1806 of yacc.c  */
    5565 #line 691 "parser.yy"
     5582#line 696 "parser.yy"
    55665583    {
    55675584                        Token fn;
     
    55745591
    55755592/* Line 1806 of yacc.c  */
    5576 #line 701 "parser.yy"
     5593#line 706 "parser.yy"
    55775594    {
    55785595                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    55835600
    55845601/* Line 1806 of yacc.c  */
    5585 #line 708 "parser.yy"
     5602#line 713 "parser.yy"
    55865603    { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
    55875604    break;
     
    55905607
    55915608/* Line 1806 of yacc.c  */
    5592 #line 715 "parser.yy"
     5609#line 720 "parser.yy"
    55935610    { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
    55945611    break;
     
    55975614
    55985615/* Line 1806 of yacc.c  */
    5599 #line 721 "parser.yy"
     5616#line 726 "parser.yy"
    56005617    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    56015618    break;
     
    56045621
    56055622/* Line 1806 of yacc.c  */
    5606 #line 726 "parser.yy"
     5623#line 731 "parser.yy"
    56075624    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    56085625    break;
     
    56115628
    56125629/* Line 1806 of yacc.c  */
    5613 #line 728 "parser.yy"
     5630#line 733 "parser.yy"
    56145631    {   // mark all fields in list
    56155632                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     
    56225639
    56235640/* Line 1806 of yacc.c  */
    5624 #line 734 "parser.yy"
     5641#line 739 "parser.yy"
    56255642    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    56265643    break;
     
    56295646
    56305647/* Line 1806 of yacc.c  */
    5631 #line 741 "parser.yy"
     5648#line 746 "parser.yy"
    56325649    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    56335650    break;
     
    56365653
    56375654/* Line 1806 of yacc.c  */
    5638 #line 746 "parser.yy"
     5655#line 751 "parser.yy"
    56395656    { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
    56405657    break;
     
    56435660
    56445661/* Line 1806 of yacc.c  */
    5645 #line 752 "parser.yy"
     5662#line 757 "parser.yy"
    56465663    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
    56475664    break;
     
    56505667
    56515668/* Line 1806 of yacc.c  */
    5652 #line 754 "parser.yy"
     5669#line 759 "parser.yy"
    56535670    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
    56545671    break;
     
    56575674
    56585675/* Line 1806 of yacc.c  */
    5659 #line 756 "parser.yy"
     5676#line 761 "parser.yy"
    56605677    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
    56615678    break;
     
    56645681
    56655682/* Line 1806 of yacc.c  */
    5666 #line 758 "parser.yy"
     5683#line 763 "parser.yy"
    56675684    {
    56685685                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
     
    56795696
    56805697/* Line 1806 of yacc.c  */
    5681 #line 768 "parser.yy"
     5698#line 773 "parser.yy"
    56825699    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
    56835700    break;
     
    56865703
    56875704/* Line 1806 of yacc.c  */
    5688 #line 770 "parser.yy"
     5705#line 775 "parser.yy"
    56895706    {
    56905707                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
     
    56965713
    56975714/* Line 1806 of yacc.c  */
    5698 #line 780 "parser.yy"
     5715#line 785 "parser.yy"
    56995716    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    57005717    break;
     
    57035720
    57045721/* Line 1806 of yacc.c  */
    5705 #line 782 "parser.yy"
     5722#line 787 "parser.yy"
    57065723    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    57075724    break;
     
    57105727
    57115728/* Line 1806 of yacc.c  */
    5712 #line 787 "parser.yy"
     5729#line 792 "parser.yy"
    57135730    { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
    57145731    break;
     
    57175734
    57185735/* Line 1806 of yacc.c  */
    5719 #line 789 "parser.yy"
     5736#line 794 "parser.yy"
    57205737    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
    57215738    break;
     
    57245741
    57255742/* Line 1806 of yacc.c  */
    5726 #line 793 "parser.yy"
     5743#line 798 "parser.yy"
    57275744    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
    57285745    break;
     
    57315748
    57325749/* Line 1806 of yacc.c  */
    5733 #line 794 "parser.yy"
     5750#line 799 "parser.yy"
    57345751    { (yyval.sn) = new StatementNode( build_default() ); }
    57355752    break;
     
    57385755
    57395756/* Line 1806 of yacc.c  */
    5740 #line 800 "parser.yy"
     5757#line 805 "parser.yy"
    57415758    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
    57425759    break;
     
    57455762
    57465763/* Line 1806 of yacc.c  */
    5747 #line 804 "parser.yy"
     5764#line 809 "parser.yy"
    57485765    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
    57495766    break;
     
    57525769
    57535770/* Line 1806 of yacc.c  */
    5754 #line 809 "parser.yy"
     5771#line 814 "parser.yy"
    57555772    { (yyval.sn) = 0; }
    57565773    break;
     
    57595776
    57605777/* Line 1806 of yacc.c  */
    5761 #line 815 "parser.yy"
     5778#line 820 "parser.yy"
    57625779    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
    57635780    break;
     
    57665783
    57675784/* Line 1806 of yacc.c  */
    5768 #line 817 "parser.yy"
     5785#line 822 "parser.yy"
    57695786    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
    57705787    break;
     
    57735790
    57745791/* Line 1806 of yacc.c  */
    5775 #line 822 "parser.yy"
     5792#line 827 "parser.yy"
    57765793    { (yyval.sn) = 0; }
    57775794    break;
     
    57805797
    57815798/* Line 1806 of yacc.c  */
    5782 #line 828 "parser.yy"
     5799#line 833 "parser.yy"
    57835800    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    57845801    break;
     
    57875804
    57885805/* Line 1806 of yacc.c  */
    5789 #line 830 "parser.yy"
     5806#line 835 "parser.yy"
    57905807    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
    57915808    break;
     
    57945811
    57955812/* Line 1806 of yacc.c  */
    5796 #line 832 "parser.yy"
     5813#line 837 "parser.yy"
    57975814    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    57985815    break;
     
    58015818
    58025819/* Line 1806 of yacc.c  */
    5803 #line 834 "parser.yy"
     5820#line 839 "parser.yy"
    58045821    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
    58055822    break;
     
    58085825
    58095826/* Line 1806 of yacc.c  */
    5810 #line 839 "parser.yy"
     5827#line 844 "parser.yy"
    58115828    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
    58125829    break;
     
    58155832
    58165833/* Line 1806 of yacc.c  */
    5817 #line 845 "parser.yy"
     5834#line 850 "parser.yy"
    58185835    { (yyval.sn) = 0; }
    58195836    break;
     
    58225839
    58235840/* Line 1806 of yacc.c  */
    5824 #line 847 "parser.yy"
     5841#line 852 "parser.yy"
    58255842    { (yyval.sn) = 0; }
    58265843    break;
     
    58295846
    58305847/* Line 1806 of yacc.c  */
    5831 #line 852 "parser.yy"
     5848#line 857 "parser.yy"
    58325849    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
    58335850    break;
     
    58365853
    58375854/* Line 1806 of yacc.c  */
    5838 #line 854 "parser.yy"
     5855#line 859 "parser.yy"
    58395856    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn), true ) ); }
    58405857    break;
     
    58435860
    58445861/* Line 1806 of yacc.c  */
    5845 #line 856 "parser.yy"
     5862#line 861 "parser.yy"
    58465863    { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
    58475864    break;
     
    58505867
    58515868/* Line 1806 of yacc.c  */
    5852 #line 861 "parser.yy"
     5869#line 866 "parser.yy"
    58535870    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    58545871    break;
     
    58575874
    58585875/* Line 1806 of yacc.c  */
    5859 #line 863 "parser.yy"
     5876#line 868 "parser.yy"
    58605877    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    58615878    break;
     
    58645881
    58655882/* Line 1806 of yacc.c  */
    5866 #line 868 "parser.yy"
     5883#line 873 "parser.yy"
    58675884    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
    58685885    break;
     
    58715888
    58725889/* Line 1806 of yacc.c  */
    5873 #line 872 "parser.yy"
     5890#line 877 "parser.yy"
    58745891    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
    58755892    break;
     
    58785895
    58795896/* Line 1806 of yacc.c  */
    5880 #line 875 "parser.yy"
     5897#line 880 "parser.yy"
    58815898    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
    58825899    break;
     
    58855902
    58865903/* Line 1806 of yacc.c  */
    5887 #line 879 "parser.yy"
     5904#line 884 "parser.yy"
    58885905    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
    58895906    break;
     
    58925909
    58935910/* Line 1806 of yacc.c  */
    5894 #line 882 "parser.yy"
     5911#line 887 "parser.yy"
    58955912    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
    58965913    break;
     
    58995916
    59005917/* Line 1806 of yacc.c  */
    5901 #line 886 "parser.yy"
     5918#line 891 "parser.yy"
    59025919    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
    59035920    break;
     
    59065923
    59075924/* Line 1806 of yacc.c  */
    5908 #line 888 "parser.yy"
     5925#line 893 "parser.yy"
    59095926    { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
    59105927    break;
     
    59135930
    59145931/* Line 1806 of yacc.c  */
    5915 #line 890 "parser.yy"
     5932#line 895 "parser.yy"
    59165933    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
    59175934    break;
     
    59205937
    59215938/* Line 1806 of yacc.c  */
    5922 #line 892 "parser.yy"
     5939#line 897 "parser.yy"
    59235940    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
    59245941    break;
     
    59275944
    59285945/* Line 1806 of yacc.c  */
    5929 #line 894 "parser.yy"
     5946#line 899 "parser.yy"
    59305947    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
    59315948    break;
     
    59345951
    59355952/* Line 1806 of yacc.c  */
    5936 #line 899 "parser.yy"
     5953#line 904 "parser.yy"
    59375954    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
    59385955    break;
     
    59415958
    59425959/* Line 1806 of yacc.c  */
    5943 #line 901 "parser.yy"
     5960#line 906 "parser.yy"
    59445961    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
    59455962    break;
     
    59485965
    59495966/* Line 1806 of yacc.c  */
    5950 #line 903 "parser.yy"
     5967#line 908 "parser.yy"
    59515968    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
    59525969    break;
     
    59555972
    59565973/* Line 1806 of yacc.c  */
    5957 #line 910 "parser.yy"
     5974#line 915 "parser.yy"
    59585975    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
    59595976    break;
     
    59625979
    59635980/* Line 1806 of yacc.c  */
    5964 #line 912 "parser.yy"
     5981#line 917 "parser.yy"
    59655982    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
    59665983    break;
     
    59695986
    59705987/* Line 1806 of yacc.c  */
    5971 #line 914 "parser.yy"
     5988#line 919 "parser.yy"
    59725989    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
    59735990    break;
     
    59765993
    59775994/* Line 1806 of yacc.c  */
    5978 #line 916 "parser.yy"
     5995#line 921 "parser.yy"
    59795996    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
    59805997    break;
     
    59836000
    59846001/* Line 1806 of yacc.c  */
    5985 #line 921 "parser.yy"
     6002#line 926 "parser.yy"
    59866003    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
    59876004    break;
     
    59906007
    59916008/* Line 1806 of yacc.c  */
    5992 #line 923 "parser.yy"
     6009#line 928 "parser.yy"
    59936010    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
    59946011    break;
     
    59976014
    59986015/* Line 1806 of yacc.c  */
    5999 #line 925 "parser.yy"
     6016#line 930 "parser.yy"
    60006017    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
    60016018    break;
     
    60046021
    60056022/* Line 1806 of yacc.c  */
    6006 #line 927 "parser.yy"
     6023#line 932 "parser.yy"
    60076024    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
    60086025    break;
     
    60116028
    60126029/* Line 1806 of yacc.c  */
    6013 #line 932 "parser.yy"
     6030#line 937 "parser.yy"
    60146031    {
    60156032                        (yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
     
    60206037
    60216038/* Line 1806 of yacc.c  */
    6022 #line 945 "parser.yy"
     6039#line 950 "parser.yy"
    60236040    {
    60246041                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    60306047
    60316048/* Line 1806 of yacc.c  */
    6032 #line 950 "parser.yy"
     6049#line 955 "parser.yy"
    60336050    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    60346051    break;
     
    60376054
    60386055/* Line 1806 of yacc.c  */
    6039 #line 952 "parser.yy"
     6056#line 957 "parser.yy"
    60406057    {
    60416058                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    60476064
    60486065/* Line 1806 of yacc.c  */
    6049 #line 961 "parser.yy"
     6066#line 966 "parser.yy"
    60506067    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
    60516068    break;
     
    60546071
    60556072/* Line 1806 of yacc.c  */
    6056 #line 963 "parser.yy"
     6073#line 968 "parser.yy"
    60576074    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
    60586075    break;
     
    60616078
    60626079/* Line 1806 of yacc.c  */
    6063 #line 965 "parser.yy"
     6080#line 970 "parser.yy"
    60646081    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
    60656082    break;
     
    60686085
    60696086/* Line 1806 of yacc.c  */
    6070 #line 967 "parser.yy"
     6087#line 972 "parser.yy"
    60716088    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
    60726089    break;
     
    60756092
    60766093/* Line 1806 of yacc.c  */
    6077 #line 969 "parser.yy"
     6094#line 974 "parser.yy"
    60786095    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
    60796096    break;
     
    60826099
    60836100/* Line 1806 of yacc.c  */
    6084 #line 974 "parser.yy"
     6101#line 979 "parser.yy"
    60856102    { (yyval.flag) = false; }
    60866103    break;
     
    60896106
    60906107/* Line 1806 of yacc.c  */
    6091 #line 976 "parser.yy"
     6108#line 981 "parser.yy"
    60926109    { (yyval.flag) = true; }
    60936110    break;
     
    60966113
    60976114/* Line 1806 of yacc.c  */
    6098 #line 981 "parser.yy"
     6115#line 986 "parser.yy"
    60996116    { (yyval.en) = 0; }
    61006117    break;
     
    61036120
    61046121/* Line 1806 of yacc.c  */
    6105 #line 988 "parser.yy"
     6122#line 993 "parser.yy"
    61066123    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    61076124    break;
     
    61106127
    61116128/* Line 1806 of yacc.c  */
    6112 #line 993 "parser.yy"
     6129#line 998 "parser.yy"
    61136130    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
    61146131    break;
     
    61176134
    61186135/* Line 1806 of yacc.c  */
    6119 #line 995 "parser.yy"
     6136#line 1000 "parser.yy"
    61206137    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
    61216138    break;
     
    61246141
    61256142/* Line 1806 of yacc.c  */
    6126 #line 1000 "parser.yy"
     6143#line 1005 "parser.yy"
    61276144    { (yyval.en) = 0; }
    61286145    break;
     
    61316148
    61326149/* Line 1806 of yacc.c  */
    6133 #line 1002 "parser.yy"
     6150#line 1007 "parser.yy"
    61346151    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
    61356152    break;
     
    61386155
    61396156/* Line 1806 of yacc.c  */
    6140 #line 1004 "parser.yy"
     6157#line 1009 "parser.yy"
    61416158    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
    61426159    break;
     
    61456162
    61466163/* Line 1806 of yacc.c  */
    6147 #line 1009 "parser.yy"
     6164#line 1014 "parser.yy"
    61486165    {
    61496166                        (yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
     
    61556172
    61566173/* Line 1806 of yacc.c  */
    6157 #line 1014 "parser.yy"
     6174#line 1019 "parser.yy"
    61586175    {
    61596176                        (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
     
    61656182
    61666183/* Line 1806 of yacc.c  */
    6167 #line 1024 "parser.yy"
     6184#line 1029 "parser.yy"
    61686185    { (yyval.decl) = 0; }
    61696186    break;
     
    61726189
    61736190/* Line 1806 of yacc.c  */
    6174 #line 1031 "parser.yy"
     6191#line 1036 "parser.yy"
    61756192    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    61766193    break;
     
    61796196
    61806197/* Line 1806 of yacc.c  */
    6181 #line 1036 "parser.yy"
     6198#line 1041 "parser.yy"
    61826199    { (yyval.decl) = 0; }
    61836200    break;
     
    61866203
    61876204/* Line 1806 of yacc.c  */
    6188 #line 1043 "parser.yy"
     6205#line 1048 "parser.yy"
    61896206    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    61906207    break;
     
    61936210
    61946211/* Line 1806 of yacc.c  */
    6195 #line 1057 "parser.yy"
     6212#line 1062 "parser.yy"
    61966213    {}
    61976214    break;
     
    62006217
    62016218/* Line 1806 of yacc.c  */
    6202 #line 1058 "parser.yy"
     6219#line 1063 "parser.yy"
    62036220    {}
    62046221    break;
     
    62076224
    62086225/* Line 1806 of yacc.c  */
    6209 #line 1087 "parser.yy"
     6226#line 1092 "parser.yy"
    62106227    {
    62116228                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62176234
    62186235/* Line 1806 of yacc.c  */
    6219 #line 1094 "parser.yy"
     6236#line 1099 "parser.yy"
    62206237    {
    62216238                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62276244
    62286245/* Line 1806 of yacc.c  */
    6229 #line 1099 "parser.yy"
     6246#line 1104 "parser.yy"
    62306247    {
    62316248                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    62356252
    62366253  case 262:
    6237 
    6238 /* Line 1806 of yacc.c  */
    6239 #line 1109 "parser.yy"
    6240     {
    6241                         typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
    6242                         (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
    6243                 }
    6244     break;
    6245 
    6246   case 263:
    62476254
    62486255/* Line 1806 of yacc.c  */
     
    62546261    break;
    62556262
     6263  case 263:
     6264
     6265/* Line 1806 of yacc.c  */
     6266#line 1119 "parser.yy"
     6267    {
     6268                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     6269                        (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
     6270                }
     6271    break;
     6272
    62566273  case 264:
    62576274
    62586275/* Line 1806 of yacc.c  */
    6259 #line 1119 "parser.yy"
     6276#line 1124 "parser.yy"
    62606277    {
    62616278                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    62676284
    62686285/* Line 1806 of yacc.c  */
    6269 #line 1127 "parser.yy"
     6286#line 1132 "parser.yy"
    62706287    {
    62716288                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62756292
    62766293  case 266:
    6277 
    6278 /* Line 1806 of yacc.c  */
    6279 #line 1132 "parser.yy"
    6280     {
    6281                         typedefTable.addToEnclosingScope( TypedefTable::ID );
    6282                         (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );
    6283                 }
    6284     break;
    6285 
    6286   case 267:
    62876294
    62886295/* Line 1806 of yacc.c  */
     
    62946301    break;
    62956302
     6303  case 267:
     6304
     6305/* Line 1806 of yacc.c  */
     6306#line 1142 "parser.yy"
     6307    {
     6308                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     6309                        (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );
     6310                }
     6311    break;
     6312
    62966313  case 268:
    62976314
    62986315/* Line 1806 of yacc.c  */
    6299 #line 1142 "parser.yy"
     6316#line 1147 "parser.yy"
    63006317    {
    63016318                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63076324
    63086325/* Line 1806 of yacc.c  */
    6309 #line 1147 "parser.yy"
     6326#line 1152 "parser.yy"
    63106327    {
    63116328                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    63176334
    63186335/* Line 1806 of yacc.c  */
    6319 #line 1178 "parser.yy"
     6336#line 1183 "parser.yy"
    63206337    {
    63216338                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    63266343
    63276344/* Line 1806 of yacc.c  */
    6328 #line 1182 "parser.yy"
     6345#line 1187 "parser.yy"
    63296346    {
    63306347                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    63356352
    63366353/* Line 1806 of yacc.c  */
    6337 #line 1189 "parser.yy"
     6354#line 1194 "parser.yy"
    63386355    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    63396356    break;
     
    63426359
    63436360/* Line 1806 of yacc.c  */
    6344 #line 1193 "parser.yy"
     6361#line 1198 "parser.yy"
    63456362    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    63466363    break;
    63476364
    63486365  case 274:
    6349 
    6350 /* Line 1806 of yacc.c  */
    6351 #line 1198 "parser.yy"
    6352     {
    6353                         typedefTable.addToEnclosingScope( TypedefTable::TD );
    6354                         (yyval.decl) = (yyvsp[(2) - (2)].decl)->addTypedef();
    6355                 }
    6356     break;
    6357 
    6358   case 275:
    63596366
    63606367/* Line 1806 of yacc.c  */
     
    63666373    break;
    63676374
     6375  case 275:
     6376
     6377/* Line 1806 of yacc.c  */
     6378#line 1208 "parser.yy"
     6379    {
     6380                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     6381                        (yyval.decl) = (yyvsp[(2) - (2)].decl)->addTypedef();
     6382                }
     6383    break;
     6384
    63686385  case 276:
    63696386
    63706387/* Line 1806 of yacc.c  */
    6371 #line 1208 "parser.yy"
     6388#line 1213 "parser.yy"
    63726389    {
    63736390                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    63796396
    63806397/* Line 1806 of yacc.c  */
    6381 #line 1219 "parser.yy"
     6398#line 1224 "parser.yy"
    63826399    {
    63836400                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    63896406
    63906407/* Line 1806 of yacc.c  */
    6391 #line 1224 "parser.yy"
     6408#line 1229 "parser.yy"
    63926409    {
    63936410                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    63996416
    64006417/* Line 1806 of yacc.c  */
    6401 #line 1229 "parser.yy"
     6418#line 1234 "parser.yy"
    64026419    {
    64036420                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64096426
    64106427/* Line 1806 of yacc.c  */
    6411 #line 1234 "parser.yy"
     6428#line 1239 "parser.yy"
    64126429    {
    64136430                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64196436
    64206437/* Line 1806 of yacc.c  */
    6421 #line 1239 "parser.yy"
     6438#line 1244 "parser.yy"
    64226439    {
    64236440                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64296446
    64306447/* Line 1806 of yacc.c  */
    6431 #line 1248 "parser.yy"
     6448#line 1253 "parser.yy"
    64326449    {
    64336450                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    64396456
    64406457/* Line 1806 of yacc.c  */
    6441 #line 1253 "parser.yy"
     6458#line 1258 "parser.yy"
    64426459    {
    64436460                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    64496466
    64506467/* Line 1806 of yacc.c  */
    6451 #line 1270 "parser.yy"
     6468#line 1275 "parser.yy"
    64526469    {
    64536470                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64596476
    64606477/* Line 1806 of yacc.c  */
    6461 #line 1275 "parser.yy"
     6478#line 1280 "parser.yy"
    64626479    {
    64636480                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64696486
    64706487/* Line 1806 of yacc.c  */
    6471 #line 1297 "parser.yy"
     6488#line 1302 "parser.yy"
    64726489    { (yyval.decl) = 0; }
    64736490    break;
     
    64766493
    64776494/* Line 1806 of yacc.c  */
    6478 #line 1309 "parser.yy"
     6495#line 1314 "parser.yy"
    64796496    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    64806497    break;
     
    64836500
    64846501/* Line 1806 of yacc.c  */
    6485 #line 1320 "parser.yy"
     6502#line 1325 "parser.yy"
    64866503    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    64876504    break;
     
    64906507
    64916508/* Line 1806 of yacc.c  */
    6492 #line 1322 "parser.yy"
     6509#line 1327 "parser.yy"
    64936510    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    64946511    break;
     
    64976514
    64986515/* Line 1806 of yacc.c  */
    6499 #line 1324 "parser.yy"
     6516#line 1329 "parser.yy"
    65006517    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    65016518    break;
     
    65046521
    65056522/* Line 1806 of yacc.c  */
    6506 #line 1326 "parser.yy"
     6523#line 1331 "parser.yy"
    65076524    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    65086525    break;
     
    65116528
    65126529/* Line 1806 of yacc.c  */
    6513 #line 1328 "parser.yy"
     6530#line 1333 "parser.yy"
    65146531    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    65156532    break;
     
    65186535
    65196536/* Line 1806 of yacc.c  */
    6520 #line 1330 "parser.yy"
     6537#line 1335 "parser.yy"
    65216538    {
    65226539                        typedefTable.enterScope();
     
    65276544
    65286545/* Line 1806 of yacc.c  */
    6529 #line 1334 "parser.yy"
     6546#line 1339 "parser.yy"
    65306547    {
    65316548                        typedefTable.leaveScope();
     
    65376554
    65386555/* Line 1806 of yacc.c  */
    6539 #line 1343 "parser.yy"
     6556#line 1348 "parser.yy"
    65406557    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    65416558    break;
     
    65446561
    65456562/* Line 1806 of yacc.c  */
    6546 #line 1345 "parser.yy"
     6563#line 1350 "parser.yy"
    65476564    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    65486565    break;
     
    65516568
    65526569/* Line 1806 of yacc.c  */
    6553 #line 1356 "parser.yy"
     6570#line 1361 "parser.yy"
    65546571    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    65556572    break;
     
    65586575
    65596576/* Line 1806 of yacc.c  */
    6560 #line 1361 "parser.yy"
     6577#line 1366 "parser.yy"
    65616578    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    65626579    break;
     
    65656582
    65666583/* Line 1806 of yacc.c  */
    6567 #line 1363 "parser.yy"
     6584#line 1368 "parser.yy"
    65686585    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    65696586    break;
     
    65726589
    65736590/* Line 1806 of yacc.c  */
    6574 #line 1365 "parser.yy"
     6591#line 1370 "parser.yy"
    65756592    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    65766593    break;
     
    65796596
    65806597/* Line 1806 of yacc.c  */
    6581 #line 1367 "parser.yy"
     6598#line 1372 "parser.yy"
    65826599    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    65836600    break;
     
    65866603
    65876604/* Line 1806 of yacc.c  */
    6588 #line 1370 "parser.yy"
     6605#line 1375 "parser.yy"
    65896606    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
    65906607    break;
     
    65936610
    65946611/* Line 1806 of yacc.c  */
    6595 #line 1372 "parser.yy"
     6612#line 1377 "parser.yy"
    65966613    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    65976614    break;
     
    66006617
    66016618/* Line 1806 of yacc.c  */
    6602 #line 1375 "parser.yy"
     6619#line 1380 "parser.yy"
    66036620    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
    66046621    break;
     
    66076624
    66086625/* Line 1806 of yacc.c  */
    6609 #line 1377 "parser.yy"
     6626#line 1382 "parser.yy"
    66106627    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    66116628    break;
     
    66146631
    66156632/* Line 1806 of yacc.c  */
    6616 #line 1382 "parser.yy"
     6633#line 1387 "parser.yy"
    66176634    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    66186635    break;
     
    66216638
    66226639/* Line 1806 of yacc.c  */
    6623 #line 1384 "parser.yy"
     6640#line 1389 "parser.yy"
    66246641    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    66256642    break;
     
    66286645
    66296646/* Line 1806 of yacc.c  */
    6630 #line 1386 "parser.yy"
     6647#line 1391 "parser.yy"
    66316648    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    66326649    break;
     
    66356652
    66366653/* Line 1806 of yacc.c  */
    6637 #line 1388 "parser.yy"
     6654#line 1393 "parser.yy"
    66386655    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    66396656    break;
     
    66426659
    66436660/* Line 1806 of yacc.c  */
    6644 #line 1390 "parser.yy"
     6661#line 1395 "parser.yy"
    66456662    { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Long ); }
    66466663    break;
     
    66496666
    66506667/* Line 1806 of yacc.c  */
    6651 #line 1392 "parser.yy"
     6668#line 1397 "parser.yy"
    66526669    { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Short ); }
    66536670    break;
     
    66566673
    66576674/* Line 1806 of yacc.c  */
    6658 #line 1394 "parser.yy"
     6675#line 1399 "parser.yy"
    66596676    { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
    66606677    break;
     
    66636680
    66646681/* Line 1806 of yacc.c  */
    6665 #line 1396 "parser.yy"
     6682#line 1401 "parser.yy"
    66666683    { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
    66676684    break;
     
    66706687
    66716688/* Line 1806 of yacc.c  */
    6672 #line 1398 "parser.yy"
     6689#line 1403 "parser.yy"
    66736690    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    66746691    break;
     
    66776694
    66786695/* Line 1806 of yacc.c  */
    6679 #line 1400 "parser.yy"
     6696#line 1405 "parser.yy"
    66806697    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    66816698    break;
     
    66846701
    66856702/* Line 1806 of yacc.c  */
    6686 #line 1402 "parser.yy"
     6703#line 1407 "parser.yy"
    66876704    { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
    66886705    break;
     
    66916708
    66926709/* Line 1806 of yacc.c  */
    6693 #line 1404 "parser.yy"
     6710#line 1409 "parser.yy"
    66946711    { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
    66956712    break;
     
    66986715
    66996716/* Line 1806 of yacc.c  */
    6700 #line 1406 "parser.yy"
     6717#line 1411 "parser.yy"
    67016718    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    67026719    break;
     
    67056722
    67066723/* Line 1806 of yacc.c  */
    6707 #line 1413 "parser.yy"
     6724#line 1418 "parser.yy"
    67086725    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    67096726    break;
     
    67126729
    67136730/* Line 1806 of yacc.c  */
    6714 #line 1415 "parser.yy"
     6731#line 1420 "parser.yy"
    67156732    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67166733    break;
     
    67196736
    67206737/* Line 1806 of yacc.c  */
    6721 #line 1417 "parser.yy"
     6738#line 1422 "parser.yy"
    67226739    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    67236740    break;
     
    67266743
    67276744/* Line 1806 of yacc.c  */
    6728 #line 1419 "parser.yy"
     6745#line 1424 "parser.yy"
    67296746    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    67306747    break;
     
    67336750
    67346751/* Line 1806 of yacc.c  */
    6735 #line 1425 "parser.yy"
     6752#line 1430 "parser.yy"
    67366753    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    67376754    break;
     
    67406757
    67416758/* Line 1806 of yacc.c  */
    6742 #line 1432 "parser.yy"
     6759#line 1437 "parser.yy"
    67436760    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    67446761    break;
     
    67476764
    67486765/* Line 1806 of yacc.c  */
    6749 #line 1434 "parser.yy"
     6766#line 1439 "parser.yy"
    67506767    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67516768    break;
     
    67546771
    67556772/* Line 1806 of yacc.c  */
    6756 #line 1436 "parser.yy"
     6773#line 1441 "parser.yy"
    67576774    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    67586775    break;
     
    67616778
    67626779/* Line 1806 of yacc.c  */
    6763 #line 1441 "parser.yy"
     6780#line 1446 "parser.yy"
    67646781    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    67656782    break;
     
    67686785
    67696786/* Line 1806 of yacc.c  */
    6770 #line 1443 "parser.yy"
     6787#line 1448 "parser.yy"
    67716788    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    67726789    break;
     
    67756792
    67766793/* Line 1806 of yacc.c  */
    6777 #line 1445 "parser.yy"
     6794#line 1450 "parser.yy"
    67786795    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    67796796    break;
     
    67826799
    67836800/* Line 1806 of yacc.c  */
    6784 #line 1447 "parser.yy"
     6801#line 1452 "parser.yy"
    67856802    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    67866803    break;
     
    67896806
    67906807/* Line 1806 of yacc.c  */
    6791 #line 1453 "parser.yy"
     6808#line 1458 "parser.yy"
    67926809    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    67936810    break;
     
    67966813
    67976814/* Line 1806 of yacc.c  */
    6798 #line 1455 "parser.yy"
     6815#line 1460 "parser.yy"
    67996816    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68006817    break;
     
    68036820
    68046821/* Line 1806 of yacc.c  */
    6805 #line 1457 "parser.yy"
     6822#line 1462 "parser.yy"
    68066823    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68076824    break;
     
    68106827
    68116828/* Line 1806 of yacc.c  */
    6812 #line 1463 "parser.yy"
     6829#line 1468 "parser.yy"
    68136830    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68146831    break;
     
    68176834
    68186835/* Line 1806 of yacc.c  */
    6819 #line 1465 "parser.yy"
     6836#line 1470 "parser.yy"
    68206837    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68216838    break;
     
    68246841
    68256842/* Line 1806 of yacc.c  */
    6826 #line 1471 "parser.yy"
     6843#line 1476 "parser.yy"
    68276844    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68286845    break;
     
    68316848
    68326849/* Line 1806 of yacc.c  */
    6833 #line 1473 "parser.yy"
     6850#line 1478 "parser.yy"
    68346851    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68356852    break;
     
    68386855
    68396856/* Line 1806 of yacc.c  */
    6840 #line 1475 "parser.yy"
     6857#line 1480 "parser.yy"
    68416858    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68426859    break;
     
    68456862
    68466863/* Line 1806 of yacc.c  */
    6847 #line 1480 "parser.yy"
     6864#line 1485 "parser.yy"
    68486865    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    68496866    break;
     
    68526869
    68536870/* Line 1806 of yacc.c  */
    6854 #line 1482 "parser.yy"
     6871#line 1487 "parser.yy"
    68556872    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68566873    break;
     
    68596876
    68606877/* Line 1806 of yacc.c  */
    6861 #line 1484 "parser.yy"
     6878#line 1489 "parser.yy"
    68626879    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68636880    break;
     
    68666883
    68676884/* Line 1806 of yacc.c  */
    6868 #line 1494 "parser.yy"
     6885#line 1499 "parser.yy"
    68696886    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), nullptr, nullptr, (yyvsp[(3) - (4)].decl), true ); }
    68706887    break;
     
    68736890
    68746891/* Line 1806 of yacc.c  */
    6875 #line 1496 "parser.yy"
     6892#line 1501 "parser.yy"
    68766893    {
    68776894                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    68836900
    68846901/* Line 1806 of yacc.c  */
    6885 #line 1501 "parser.yy"
     6902#line 1506 "parser.yy"
    68866903    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    68876904    break;
     
    68906907
    68916908/* Line 1806 of yacc.c  */
    6892 #line 1503 "parser.yy"
     6909#line 1508 "parser.yy"
    68936910    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), nullptr, (yyvsp[(5) - (6)].decl), true ); }
    68946911    break;
     
    68976914
    68986915/* Line 1806 of yacc.c  */
    6899 #line 1505 "parser.yy"
     6916#line 1510 "parser.yy"
    69006917    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), nullptr, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
    69016918    break;
     
    69046921
    69056922/* Line 1806 of yacc.c  */
    6906 #line 1507 "parser.yy"
     6923#line 1512 "parser.yy"
    69076924    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    69086925    break;
     
    69116928
    69126929/* Line 1806 of yacc.c  */
    6913 #line 1512 "parser.yy"
     6930#line 1517 "parser.yy"
    69146931    { (yyval.aggKey) = DeclarationNode::Struct; }
    69156932    break;
     
    69186935
    69196936/* Line 1806 of yacc.c  */
    6920 #line 1514 "parser.yy"
     6937#line 1519 "parser.yy"
    69216938    { (yyval.aggKey) = DeclarationNode::Union; }
    69226939    break;
     
    69256942
    69266943/* Line 1806 of yacc.c  */
    6927 #line 1519 "parser.yy"
     6944#line 1524 "parser.yy"
    69286945    { (yyval.decl) = 0; }
    69296946    break;
     
    69326949
    69336950/* Line 1806 of yacc.c  */
    6934 #line 1521 "parser.yy"
     6951#line 1526 "parser.yy"
    69356952    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    69366953    break;
     
    69396956
    69406957/* Line 1806 of yacc.c  */
    6941 #line 1527 "parser.yy"
     6958#line 1532 "parser.yy"
    69426959    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
    69436960    break;
     
    69466963
    69476964/* Line 1806 of yacc.c  */
    6948 #line 1530 "parser.yy"
     6965#line 1535 "parser.yy"
    69496966    {   // mark all fields in list
    69506967                        for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     
    69576974
    69586975/* Line 1806 of yacc.c  */
    6959 #line 1540 "parser.yy"
     6976#line 1545 "parser.yy"
    69606977    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    69616978    break;
     
    69646981
    69656982/* Line 1806 of yacc.c  */
    6966 #line 1542 "parser.yy"
     6983#line 1547 "parser.yy"
    69676984    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    69686985    break;
     
    69716988
    69726989/* Line 1806 of yacc.c  */
    6973 #line 1544 "parser.yy"
     6990#line 1549 "parser.yy"
    69746991    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    69756992    break;
     
    69786995
    69796996/* Line 1806 of yacc.c  */
    6980 #line 1549 "parser.yy"
     6997#line 1554 "parser.yy"
    69816998    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    69826999    break;
     
    69857002
    69867003/* Line 1806 of yacc.c  */
    6987 #line 1551 "parser.yy"
     7004#line 1556 "parser.yy"
    69887005    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    69897006    break;
     
    69927009
    69937010/* Line 1806 of yacc.c  */
    6994 #line 1556 "parser.yy"
     7011#line 1561 "parser.yy"
    69957012    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    69967013    break;
     
    69997016
    70007017/* Line 1806 of yacc.c  */
    7001 #line 1558 "parser.yy"
     7018#line 1563 "parser.yy"
    70027019    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    70037020    break;
     
    70067023
    70077024/* Line 1806 of yacc.c  */
    7008 #line 1561 "parser.yy"
     7025#line 1566 "parser.yy"
    70097026    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    70107027    break;
     
    70137030
    70147031/* Line 1806 of yacc.c  */
    7015 #line 1564 "parser.yy"
     7032#line 1569 "parser.yy"
    70167033    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    70177034    break;
     
    70207037
    70217038/* Line 1806 of yacc.c  */
    7022 #line 1570 "parser.yy"
     7039#line 1575 "parser.yy"
    70237040    { (yyval.en) = 0; }
    70247041    break;
     
    70277044
    70287045/* Line 1806 of yacc.c  */
    7029 #line 1572 "parser.yy"
     7046#line 1577 "parser.yy"
    70307047    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    70317048    break;
     
    70347051
    70357052/* Line 1806 of yacc.c  */
    7036 #line 1577 "parser.yy"
     7053#line 1582 "parser.yy"
    70377054    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    70387055    break;
     
    70417058
    70427059/* Line 1806 of yacc.c  */
    7043 #line 1586 "parser.yy"
     7060#line 1591 "parser.yy"
    70447061    { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(3) - (5)].decl) ); }
    70457062    break;
     
    70487065
    70497066/* Line 1806 of yacc.c  */
    7050 #line 1588 "parser.yy"
     7067#line 1593 "parser.yy"
    70517068    {
    70527069                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    70587075
    70597076/* Line 1806 of yacc.c  */
    7060 #line 1593 "parser.yy"
     7077#line 1598 "parser.yy"
    70617078    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    70627079    break;
     
    70657082
    70667083/* Line 1806 of yacc.c  */
    7067 #line 1595 "parser.yy"
     7084#line 1600 "parser.yy"
    70687085    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
    70697086    break;
     
    70727089
    70737090/* Line 1806 of yacc.c  */
    7074 #line 1600 "parser.yy"
     7091#line 1605 "parser.yy"
    70757092    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    70767093    break;
     
    70797096
    70807097/* Line 1806 of yacc.c  */
    7081 #line 1602 "parser.yy"
     7098#line 1607 "parser.yy"
    70827099    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    70837100    break;
     
    70867103
    70877104/* Line 1806 of yacc.c  */
    7088 #line 1607 "parser.yy"
     7105#line 1612 "parser.yy"
    70897106    { (yyval.en) = 0; }
    70907107    break;
     
    70937110
    70947111/* Line 1806 of yacc.c  */
    7095 #line 1609 "parser.yy"
     7112#line 1614 "parser.yy"
    70967113    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    70977114    break;
     
    71007117
    71017118/* Line 1806 of yacc.c  */
    7102 #line 1616 "parser.yy"
     7119#line 1621 "parser.yy"
    71037120    { (yyval.decl) = 0; }
    71047121    break;
     
    71077124
    71087125/* Line 1806 of yacc.c  */
    7109 #line 1624 "parser.yy"
     7126#line 1629 "parser.yy"
    71107127    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71117128    break;
     
    71147131
    71157132/* Line 1806 of yacc.c  */
    7116 #line 1626 "parser.yy"
     7133#line 1631 "parser.yy"
    71177134    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    71187135    break;
     
    71217138
    71227139/* Line 1806 of yacc.c  */
    7123 #line 1628 "parser.yy"
     7140#line 1633 "parser.yy"
    71247141    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    71257142    break;
     
    71287145
    71297146/* Line 1806 of yacc.c  */
    7130 #line 1636 "parser.yy"
     7147#line 1641 "parser.yy"
    71317148    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71327149    break;
     
    71357152
    71367153/* Line 1806 of yacc.c  */
    7137 #line 1638 "parser.yy"
     7154#line 1643 "parser.yy"
    71387155    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71397156    break;
     
    71427159
    71437160/* Line 1806 of yacc.c  */
    7144 #line 1640 "parser.yy"
     7161#line 1645 "parser.yy"
    71457162    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    71467163    break;
     
    71497166
    71507167/* Line 1806 of yacc.c  */
    7151 #line 1646 "parser.yy"
     7168#line 1651 "parser.yy"
    71527169    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71537170    break;
     
    71567173
    71577174/* Line 1806 of yacc.c  */
    7158 #line 1651 "parser.yy"
     7175#line 1656 "parser.yy"
    71597176    { (yyval.decl) = 0; }
    71607177    break;
     
    71637180
    71647181/* Line 1806 of yacc.c  */
    7165 #line 1658 "parser.yy"
     7182#line 1663 "parser.yy"
    71667183    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    71677184    break;
     
    71707187
    71717188/* Line 1806 of yacc.c  */
    7172 #line 1665 "parser.yy"
     7189#line 1670 "parser.yy"
    71737190    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71747191    break;
     
    71777194
    71787195/* Line 1806 of yacc.c  */
    7179 #line 1667 "parser.yy"
     7196#line 1672 "parser.yy"
    71807197    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71817198    break;
     
    71847201
    71857202/* Line 1806 of yacc.c  */
    7186 #line 1676 "parser.yy"
     7203#line 1681 "parser.yy"
    71877204    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    71887205    break;
     
    71917208
    71927209/* Line 1806 of yacc.c  */
    7193 #line 1679 "parser.yy"
     7210#line 1684 "parser.yy"
    71947211    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    71957212    break;
     
    71987215
    71997216/* Line 1806 of yacc.c  */
    7200 #line 1681 "parser.yy"
     7217#line 1686 "parser.yy"
    72017218    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    72027219    break;
     
    72057222
    72067223/* Line 1806 of yacc.c  */
    7207 #line 1691 "parser.yy"
     7224#line 1696 "parser.yy"
    72087225    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    72097226    break;
    72107227
    72117228  case 436:
    7212 
    7213 /* Line 1806 of yacc.c  */
    7214 #line 1697 "parser.yy"
    7215     {
    7216                         typedefTable.addToEnclosingScope( TypedefTable::ID );
    7217                         (yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
    7218                 }
    7219     break;
    7220 
    7221   case 437:
    72227229
    72237230/* Line 1806 of yacc.c  */
     
    72297236    break;
    72307237
     7238  case 437:
     7239
     7240/* Line 1806 of yacc.c  */
     7241#line 1707 "parser.yy"
     7242    {
     7243                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     7244                        (yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
     7245                }
     7246    break;
     7247
    72317248  case 439:
    72327249
    72337250/* Line 1806 of yacc.c  */
    7234 #line 1711 "parser.yy"
     7251#line 1716 "parser.yy"
    72357252    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    72367253    break;
     
    72397256
    72407257/* Line 1806 of yacc.c  */
    7241 #line 1720 "parser.yy"
     7258#line 1725 "parser.yy"
    72427259    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    72437260    break;
     
    72467263
    72477264/* Line 1806 of yacc.c  */
    7248 #line 1722 "parser.yy"
     7265#line 1727 "parser.yy"
    72497266    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    72507267    break;
     
    72537270
    72547271/* Line 1806 of yacc.c  */
    7255 #line 1747 "parser.yy"
     7272#line 1752 "parser.yy"
    72567273    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    72577274    break;
     
    72607277
    72617278/* Line 1806 of yacc.c  */
    7262 #line 1755 "parser.yy"
     7279#line 1760 "parser.yy"
    72637280    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    72647281    break;
     
    72677284
    72687285/* Line 1806 of yacc.c  */
    7269 #line 1760 "parser.yy"
     7286#line 1765 "parser.yy"
    72707287    { (yyval.in) = 0; }
    72717288    break;
     
    72747291
    72757292/* Line 1806 of yacc.c  */
    7276 #line 1762 "parser.yy"
     7293#line 1767 "parser.yy"
    72777294    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    72787295    break;
     
    72817298
    72827299/* Line 1806 of yacc.c  */
    7283 #line 1764 "parser.yy"
     7300#line 1769 "parser.yy"
    72847301    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
    72857302    break;
     
    72887305
    72897306/* Line 1806 of yacc.c  */
    7290 #line 1768 "parser.yy"
     7307#line 1773 "parser.yy"
    72917308    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    72927309    break;
     
    72957312
    72967313/* Line 1806 of yacc.c  */
    7297 #line 1769 "parser.yy"
     7314#line 1774 "parser.yy"
    72987315    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    72997316    break;
     
    73027319
    73037320/* Line 1806 of yacc.c  */
    7304 #line 1774 "parser.yy"
     7321#line 1779 "parser.yy"
    73057322    { (yyval.in) = 0; }
    73067323    break;
     
    73097326
    73107327/* Line 1806 of yacc.c  */
    7311 #line 1776 "parser.yy"
     7328#line 1781 "parser.yy"
    73127329    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    73137330    break;
     
    73167333
    73177334/* Line 1806 of yacc.c  */
    7318 #line 1777 "parser.yy"
     7335#line 1782 "parser.yy"
    73197336    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
    73207337    break;
     
    73237340
    73247341/* Line 1806 of yacc.c  */
    7325 #line 1779 "parser.yy"
     7342#line 1784 "parser.yy"
    73267343    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    73277344    break;
     
    73307347
    73317348/* Line 1806 of yacc.c  */
    7332 #line 1795 "parser.yy"
     7349#line 1800 "parser.yy"
    73337350    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
    73347351    break;
     
    73377354
    73387355/* Line 1806 of yacc.c  */
    7339 #line 1801 "parser.yy"
     7356#line 1806 "parser.yy"
    73407357    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
    73417358    break;
     
    73447361
    73457362/* Line 1806 of yacc.c  */
    7346 #line 1807 "parser.yy"
     7363#line 1812 "parser.yy"
    73477364    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
    73487365    break;
     
    73517368
    73527369/* Line 1806 of yacc.c  */
    7353 #line 1810 "parser.yy"
     7370#line 1815 "parser.yy"
    73547371    { (yyval.en) = (yyvsp[(3) - (5)].en); }
    73557372    break;
     
    73587375
    73597376/* Line 1806 of yacc.c  */
    7360 #line 1812 "parser.yy"
     7377#line 1817 "parser.yy"
    73617378    { (yyval.en) = (yyvsp[(3) - (5)].en); }
    73627379    break;
     
    73657382
    73667383/* Line 1806 of yacc.c  */
    7367 #line 1814 "parser.yy"
     7384#line 1819 "parser.yy"
    73687385    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
    73697386    break;
     
    73727389
    73737390/* Line 1806 of yacc.c  */
    7374 #line 1816 "parser.yy"
     7391#line 1821 "parser.yy"
    73757392    { (yyval.en) = (yyvsp[(4) - (6)].en); }
    73767393    break;
     
    73797396
    73807397/* Line 1806 of yacc.c  */
    7381 #line 1840 "parser.yy"
     7398#line 1845 "parser.yy"
    73827399    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73837400    break;
     
    73867403
    73877404/* Line 1806 of yacc.c  */
    7388 #line 1842 "parser.yy"
     7405#line 1847 "parser.yy"
    73897406    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    73907407    break;
     
    73937410
    73947411/* Line 1806 of yacc.c  */
    7395 #line 1844 "parser.yy"
     7412#line 1849 "parser.yy"
    73967413    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    73977414    break;
     
    74007417
    74017418/* Line 1806 of yacc.c  */
    7402 #line 1850 "parser.yy"
     7419#line 1855 "parser.yy"
    74037420    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    74047421    break;
     
    74077424
    74087425/* Line 1806 of yacc.c  */
    7409 #line 1852 "parser.yy"
     7426#line 1857 "parser.yy"
    74107427    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    74117428    break;
     
    74147431
    74157432/* Line 1806 of yacc.c  */
    7416 #line 1857 "parser.yy"
     7433#line 1862 "parser.yy"
    74177434    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    74187435    break;
     
    74217438
    74227439/* Line 1806 of yacc.c  */
    7423 #line 1863 "parser.yy"
     7440#line 1868 "parser.yy"
    74247441    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    74257442    break;
     
    74287445
    74297446/* Line 1806 of yacc.c  */
    7430 #line 1868 "parser.yy"
     7447#line 1873 "parser.yy"
    74317448    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    74327449    break;
     
    74357452
    74367453/* Line 1806 of yacc.c  */
    7437 #line 1870 "parser.yy"
     7454#line 1875 "parser.yy"
    74387455    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    74397456    break;
     
    74427459
    74437460/* Line 1806 of yacc.c  */
    7444 #line 1876 "parser.yy"
     7461#line 1881 "parser.yy"
    74457462    { (yyval.tclass) = DeclarationNode::Otype; }
    74467463    break;
     
    74497466
    74507467/* Line 1806 of yacc.c  */
    7451 #line 1878 "parser.yy"
     7468#line 1883 "parser.yy"
    74527469    { (yyval.tclass) = DeclarationNode::Ftype; }
    74537470    break;
     
    74567473
    74577474/* Line 1806 of yacc.c  */
    7458 #line 1880 "parser.yy"
     7475#line 1885 "parser.yy"
    74597476    { (yyval.tclass) = DeclarationNode::Dtype; }
    74607477    break;
     
    74637480
    74647481/* Line 1806 of yacc.c  */
    7465 #line 1885 "parser.yy"
     7482#line 1890 "parser.yy"
    74667483    { (yyval.decl) = 0; }
    74677484    break;
     
    74707487
    74717488/* Line 1806 of yacc.c  */
    7472 #line 1887 "parser.yy"
     7489#line 1892 "parser.yy"
    74737490    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    74747491    break;
     
    74777494
    74787495/* Line 1806 of yacc.c  */
    7479 #line 1892 "parser.yy"
     7496#line 1897 "parser.yy"
    74807497    {
    74817498                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    74877504
    74887505/* Line 1806 of yacc.c  */
    7489 #line 1897 "parser.yy"
     7506#line 1902 "parser.yy"
    74907507    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    74917508    break;
     
    74947511
    74957512/* Line 1806 of yacc.c  */
    7496 #line 1899 "parser.yy"
     7513#line 1904 "parser.yy"
    74977514    { (yyval.decl) = 0; }
    74987515    break;
     
    75017518
    75027519/* Line 1806 of yacc.c  */
    7503 #line 1904 "parser.yy"
     7520#line 1909 "parser.yy"
    75047521    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
    75057522    break;
     
    75087525
    75097526/* Line 1806 of yacc.c  */
    7510 #line 1907 "parser.yy"
     7527#line 1912 "parser.yy"
    75117528    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
    75127529    break;
     
    75157532
    75167533/* Line 1806 of yacc.c  */
    7517 #line 1909 "parser.yy"
     7534#line 1914 "parser.yy"
    75187535    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
    75197536    break;
     
    75227539
    75237540/* Line 1806 of yacc.c  */
    7524 #line 1914 "parser.yy"
     7541#line 1919 "parser.yy"
    75257542    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    75267543    break;
     
    75297546
    75307547/* Line 1806 of yacc.c  */
    7531 #line 1916 "parser.yy"
     7548#line 1921 "parser.yy"
    75327549    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    75337550    break;
     
    75367553
    75377554/* Line 1806 of yacc.c  */
    7538 #line 1918 "parser.yy"
     7555#line 1923 "parser.yy"
    75397556    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    75407557    break;
     
    75437560
    75447561/* Line 1806 of yacc.c  */
    7545 #line 1923 "parser.yy"
     7562#line 1928 "parser.yy"
    75467563    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    75477564    break;
     
    75507567
    75517568/* Line 1806 of yacc.c  */
    7552 #line 1925 "parser.yy"
     7569#line 1930 "parser.yy"
    75537570    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    75547571    break;
     
    75577574
    75587575/* Line 1806 of yacc.c  */
    7559 #line 1930 "parser.yy"
     7576#line 1935 "parser.yy"
    75607577    {
    75617578                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    75677584
    75687585/* Line 1806 of yacc.c  */
    7569 #line 1935 "parser.yy"
     7586#line 1940 "parser.yy"
    75707587    {
    75717588                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    75777594
    75787595/* Line 1806 of yacc.c  */
    7579 #line 1943 "parser.yy"
     7596#line 1948 "parser.yy"
    75807597    {
    75817598                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    75877604
    75887605/* Line 1806 of yacc.c  */
    7589 #line 1948 "parser.yy"
     7606#line 1953 "parser.yy"
    75907607    {
    75917608                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    75977614
    75987615/* Line 1806 of yacc.c  */
    7599 #line 1953 "parser.yy"
     7616#line 1958 "parser.yy"
    76007617    {
    76017618                        typedefTable.leaveTrait();
     
    76087625
    76097626/* Line 1806 of yacc.c  */
    7610 #line 1963 "parser.yy"
     7627#line 1968 "parser.yy"
    76117628    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    76127629    break;
    76137630
    76147631  case 516:
    7615 
    7616 /* Line 1806 of yacc.c  */
    7617 #line 1973 "parser.yy"
    7618     {
    7619                         typedefTable.addToEnclosingScope2( TypedefTable::ID );
    7620                         (yyval.decl) = (yyvsp[(1) - (1)].decl);
    7621                 }
    7622     break;
    7623 
    7624   case 517:
    76257632
    76267633/* Line 1806 of yacc.c  */
     
    76327639    break;
    76337640
     7641  case 517:
     7642
     7643/* Line 1806 of yacc.c  */
     7644#line 1983 "parser.yy"
     7645    {
     7646                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     7647                        (yyval.decl) = (yyvsp[(1) - (1)].decl);
     7648                }
     7649    break;
     7650
    76347651  case 518:
    76357652
    76367653/* Line 1806 of yacc.c  */
    7637 #line 1983 "parser.yy"
     7654#line 1988 "parser.yy"
    76387655    {
    76397656                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    76457662
    76467663/* Line 1806 of yacc.c  */
    7647 #line 1991 "parser.yy"
     7664#line 1996 "parser.yy"
    76487665    {
    76497666                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    76557672
    76567673/* Line 1806 of yacc.c  */
    7657 #line 1996 "parser.yy"
     7674#line 2001 "parser.yy"
    76587675    {
    76597676                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    76657682
    76667683/* Line 1806 of yacc.c  */
    7667 #line 2006 "parser.yy"
     7684#line 2011 "parser.yy"
    76687685    {}
    76697686    break;
     
    76727689
    76737690/* Line 1806 of yacc.c  */
    7674 #line 2008 "parser.yy"
     7691#line 2013 "parser.yy"
    76757692    { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);    }
    76767693    break;
     
    76797696
    76807697/* Line 1806 of yacc.c  */
    7681 #line 2014 "parser.yy"
     7698#line 2019 "parser.yy"
    76827699    { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    76837700    break;
     
    76867703
    76877704/* Line 1806 of yacc.c  */
    7688 #line 2019 "parser.yy"
     7705#line 2024 "parser.yy"
    76897706    { (yyval.decl) = 0; }
    76907707    break;
     
    76937710
    76947711/* Line 1806 of yacc.c  */
    7695 #line 2027 "parser.yy"
     7712#line 2032 "parser.yy"
    76967713    {}
    76977714    break;
     
    77007717
    77017718/* Line 1806 of yacc.c  */
    7702 #line 2029 "parser.yy"
     7719#line 2034 "parser.yy"
    77037720    {
    77047721                        linkageStack.push( linkage );                           // handle nested extern "C"/"Cforall"
     
    77107727
    77117728/* Line 1806 of yacc.c  */
    7712 #line 2034 "parser.yy"
     7729#line 2039 "parser.yy"
    77137730    {
    77147731                        linkage = linkageStack.top();
     
    77217738
    77227739/* Line 1806 of yacc.c  */
    7723 #line 2040 "parser.yy"
     7740#line 2045 "parser.yy"
    77247741    {   // mark all fields in list
    77257742                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     
    77327749
    77337750/* Line 1806 of yacc.c  */
    7734 #line 2055 "parser.yy"
     7751#line 2060 "parser.yy"
    77357752    {
    77367753                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77437760
    77447761/* Line 1806 of yacc.c  */
    7745 #line 2061 "parser.yy"
     7762#line 2066 "parser.yy"
    77467763    {
    77477764                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77547771
    77557772/* Line 1806 of yacc.c  */
    7756 #line 2070 "parser.yy"
     7773#line 2075 "parser.yy"
    77577774    {
    77587775                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77657782
    77667783/* Line 1806 of yacc.c  */
    7767 #line 2076 "parser.yy"
     7784#line 2081 "parser.yy"
    77687785    {
    77697786                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77767793
    77777794/* Line 1806 of yacc.c  */
    7778 #line 2082 "parser.yy"
     7795#line 2087 "parser.yy"
    77797796    {
    77807797                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77877804
    77887805/* Line 1806 of yacc.c  */
    7789 #line 2088 "parser.yy"
     7806#line 2093 "parser.yy"
    77907807    {
    77917808                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77987815
    77997816/* Line 1806 of yacc.c  */
    7800 #line 2094 "parser.yy"
     7817#line 2099 "parser.yy"
    78017818    {
    78027819                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78097826
    78107827/* Line 1806 of yacc.c  */
    7811 #line 2102 "parser.yy"
     7828#line 2107 "parser.yy"
    78127829    {
    78137830                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78207837
    78217838/* Line 1806 of yacc.c  */
    7822 #line 2108 "parser.yy"
     7839#line 2113 "parser.yy"
    78237840    {
    78247841                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78317848
    78327849/* Line 1806 of yacc.c  */
    7833 #line 2116 "parser.yy"
     7850#line 2121 "parser.yy"
    78347851    {
    78357852                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78427859
    78437860/* Line 1806 of yacc.c  */
    7844 #line 2122 "parser.yy"
     7861#line 2127 "parser.yy"
    78457862    {
    78467863                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78537870
    78547871/* Line 1806 of yacc.c  */
    7855 #line 2137 "parser.yy"
     7872#line 2142 "parser.yy"
    78567873    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    78577874    break;
     
    78607877
    78617878/* Line 1806 of yacc.c  */
    7862 #line 2142 "parser.yy"
     7879#line 2147 "parser.yy"
    78637880    { delete (yyvsp[(3) - (5)].str); }
    78647881    break;
     
    78677884
    78687885/* Line 1806 of yacc.c  */
    7869 #line 2147 "parser.yy"
     7886#line 2152 "parser.yy"
    78707887    { (yyval.decl) = 0; }
    78717888    break;
     
    78747891
    78757892/* Line 1806 of yacc.c  */
    7876 #line 2154 "parser.yy"
     7893#line 2159 "parser.yy"
    78777894    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    78787895    break;
     
    78817898
    78827899/* Line 1806 of yacc.c  */
    7883 #line 2160 "parser.yy"
     7900#line 2165 "parser.yy"
    78847901    { (yyval.decl) = 0; }
    78857902    break;
     
    78887905
    78897906/* Line 1806 of yacc.c  */
    7890 #line 2171 "parser.yy"
     7907#line 2176 "parser.yy"
    78917908    { delete (yyvsp[(3) - (4)].en); }
    78927909    break;
     
    78957912
    78967913/* Line 1806 of yacc.c  */
    7897 #line 2175 "parser.yy"
     7914#line 2180 "parser.yy"
    78987915    { delete (yyvsp[(1) - (1)].tok); }
    78997916    break;
     
    79027919
    79037920/* Line 1806 of yacc.c  */
    7904 #line 2176 "parser.yy"
     7921#line 2181 "parser.yy"
    79057922    { delete (yyvsp[(1) - (1)].decl); }
    79067923    break;
     
    79097926
    79107927/* Line 1806 of yacc.c  */
    7911 #line 2177 "parser.yy"
     7928#line 2182 "parser.yy"
    79127929    { delete (yyvsp[(1) - (1)].decl); }
    79137930    break;
     
    79167933
    79177934/* Line 1806 of yacc.c  */
    7918 #line 2178 "parser.yy"
     7935#line 2183 "parser.yy"
    79197936    { delete (yyvsp[(1) - (1)].decl); }
    79207937    break;
    79217938
    79227939  case 565:
    7923 
    7924 /* Line 1806 of yacc.c  */
    7925 #line 2213 "parser.yy"
    7926     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7927     break;
    7928 
    7929   case 567:
    7930 
    7931 /* Line 1806 of yacc.c  */
    7932 #line 2216 "parser.yy"
    7933     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7934     break;
    7935 
    7936   case 568:
    79377940
    79387941/* Line 1806 of yacc.c  */
     
    79417944    break;
    79427945
     7946  case 567:
     7947
     7948/* Line 1806 of yacc.c  */
     7949#line 2221 "parser.yy"
     7950    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7951    break;
     7952
     7953  case 568:
     7954
     7955/* Line 1806 of yacc.c  */
     7956#line 2223 "parser.yy"
     7957    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7958    break;
     7959
    79437960  case 569:
    79447961
    79457962/* Line 1806 of yacc.c  */
    7946 #line 2223 "parser.yy"
     7963#line 2228 "parser.yy"
    79477964    {
    79487965                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    79547971
    79557972/* Line 1806 of yacc.c  */
    7956 #line 2228 "parser.yy"
     7973#line 2233 "parser.yy"
    79577974    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    79587975    break;
     
    79617978
    79627979/* Line 1806 of yacc.c  */
    7963 #line 2233 "parser.yy"
     7980#line 2238 "parser.yy"
    79647981    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    79657982    break;
     
    79687985
    79697986/* Line 1806 of yacc.c  */
    7970 #line 2235 "parser.yy"
     7987#line 2240 "parser.yy"
    79717988    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    79727989    break;
     
    79757992
    79767993/* Line 1806 of yacc.c  */
    7977 #line 2237 "parser.yy"
     7994#line 2242 "parser.yy"
    79787995    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    79797996    break;
     
    79827999
    79838000/* Line 1806 of yacc.c  */
    7984 #line 2242 "parser.yy"
     8001#line 2247 "parser.yy"
    79858002    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    79868003    break;
     
    79898006
    79908007/* Line 1806 of yacc.c  */
    7991 #line 2244 "parser.yy"
     8008#line 2249 "parser.yy"
    79928009    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    79938010    break;
     
    79968013
    79978014/* Line 1806 of yacc.c  */
    7998 #line 2246 "parser.yy"
     8015#line 2251 "parser.yy"
    79998016    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80008017    break;
     
    80038020
    80048021/* Line 1806 of yacc.c  */
    8005 #line 2248 "parser.yy"
     8022#line 2253 "parser.yy"
    80068023    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80078024    break;
     
    80108027
    80118028/* Line 1806 of yacc.c  */
    8012 #line 2253 "parser.yy"
     8029#line 2258 "parser.yy"
    80138030    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    80148031    break;
     
    80178034
    80188035/* Line 1806 of yacc.c  */
    8019 #line 2255 "parser.yy"
     8036#line 2260 "parser.yy"
    80208037    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80218038    break;
     
    80248041
    80258042/* Line 1806 of yacc.c  */
    8026 #line 2264 "parser.yy"
     8043#line 2269 "parser.yy"
    80278044    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80288045    break;
     
    80318048
    80328049/* Line 1806 of yacc.c  */
    8033 #line 2267 "parser.yy"
     8050#line 2272 "parser.yy"
    80348051    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80358052    break;
     
    80388055
    80398056/* Line 1806 of yacc.c  */
    8040 #line 2272 "parser.yy"
     8057#line 2277 "parser.yy"
    80418058    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    80428059    break;
     
    80458062
    80468063/* Line 1806 of yacc.c  */
    8047 #line 2274 "parser.yy"
     8064#line 2279 "parser.yy"
    80488065    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    80498066    break;
     
    80528069
    80538070/* Line 1806 of yacc.c  */
    8054 #line 2276 "parser.yy"
     8071#line 2281 "parser.yy"
    80558072    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80568073    break;
     
    80598076
    80608077/* Line 1806 of yacc.c  */
    8061 #line 2281 "parser.yy"
     8078#line 2286 "parser.yy"
    80628079    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    80638080    break;
     
    80668083
    80678084/* Line 1806 of yacc.c  */
    8068 #line 2283 "parser.yy"
     8085#line 2288 "parser.yy"
    80698086    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    80708087    break;
     
    80738090
    80748091/* Line 1806 of yacc.c  */
    8075 #line 2285 "parser.yy"
     8092#line 2290 "parser.yy"
    80768093    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80778094    break;
     
    80808097
    80818098/* Line 1806 of yacc.c  */
    8082 #line 2290 "parser.yy"
     8099#line 2295 "parser.yy"
    80838100    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80848101    break;
     
    80878104
    80888105/* Line 1806 of yacc.c  */
    8089 #line 2292 "parser.yy"
     8106#line 2297 "parser.yy"
    80908107    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80918108    break;
     
    80948111
    80958112/* Line 1806 of yacc.c  */
    8096 #line 2294 "parser.yy"
     8113#line 2299 "parser.yy"
    80978114    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80988115    break;
     
    81018118
    81028119/* Line 1806 of yacc.c  */
    8103 #line 2309 "parser.yy"
     8120#line 2314 "parser.yy"
    81048121    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    81058122    break;
     
    81088125
    81098126/* Line 1806 of yacc.c  */
    8110 #line 2311 "parser.yy"
     8127#line 2316 "parser.yy"
    81118128    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    81128129    break;
     
    81158132
    81168133/* Line 1806 of yacc.c  */
    8117 #line 2313 "parser.yy"
     8134#line 2318 "parser.yy"
    81188135    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81198136    break;
     
    81228139
    81238140/* Line 1806 of yacc.c  */
    8124 #line 2318 "parser.yy"
     8141#line 2323 "parser.yy"
    81258142    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81268143    break;
     
    81298146
    81308147/* Line 1806 of yacc.c  */
    8131 #line 2320 "parser.yy"
     8148#line 2325 "parser.yy"
    81328149    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81338150    break;
     
    81368153
    81378154/* Line 1806 of yacc.c  */
    8138 #line 2322 "parser.yy"
     8155#line 2327 "parser.yy"
    81398156    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81408157    break;
     
    81438160
    81448161/* Line 1806 of yacc.c  */
    8145 #line 2327 "parser.yy"
     8162#line 2332 "parser.yy"
    81468163    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81478164    break;
     
    81508167
    81518168/* Line 1806 of yacc.c  */
    8152 #line 2329 "parser.yy"
     8169#line 2334 "parser.yy"
    81538170    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81548171    break;
     
    81578174
    81588175/* Line 1806 of yacc.c  */
    8159 #line 2331 "parser.yy"
     8176#line 2336 "parser.yy"
    81608177    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81618178    break;
    81628179
    81638180  case 604:
    8164 
    8165 /* Line 1806 of yacc.c  */
    8166 #line 2346 "parser.yy"
    8167     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8168     break;
    8169 
    8170   case 606:
    8171 
    8172 /* Line 1806 of yacc.c  */
    8173 #line 2349 "parser.yy"
    8174     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8175     break;
    8176 
    8177   case 607:
    81788181
    81798182/* Line 1806 of yacc.c  */
     
    81828185    break;
    81838186
     8187  case 606:
     8188
     8189/* Line 1806 of yacc.c  */
     8190#line 2354 "parser.yy"
     8191    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8192    break;
     8193
     8194  case 607:
     8195
     8196/* Line 1806 of yacc.c  */
     8197#line 2356 "parser.yy"
     8198    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8199    break;
     8200
    81848201  case 609:
    81858202
    81868203/* Line 1806 of yacc.c  */
    8187 #line 2357 "parser.yy"
     8204#line 2362 "parser.yy"
    81888205    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81898206    break;
     
    81928209
    81938210/* Line 1806 of yacc.c  */
    8194 #line 2362 "parser.yy"
     8211#line 2367 "parser.yy"
    81958212    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81968213    break;
     
    81998216
    82008217/* Line 1806 of yacc.c  */
    8201 #line 2364 "parser.yy"
     8218#line 2369 "parser.yy"
    82028219    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82038220    break;
     
    82068223
    82078224/* Line 1806 of yacc.c  */
    8208 #line 2366 "parser.yy"
     8225#line 2371 "parser.yy"
    82098226    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82108227    break;
     
    82138230
    82148231/* Line 1806 of yacc.c  */
    8215 #line 2371 "parser.yy"
     8232#line 2376 "parser.yy"
    82168233    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    82178234    break;
     
    82208237
    82218238/* Line 1806 of yacc.c  */
    8222 #line 2373 "parser.yy"
     8239#line 2378 "parser.yy"
    82238240    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82248241    break;
     
    82278244
    82288245/* Line 1806 of yacc.c  */
    8229 #line 2375 "parser.yy"
     8246#line 2380 "parser.yy"
    82308247    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82318248    break;
     
    82348251
    82358252/* Line 1806 of yacc.c  */
    8236 #line 2377 "parser.yy"
     8253#line 2382 "parser.yy"
    82378254    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82388255    break;
     
    82418258
    82428259/* Line 1806 of yacc.c  */
    8243 #line 2382 "parser.yy"
     8260#line 2387 "parser.yy"
    82448261    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    82458262    break;
     
    82488265
    82498266/* Line 1806 of yacc.c  */
    8250 #line 2384 "parser.yy"
     8267#line 2389 "parser.yy"
    82518268    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    82528269    break;
     
    82558272
    82568273/* Line 1806 of yacc.c  */
    8257 #line 2386 "parser.yy"
     8274#line 2391 "parser.yy"
    82588275    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82598276    break;
    82608277
    82618278  case 620:
    8262 
    8263 /* Line 1806 of yacc.c  */
    8264 #line 2396 "parser.yy"
    8265     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8266     break;
    8267 
    8268   case 622:
    8269 
    8270 /* Line 1806 of yacc.c  */
    8271 #line 2399 "parser.yy"
    8272     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8273     break;
    8274 
    8275   case 623:
    82768279
    82778280/* Line 1806 of yacc.c  */
     
    82808283    break;
    82818284
     8285  case 622:
     8286
     8287/* Line 1806 of yacc.c  */
     8288#line 2404 "parser.yy"
     8289    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8290    break;
     8291
     8292  case 623:
     8293
     8294/* Line 1806 of yacc.c  */
     8295#line 2406 "parser.yy"
     8296    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8297    break;
     8298
    82828299  case 624:
    82838300
    82848301/* Line 1806 of yacc.c  */
    8285 #line 2406 "parser.yy"
     8302#line 2411 "parser.yy"
    82868303    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82878304    break;
     
    82908307
    82918308/* Line 1806 of yacc.c  */
    8292 #line 2408 "parser.yy"
     8309#line 2413 "parser.yy"
    82938310    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82948311    break;
     
    82978314
    82988315/* Line 1806 of yacc.c  */
    8299 #line 2410 "parser.yy"
     8316#line 2415 "parser.yy"
    83008317    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83018318    break;
     
    83048321
    83058322/* Line 1806 of yacc.c  */
    8306 #line 2415 "parser.yy"
     8323#line 2420 "parser.yy"
    83078324    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83088325    break;
     
    83118328
    83128329/* Line 1806 of yacc.c  */
    8313 #line 2417 "parser.yy"
     8330#line 2422 "parser.yy"
    83148331    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83158332    break;
     
    83188335
    83198336/* Line 1806 of yacc.c  */
    8320 #line 2419 "parser.yy"
     8337#line 2424 "parser.yy"
    83218338    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83228339    break;
     
    83258342
    83268343/* Line 1806 of yacc.c  */
    8327 #line 2421 "parser.yy"
     8344#line 2426 "parser.yy"
    83288345    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83298346    break;
     
    83328349
    83338350/* Line 1806 of yacc.c  */
    8334 #line 2426 "parser.yy"
     8351#line 2431 "parser.yy"
    83358352    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83368353    break;
     
    83398356
    83408357/* Line 1806 of yacc.c  */
    8341 #line 2428 "parser.yy"
     8358#line 2433 "parser.yy"
    83428359    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83438360    break;
     
    83468363
    83478364/* Line 1806 of yacc.c  */
    8348 #line 2430 "parser.yy"
     8365#line 2435 "parser.yy"
    83498366    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83508367    break;
    83518368
    83528369  case 634:
    8353 
    8354 /* Line 1806 of yacc.c  */
    8355 #line 2461 "parser.yy"
    8356     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8357     break;
    8358 
    8359   case 636:
    8360 
    8361 /* Line 1806 of yacc.c  */
    8362 #line 2464 "parser.yy"
    8363     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8364     break;
    8365 
    8366   case 637:
    83678370
    83688371/* Line 1806 of yacc.c  */
     
    83718374    break;
    83728375
     8376  case 636:
     8377
     8378/* Line 1806 of yacc.c  */
     8379#line 2469 "parser.yy"
     8380    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8381    break;
     8382
     8383  case 637:
     8384
     8385/* Line 1806 of yacc.c  */
     8386#line 2471 "parser.yy"
     8387    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8388    break;
     8389
    83738390  case 638:
    8374 
    8375 /* Line 1806 of yacc.c  */
    8376 #line 2471 "parser.yy"
    8377     {
    8378                         typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
    8379                         (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) );
    8380                 }
    8381     break;
    8382 
    8383   case 639:
    83848391
    83858392/* Line 1806 of yacc.c  */
     
    83918398    break;
    83928399
     8400  case 639:
     8401
     8402/* Line 1806 of yacc.c  */
     8403#line 2481 "parser.yy"
     8404    {
     8405                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     8406                        (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) );
     8407                }
     8408    break;
     8409
    83938410  case 640:
    83948411
    83958412/* Line 1806 of yacc.c  */
    8396 #line 2484 "parser.yy"
     8413#line 2489 "parser.yy"
    83978414    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83988415    break;
     
    84018418
    84028419/* Line 1806 of yacc.c  */
    8403 #line 2486 "parser.yy"
     8420#line 2491 "parser.yy"
    84048421    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84058422    break;
     
    84088425
    84098426/* Line 1806 of yacc.c  */
    8410 #line 2488 "parser.yy"
     8427#line 2493 "parser.yy"
    84118428    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84128429    break;
     
    84158432
    84168433/* Line 1806 of yacc.c  */
    8417 #line 2493 "parser.yy"
     8434#line 2498 "parser.yy"
    84188435    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    84198436    break;
     
    84228439
    84238440/* Line 1806 of yacc.c  */
    8424 #line 2495 "parser.yy"
     8441#line 2500 "parser.yy"
    84258442    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84268443    break;
     
    84298446
    84308447/* Line 1806 of yacc.c  */
    8431 #line 2500 "parser.yy"
     8448#line 2505 "parser.yy"
    84328449    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    84338450    break;
     
    84368453
    84378454/* Line 1806 of yacc.c  */
    8438 #line 2502 "parser.yy"
     8455#line 2507 "parser.yy"
    84398456    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84408457    break;
     
    84438460
    84448461/* Line 1806 of yacc.c  */
    8445 #line 2517 "parser.yy"
     8462#line 2522 "parser.yy"
    84468463    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84478464    break;
     
    84508467
    84518468/* Line 1806 of yacc.c  */
    8452 #line 2519 "parser.yy"
     8469#line 2524 "parser.yy"
    84538470    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84548471    break;
     
    84578474
    84588475/* Line 1806 of yacc.c  */
    8459 #line 2524 "parser.yy"
     8476#line 2529 "parser.yy"
    84608477    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    84618478    break;
     
    84648481
    84658482/* Line 1806 of yacc.c  */
    8466 #line 2526 "parser.yy"
     8483#line 2531 "parser.yy"
    84678484    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    84688485    break;
     
    84718488
    84728489/* Line 1806 of yacc.c  */
    8473 #line 2528 "parser.yy"
     8490#line 2533 "parser.yy"
    84748491    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84758492    break;
     
    84788495
    84798496/* Line 1806 of yacc.c  */
    8480 #line 2530 "parser.yy"
     8497#line 2535 "parser.yy"
    84818498    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84828499    break;
     
    84858502
    84868503/* Line 1806 of yacc.c  */
    8487 #line 2532 "parser.yy"
     8504#line 2537 "parser.yy"
    84888505    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84898506    break;
     
    84928509
    84938510/* Line 1806 of yacc.c  */
    8494 #line 2538 "parser.yy"
     8511#line 2543 "parser.yy"
    84958512    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84968513    break;
     
    84998516
    85008517/* Line 1806 of yacc.c  */
    8501 #line 2540 "parser.yy"
     8518#line 2545 "parser.yy"
    85028519    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85038520    break;
     
    85068523
    85078524/* Line 1806 of yacc.c  */
    8508 #line 2542 "parser.yy"
     8525#line 2547 "parser.yy"
    85098526    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85108527    break;
     
    85138530
    85148531/* Line 1806 of yacc.c  */
    8515 #line 2547 "parser.yy"
     8532#line 2552 "parser.yy"
    85168533    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
    85178534    break;
     
    85208537
    85218538/* Line 1806 of yacc.c  */
    8522 #line 2549 "parser.yy"
     8539#line 2554 "parser.yy"
    85238540    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85248541    break;
     
    85278544
    85288545/* Line 1806 of yacc.c  */
    8529 #line 2551 "parser.yy"
     8546#line 2556 "parser.yy"
    85308547    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85318548    break;
     
    85348551
    85358552/* Line 1806 of yacc.c  */
    8536 #line 2557 "parser.yy"
     8553#line 2562 "parser.yy"
    85378554    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    85388555    break;
     
    85418558
    85428559/* Line 1806 of yacc.c  */
    8543 #line 2559 "parser.yy"
     8560#line 2564 "parser.yy"
    85448561    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    85458562    break;
     
    85488565
    85498566/* Line 1806 of yacc.c  */
    8550 #line 2565 "parser.yy"
     8567#line 2570 "parser.yy"
    85518568    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    85528569    break;
     
    85558572
    85568573/* Line 1806 of yacc.c  */
    8557 #line 2567 "parser.yy"
     8574#line 2572 "parser.yy"
    85588575    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    85598576    break;
     
    85628579
    85638580/* Line 1806 of yacc.c  */
    8564 #line 2569 "parser.yy"
     8581#line 2574 "parser.yy"
    85658582    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    85668583    break;
     
    85698586
    85708587/* Line 1806 of yacc.c  */
    8571 #line 2571 "parser.yy"
     8588#line 2576 "parser.yy"
    85728589    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    85738590    break;
     
    85768593
    85778594/* Line 1806 of yacc.c  */
    8578 #line 2586 "parser.yy"
     8595#line 2591 "parser.yy"
    85798596    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85808597    break;
     
    85838600
    85848601/* Line 1806 of yacc.c  */
    8585 #line 2588 "parser.yy"
     8602#line 2593 "parser.yy"
    85868603    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85878604    break;
     
    85908607
    85918608/* Line 1806 of yacc.c  */
    8592 #line 2593 "parser.yy"
     8609#line 2598 "parser.yy"
    85938610    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85948611    break;
     
    85978614
    85988615/* Line 1806 of yacc.c  */
    8599 #line 2595 "parser.yy"
     8616#line 2600 "parser.yy"
    86008617    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    86018618    break;
     
    86048621
    86058622/* Line 1806 of yacc.c  */
    8606 #line 2597 "parser.yy"
     8623#line 2602 "parser.yy"
    86078624    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86088625    break;
     
    86118628
    86128629/* Line 1806 of yacc.c  */
    8613 #line 2599 "parser.yy"
     8630#line 2604 "parser.yy"
    86148631    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86158632    break;
     
    86188635
    86198636/* Line 1806 of yacc.c  */
    8620 #line 2601 "parser.yy"
     8637#line 2606 "parser.yy"
    86218638    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86228639    break;
     
    86258642
    86268643/* Line 1806 of yacc.c  */
    8627 #line 2607 "parser.yy"
     8644#line 2612 "parser.yy"
    86288645    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86298646    break;
     
    86328649
    86338650/* Line 1806 of yacc.c  */
    8634 #line 2609 "parser.yy"
     8651#line 2614 "parser.yy"
    86358652    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86368653    break;
     
    86398656
    86408657/* Line 1806 of yacc.c  */
    8641 #line 2611 "parser.yy"
     8658#line 2616 "parser.yy"
    86428659    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86438660    break;
     
    86468663
    86478664/* Line 1806 of yacc.c  */
    8648 #line 2616 "parser.yy"
     8665#line 2621 "parser.yy"
    86498666    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
    86508667    break;
     
    86538670
    86548671/* Line 1806 of yacc.c  */
    8655 #line 2618 "parser.yy"
     8672#line 2623 "parser.yy"
    86568673    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86578674    break;
     
    86608677
    86618678/* Line 1806 of yacc.c  */
    8662 #line 2620 "parser.yy"
     8679#line 2625 "parser.yy"
    86638680    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86648681    break;
     
    86678684
    86688685/* Line 1806 of yacc.c  */
    8669 #line 2627 "parser.yy"
     8686#line 2632 "parser.yy"
    86708687    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    86718688    break;
     
    86748691
    86758692/* Line 1806 of yacc.c  */
    8676 #line 2638 "parser.yy"
     8693#line 2643 "parser.yy"
    86778694    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    86788695    break;
     
    86818698
    86828699/* Line 1806 of yacc.c  */
    8683 #line 2641 "parser.yy"
     8700#line 2646 "parser.yy"
    86848701    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    86858702    break;
     
    86888705
    86898706/* Line 1806 of yacc.c  */
    8690 #line 2643 "parser.yy"
     8707#line 2648 "parser.yy"
    86918708    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    86928709    break;
     
    86958712
    86968713/* Line 1806 of yacc.c  */
    8697 #line 2646 "parser.yy"
     8714#line 2651 "parser.yy"
    86988715    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    86998716    break;
     
    87028719
    87038720/* Line 1806 of yacc.c  */
    8704 #line 2648 "parser.yy"
     8721#line 2653 "parser.yy"
    87058722    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    87068723    break;
     
    87098726
    87108727/* Line 1806 of yacc.c  */
    8711 #line 2650 "parser.yy"
     8728#line 2655 "parser.yy"
    87128729    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    87138730    break;
     
    87168733
    87178734/* Line 1806 of yacc.c  */
    8718 #line 2664 "parser.yy"
     8735#line 2669 "parser.yy"
    87198736    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87208737    break;
     
    87238740
    87248741/* Line 1806 of yacc.c  */
    8725 #line 2666 "parser.yy"
     8742#line 2671 "parser.yy"
    87268743    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87278744    break;
     
    87308747
    87318748/* Line 1806 of yacc.c  */
    8732 #line 2671 "parser.yy"
     8749#line 2676 "parser.yy"
    87338750    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    87348751    break;
     
    87378754
    87388755/* Line 1806 of yacc.c  */
    8739 #line 2673 "parser.yy"
     8756#line 2678 "parser.yy"
    87408757    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    87418758    break;
     
    87448761
    87458762/* Line 1806 of yacc.c  */
    8746 #line 2675 "parser.yy"
     8763#line 2680 "parser.yy"
    87478764    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87488765    break;
     
    87518768
    87528769/* Line 1806 of yacc.c  */
    8753 #line 2677 "parser.yy"
     8770#line 2682 "parser.yy"
    87548771    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87558772    break;
     
    87588775
    87598776/* Line 1806 of yacc.c  */
    8760 #line 2679 "parser.yy"
     8777#line 2684 "parser.yy"
    87618778    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87628779    break;
     
    87658782
    87668783/* Line 1806 of yacc.c  */
    8767 #line 2685 "parser.yy"
     8784#line 2690 "parser.yy"
    87688785    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87698786    break;
     
    87728789
    87738790/* Line 1806 of yacc.c  */
    8774 #line 2687 "parser.yy"
     8791#line 2692 "parser.yy"
    87758792    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87768793    break;
     
    87798796
    87808797/* Line 1806 of yacc.c  */
    8781 #line 2689 "parser.yy"
     8798#line 2694 "parser.yy"
    87828799    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87838800    break;
     
    87868803
    87878804/* Line 1806 of yacc.c  */
    8788 #line 2694 "parser.yy"
     8805#line 2699 "parser.yy"
    87898806    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87908807    break;
     
    87938810
    87948811/* Line 1806 of yacc.c  */
    8795 #line 2696 "parser.yy"
     8812#line 2701 "parser.yy"
    87968813    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87978814    break;
     
    88008817
    88018818/* Line 1806 of yacc.c  */
    8802 #line 2706 "parser.yy"
     8819#line 2711 "parser.yy"
    88038820    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    88048821    break;
     
    88078824
    88088825/* Line 1806 of yacc.c  */
    8809 #line 2716 "parser.yy"
     8826#line 2721 "parser.yy"
    88108827    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    88118828    break;
     
    88148831
    88158832/* Line 1806 of yacc.c  */
    8816 #line 2718 "parser.yy"
     8833#line 2723 "parser.yy"
    88178834    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    88188835    break;
     
    88218838
    88228839/* Line 1806 of yacc.c  */
    8823 #line 2720 "parser.yy"
     8840#line 2725 "parser.yy"
    88248841    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    88258842    break;
     
    88288845
    88298846/* Line 1806 of yacc.c  */
    8830 #line 2722 "parser.yy"
     8847#line 2727 "parser.yy"
    88318848    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    88328849    break;
     
    88358852
    88368853/* Line 1806 of yacc.c  */
    8837 #line 2724 "parser.yy"
     8854#line 2729 "parser.yy"
    88388855    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    88398856    break;
     
    88428859
    88438860/* Line 1806 of yacc.c  */
    8844 #line 2726 "parser.yy"
     8861#line 2731 "parser.yy"
    88458862    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    88468863    break;
     
    88498866
    88508867/* Line 1806 of yacc.c  */
    8851 #line 2733 "parser.yy"
     8868#line 2738 "parser.yy"
    88528869    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    88538870    break;
     
    88568873
    88578874/* Line 1806 of yacc.c  */
    8858 #line 2735 "parser.yy"
     8875#line 2740 "parser.yy"
    88598876    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    88608877    break;
     
    88638880
    88648881/* Line 1806 of yacc.c  */
    8865 #line 2737 "parser.yy"
     8882#line 2742 "parser.yy"
    88668883    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    88678884    break;
     
    88708887
    88718888/* Line 1806 of yacc.c  */
    8872 #line 2739 "parser.yy"
     8889#line 2744 "parser.yy"
    88738890    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    88748891    break;
    88758892
    88768893  case 722:
    8877 
    8878 /* Line 1806 of yacc.c  */
    8879 #line 2741 "parser.yy"
    8880     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    8881     break;
    8882 
    8883   case 723:
    8884 
    8885 /* Line 1806 of yacc.c  */
    8886 #line 2744 "parser.yy"
    8887     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8888     break;
    8889 
    8890   case 724:
    88918894
    88928895/* Line 1806 of yacc.c  */
     
    88958898    break;
    88968899
     8900  case 723:
     8901
     8902/* Line 1806 of yacc.c  */
     8903#line 2749 "parser.yy"
     8904    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8905    break;
     8906
     8907  case 724:
     8908
     8909/* Line 1806 of yacc.c  */
     8910#line 2751 "parser.yy"
     8911    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8912    break;
     8913
    88978914  case 725:
    88988915
    88998916/* Line 1806 of yacc.c  */
    8900 #line 2748 "parser.yy"
     8917#line 2753 "parser.yy"
    89018918    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89028919    break;
     
    89058922
    89068923/* Line 1806 of yacc.c  */
    8907 #line 2750 "parser.yy"
     8924#line 2755 "parser.yy"
    89088925    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    89098926    break;
     
    89128929
    89138930/* Line 1806 of yacc.c  */
    8914 #line 2752 "parser.yy"
     8931#line 2757 "parser.yy"
    89158932    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89168933    break;
     
    89198936
    89208937/* Line 1806 of yacc.c  */
    8921 #line 2757 "parser.yy"
     8938#line 2762 "parser.yy"
    89228939    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    89238940    break;
     
    89268943
    89278944/* Line 1806 of yacc.c  */
    8928 #line 2759 "parser.yy"
     8945#line 2764 "parser.yy"
    89298946    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    89308947    break;
     
    89338950
    89348951/* Line 1806 of yacc.c  */
    8935 #line 2764 "parser.yy"
     8952#line 2769 "parser.yy"
    89368953    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    89378954    break;
     
    89408957
    89418958/* Line 1806 of yacc.c  */
    8942 #line 2766 "parser.yy"
     8959#line 2771 "parser.yy"
    89438960    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    89448961    break;
     
    89478964
    89488965/* Line 1806 of yacc.c  */
    8949 #line 2793 "parser.yy"
     8966#line 2798 "parser.yy"
    89508967    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    89518968    break;
     
    89548971
    89558972/* Line 1806 of yacc.c  */
    8956 #line 2804 "parser.yy"
     8973#line 2809 "parser.yy"
    89578974    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89588975    break;
     
    89618978
    89628979/* Line 1806 of yacc.c  */
    8963 #line 2806 "parser.yy"
     8980#line 2811 "parser.yy"
    89648981    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89658982    break;
     
    89688985
    89698986/* Line 1806 of yacc.c  */
    8970 #line 2808 "parser.yy"
     8987#line 2813 "parser.yy"
    89718988    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89728989    break;
     
    89758992
    89768993/* Line 1806 of yacc.c  */
    8977 #line 2810 "parser.yy"
     8994#line 2815 "parser.yy"
    89788995    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89798996    break;
     
    89828999
    89839000/* Line 1806 of yacc.c  */
    8984 #line 2812 "parser.yy"
     9001#line 2817 "parser.yy"
    89859002    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89869003    break;
     
    89899006
    89909007/* Line 1806 of yacc.c  */
    8991 #line 2814 "parser.yy"
     9008#line 2819 "parser.yy"
    89929009    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89939010    break;
     
    89969013
    89979014/* Line 1806 of yacc.c  */
    8998 #line 2821 "parser.yy"
     9015#line 2826 "parser.yy"
    89999016    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    90009017    break;
     
    90039020
    90049021/* Line 1806 of yacc.c  */
    9005 #line 2823 "parser.yy"
     9022#line 2828 "parser.yy"
    90069023    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    90079024    break;
     
    90109027
    90119028/* Line 1806 of yacc.c  */
    9012 #line 2825 "parser.yy"
     9029#line 2830 "parser.yy"
    90139030    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90149031    break;
     
    90179034
    90189035/* Line 1806 of yacc.c  */
    9019 #line 2827 "parser.yy"
     9036#line 2832 "parser.yy"
    90209037    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    90219038    break;
     
    90249041
    90259042/* Line 1806 of yacc.c  */
    9026 #line 2829 "parser.yy"
     9043#line 2834 "parser.yy"
    90279044    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
    90289045    break;
     
    90319048
    90329049/* Line 1806 of yacc.c  */
    9033 #line 2831 "parser.yy"
     9050#line 2836 "parser.yy"
    90349051    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90359052    break;
     
    90389055
    90399056/* Line 1806 of yacc.c  */
    9040 #line 2836 "parser.yy"
     9057#line 2841 "parser.yy"
    90419058    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    90429059    break;
     
    90459062
    90469063/* Line 1806 of yacc.c  */
    9047 #line 2843 "parser.yy"
     9064#line 2848 "parser.yy"
    90489065    { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
    90499066    break;
     
    90529069
    90539070/* Line 1806 of yacc.c  */
    9054 #line 2845 "parser.yy"
     9071#line 2850 "parser.yy"
    90559072    { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
    90569073    break;
     
    90599076
    90609077/* Line 1806 of yacc.c  */
    9061 #line 2869 "parser.yy"
     9078#line 2874 "parser.yy"
    90629079    { (yyval.en) = 0; }
    90639080    break;
     
    90669083
    90679084/* Line 1806 of yacc.c  */
    9068 #line 2871 "parser.yy"
     9085#line 2876 "parser.yy"
    90699086    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    90709087    break;
     
    90739090
    90749091/* Line 1806 of yacc.c  */
    9075 #line 9076 "Parser/parser.cc"
     9092#line 9093 "Parser/parser.cc"
    90769093      default: break;
    90779094    }
     
    93049321
    93059322/* Line 2067 of yacc.c  */
    9306 #line 2874 "parser.yy"
     9323#line 2879 "parser.yy"
    93079324
    93089325// ----end of grammar----
  • src/Parser/parser.yy

    rdc86541 r8780e30  
    199199
    200200%type<decl> field_declaration field_declaration_list field_declarator field_declaring_list
    201 %type<en> field field_list field_name
     201%type<en> field field_list field_name fraction_constants
    202202
    203203%type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr
     
    385385                { $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
    386386        | postfix_expression REALFRACTIONconstant                       // CFA, tuple index
    387                 { $$ = new ExpressionNode( build_fieldSel( $1, build_constantInteger( *$2 ) ) ); }
     387                { $$ = new ExpressionNode( build_fieldSel( $1, build_field_name_REALFRACTIONconstant( *$2 ) ) ); }
    388388        | postfix_expression ARROW no_attr_identifier
    389389                { $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
     
    424424        field_name
    425425        | REALDECIMALconstant field
    426                 { $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *$1 ) ), maybeMoveBuild<Expression>( $2 ) ) ); }
     426                { $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *$1 ) ), maybeMoveBuild<Expression>( $2 ) ) ); }
    427427        | REALDECIMALconstant '[' push field_list pop ']'
    428                 { $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *$1 ) ), build_tuple( $4 ) ) ); }
     428                { $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *$1 ) ), build_tuple( $4 ) ) ); }
    429429        | field_name '.' field
    430430                { $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
     
    437437        ;
    438438
    439 field_name: // ... use $2
     439field_name:
    440440        INTEGERconstant fraction_constants
    441                 { $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
     441                { $$ = new ExpressionNode( build_field_name_fraction_constants( build_constantInteger( *$1 ), $2 ) ); }
    442442        | FLOATINGconstant fraction_constants
    443                 { $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
     443                { $$ = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *$1 ), $2 ) ); }
    444444        | no_attr_identifier fraction_constants
    445                 { $$ = new ExpressionNode( build_varref( $1 ) ); }
     445                { $$ = new ExpressionNode( build_field_name_fraction_constants( build_varref( $1 ), $2 ) ); }
    446446        ;
    447447
    448448fraction_constants:
    449449        // empty
     450                { $$ = nullptr; }
    450451        | fraction_constants REALFRACTIONconstant
     452                {
     453                        Expression * constant = build_field_name_REALFRACTIONconstant( *$2 );
     454                        $$ = $1 != nullptr ? new ExpressionNode( build_fieldSel( $1,  constant ) ) : new ExpressionNode( constant );
     455                }
    451456        ;
    452457
Note: See TracChangeset for help on using the changeset viewer.