Changeset 3b58d91


Ignore:
Timestamp:
Sep 8, 2016, 10:51:07 AM (7 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
cd14861
Parents:
4e7f0f1
Message:

add AST nodes TupleIndexExpr?, MemberTupleExpr?, MassAssignExpr?, and MultipleAssignExpr?, modify parser to produce nodes for field tuples, modify UntypedMemberExpr? to contain a list of members

Location:
src
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ExpressionNode.cc

    r4e7f0f1 r3b58d91  
    200200}
    201201
    202 Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    203         UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeMoveBuild< Expression >(expr_node) );
    204         delete member;
    205         return ret;
    206 }
    207 
    208 Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
     202Expression *build_fieldSel( ExpressionNode *expr_node, Expression *member ) {
     203        UntypedMemberExpr *ret = new UntypedMemberExpr( member, maybeMoveBuild< Expression >(expr_node) );
     204        return ret;
     205}
     206
     207Expression *build_pfieldSel( ExpressionNode *expr_node, Expression *member ) {
    209208        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    210209        deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) );
    211         UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
    212         delete member;
     210        UntypedMemberExpr *ret = new UntypedMemberExpr( member, deref );
    213211        return ret;
    214212}
  • src/Parser/ParseNode.h

    r4e7f0f1 r3b58d91  
    165165
    166166Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
    167 Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
    168 Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
     167Expression *build_fieldSel( ExpressionNode *expr_node, Expression *member );
     168Expression *build_pfieldSel( ExpressionNode *expr_node, Expression *member );
    169169Expression *build_addressOf( ExpressionNode *expr_node );
    170170Expression *build_sizeOfexpr( ExpressionNode *expr_node );
  • src/Parser/parser.cc

    r4e7f0f1 r3b58d91  
    10231023       0,   300,   300,   304,   311,   312,   313,   317,   318,   319,
    10241024     323,   324,   328,   329,   333,   334,   338,   342,   343,   354,
    1025      356,   358,   360,   365,   366,   372,   376,   378,   379,   381,
    1026      382,   384,   386,   388,   397,   398,   404,   405,   409,   410,
    1027      414,   418,   420,   422,   424,   429,   432,   434,   436,   441,
    1028      454,   456,   458,   460,   462,   464,   466,   468,   470,   472,
    1029      474,   481,   482,   488,   489,   490,   491,   495,   496,   498,
    1030      503,   504,   506,   508,   513,   514,   516,   521,   522,   524,
    1031      529,   530,   532,   534,   536,   541,   542,   544,   549,   550,
    1032      555,   556,   561,   562,   567,   568,   573,   574,   579,   580,
    1033      583,   585,   590,   595,   596,   598,   604,   605,   609,   610,
    1034      611,   612,   613,   614,   615,   616,   617,   618,   619,   620,
    1035      626,   628,   630,   632,   637,   638,   643,   644,   650,   651,
    1036      657,   658,   659,   660,   661,   662,   663,   664,   665,   675,
    1037      682,   684,   694,   695,   700,   702,   708,   710,   714,   715,
    1038      720,   725,   728,   730,   732,   742,   744,   755,   756,   758,
    1039      762,   764,   768,   769,   774,   775,   779,   784,   785,   789,
    1040      791,   797,   798,   802,   804,   806,   808,   814,   815,   819,
    1041      821,   826,   828,   830,   835,   837,   842,   844,   848,   851,
    1042      855,   858,   862,   864,   866,   868,   873,   875,   877,   882,
    1043      884,   886,   888,   890,   895,   897,   899,   901,   906,   918,
    1044      919,   924,   926,   931,   935,   937,   939,   941,   943,   949,
    1045      950,   956,   957,   961,   962,   967,   969,   975,   976,   978,
    1046      983,   988,   998,  1000,  1004,  1005,  1010,  1012,  1016,  1017,
    1047     1021,  1023,  1027,  1028,  1032,  1033,  1037,  1038,  1053,  1054,
    1048     1055,  1056,  1057,  1061,  1066,  1073,  1083,  1088,  1093,  1101,
    1049     1106,  1111,  1116,  1121,  1129,  1151,  1156,  1163,  1165,  1172,
    1050     1177,  1182,  1193,  1198,  1203,  1208,  1213,  1222,  1227,  1235,
    1051     1236,  1237,  1238,  1244,  1249,  1257,  1258,  1259,  1260,  1264,
    1052     1265,  1266,  1267,  1272,  1273,  1282,  1283,  1288,  1289,  1294,
    1053     1296,  1298,  1300,  1302,  1305,  1304,  1316,  1317,  1319,  1329,
    1054     1330,  1335,  1337,  1339,  1341,  1343,  1346,  1348,  1351,  1356,
    1055     1358,  1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,
    1056     1378,  1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,
    1057     1406,  1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,
    1058     1431,  1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,
    1059     1458,  1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,
    1060     1488,  1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,
    1061     1518,  1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,
    1062     1551,  1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,
    1063     1591,  1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,
    1064     1614,  1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,
    1065     1641,  1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,
    1066     1667,  1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,
    1067     1707,  1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,
    1068     1727,  1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,
    1069     1751,  1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,
    1070     1788,  1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,
    1071     1836,  1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,
    1072     1866,  1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,
    1073     1897,  1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,
    1074     1943,  1947,  1952,  1957,  1965,  1970,  1981,  1982,  1987,  1988,
    1075     1994,  1995,  1999,  2000,  2001,  2004,  2003,  2014,  2023,  2029,
    1076     2035,  2044,  2050,  2056,  2062,  2068,  2076,  2082,  2090,  2096,
    1077     2105,  2106,  2107,  2111,  2115,  2117,  2122,  2123,  2127,  2128,
    1078     2133,  2139,  2140,  2143,  2145,  2146,  2150,  2151,  2152,  2153,
    1079     2187,  2189,  2190,  2192,  2197,  2202,  2207,  2209,  2211,  2216,
    1080     2218,  2220,  2222,  2227,  2229,  2238,  2240,  2241,  2246,  2248,
    1081     2250,  2255,  2257,  2259,  2264,  2266,  2268,  2277,  2278,  2279,
    1082     2283,  2285,  2287,  2292,  2294,  2296,  2301,  2303,  2305,  2320,
    1083     2322,  2323,  2325,  2330,  2331,  2336,  2338,  2340,  2345,  2347,
    1084     2349,  2351,  2356,  2358,  2360,  2370,  2372,  2373,  2375,  2380,
    1085     2382,  2384,  2389,  2391,  2393,  2395,  2400,  2402,  2404,  2435,
    1086     2437,  2438,  2440,  2445,  2450,  2458,  2460,  2462,  2467,  2469,
    1087     2474,  2476,  2490,  2491,  2493,  2498,  2500,  2502,  2504,  2506,
    1088     2511,  2512,  2514,  2516,  2521,  2523,  2525,  2531,  2533,  2535,
    1089     2539,  2541,  2543,  2545,  2559,  2560,  2562,  2567,  2569,  2571,
    1090     2573,  2575,  2580,  2581,  2583,  2585,  2590,  2592,  2594,  2600,
    1091     2601,  2603,  2612,  2615,  2617,  2620,  2622,  2624,  2637,  2638,
    1092     2640,  2645,  2647,  2649,  2651,  2653,  2658,  2659,  2661,  2663,
    1093     2668,  2670,  2678,  2679,  2680,  2685,  2686,  2690,  2692,  2694,
    1094     2696,  2698,  2700,  2707,  2709,  2711,  2713,  2715,  2717,  2719,
    1095     2721,  2723,  2725,  2730,  2732,  2734,  2739,  2765,  2766,  2768,
    1096     2772,  2773,  2777,  2779,  2781,  2783,  2785,  2787,  2794,  2796,
    1097     2798,  2800,  2802,  2804,  2809,  2814,  2816,  2818,  2836,  2838,
    1098     2843,  2844
     1025     356,   358,   360,   365,   366,   372,   376,   378,   380,   382,
     1026     384,   386,   388,   390,   399,   400,   406,   407,   411,   412,
     1027     416,   420,   422,   424,   426,   431,   434,   436,   438,   443,
     1028     456,   458,   460,   462,   464,   466,   468,   470,   472,   474,
     1029     476,   483,   484,   490,   491,   492,   493,   497,   498,   500,
     1030     505,   506,   508,   510,   515,   516,   518,   523,   524,   526,
     1031     531,   532,   534,   536,   538,   543,   544,   546,   551,   552,
     1032     557,   558,   563,   564,   569,   570,   575,   576,   581,   582,
     1033     585,   587,   592,   597,   598,   600,   606,   607,   611,   612,
     1034     613,   614,   615,   616,   617,   618,   619,   620,   621,   622,
     1035     628,   630,   632,   634,   639,   640,   645,   646,   652,   653,
     1036     659,   660,   661,   662,   663,   664,   665,   666,   667,   677,
     1037     684,   686,   696,   697,   702,   704,   710,   712,   716,   717,
     1038     722,   727,   730,   732,   734,   744,   746,   757,   758,   760,
     1039     764,   766,   770,   771,   776,   777,   781,   786,   787,   791,
     1040     793,   799,   800,   804,   806,   808,   810,   816,   817,   821,
     1041     823,   828,   830,   832,   837,   839,   844,   846,   850,   853,
     1042     857,   860,   864,   866,   868,   870,   875,   877,   879,   884,
     1043     886,   888,   890,   892,   897,   899,   901,   903,   908,   920,
     1044     921,   926,   928,   933,   937,   939,   941,   943,   945,   951,
     1045     952,   958,   959,   963,   964,   969,   971,   977,   978,   980,
     1046     985,   990,  1000,  1002,  1006,  1007,  1012,  1014,  1018,  1019,
     1047    1023,  1025,  1029,  1030,  1034,  1035,  1039,  1040,  1055,  1056,
     1048    1057,  1058,  1059,  1063,  1068,  1075,  1085,  1090,  1095,  1103,
     1049    1108,  1113,  1118,  1123,  1131,  1153,  1158,  1165,  1167,  1174,
     1050    1179,  1184,  1195,  1200,  1205,  1210,  1215,  1224,  1229,  1237,
     1051    1238,  1239,  1240,  1246,  1251,  1259,  1260,  1261,  1262,  1266,
     1052    1267,  1268,  1269,  1274,  1275,  1284,  1285,  1290,  1291,  1296,
     1053    1298,  1300,  1302,  1304,  1307,  1306,  1318,  1319,  1321,  1331,
     1054    1332,  1337,  1339,  1341,  1343,  1345,  1348,  1350,  1353,  1358,
     1055    1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,  1378,
     1056    1380,  1382,  1388,  1389,  1391,  1393,  1395,  1400,  1401,  1407,
     1057    1408,  1410,  1412,  1417,  1419,  1421,  1423,  1428,  1429,  1431,
     1058    1433,  1438,  1439,  1441,  1446,  1447,  1449,  1451,  1456,  1458,
     1059    1460,  1465,  1466,  1470,  1472,  1478,  1477,  1481,  1483,  1488,
     1060    1490,  1496,  1497,  1502,  1503,  1505,  1506,  1515,  1516,  1518,
     1061    1520,  1525,  1527,  1533,  1534,  1536,  1539,  1542,  1547,  1548,
     1062    1553,  1558,  1562,  1564,  1570,  1569,  1576,  1578,  1584,  1585,
     1063    1593,  1594,  1598,  1599,  1600,  1602,  1604,  1611,  1612,  1614,
     1064    1616,  1621,  1622,  1628,  1629,  1633,  1634,  1639,  1640,  1641,
     1065    1643,  1651,  1652,  1654,  1657,  1659,  1663,  1664,  1665,  1667,
     1066    1669,  1673,  1678,  1686,  1687,  1696,  1698,  1703,  1704,  1705,
     1067    1709,  1710,  1711,  1715,  1716,  1717,  1721,  1722,  1723,  1728,
     1068    1729,  1730,  1731,  1737,  1738,  1740,  1745,  1746,  1751,  1752,
     1069    1753,  1754,  1755,  1770,  1771,  1776,  1777,  1783,  1785,  1788,
     1070    1790,  1792,  1815,  1816,  1818,  1820,  1825,  1826,  1828,  1833,
     1071    1838,  1839,  1845,  1844,  1848,  1852,  1854,  1856,  1862,  1863,
     1072    1868,  1873,  1875,  1880,  1882,  1883,  1885,  1890,  1892,  1894,
     1073    1899,  1901,  1906,  1911,  1919,  1925,  1924,  1938,  1939,  1944,
     1074    1945,  1949,  1954,  1959,  1967,  1972,  1983,  1984,  1989,  1990,
     1075    1996,  1997,  2001,  2002,  2003,  2006,  2005,  2016,  2025,  2031,
     1076    2037,  2046,  2052,  2058,  2064,  2070,  2078,  2084,  2092,  2098,
     1077    2107,  2108,  2109,  2113,  2117,  2119,  2124,  2125,  2129,  2130,
     1078    2135,  2141,  2142,  2145,  2147,  2148,  2152,  2153,  2154,  2155,
     1079    2189,  2191,  2192,  2194,  2199,  2204,  2209,  2211,  2213,  2218,
     1080    2220,  2222,  2224,  2229,  2231,  2240,  2242,  2243,  2248,  2250,
     1081    2252,  2257,  2259,  2261,  2266,  2268,  2270,  2279,  2280,  2281,
     1082    2285,  2287,  2289,  2294,  2296,  2298,  2303,  2305,  2307,  2322,
     1083    2324,  2325,  2327,  2332,  2333,  2338,  2340,  2342,  2347,  2349,
     1084    2351,  2353,  2358,  2360,  2362,  2372,  2374,  2375,  2377,  2382,
     1085    2384,  2386,  2391,  2393,  2395,  2397,  2402,  2404,  2406,  2437,
     1086    2439,  2440,  2442,  2447,  2452,  2460,  2462,  2464,  2469,  2471,
     1087    2476,  2478,  2492,  2493,  2495,  2500,  2502,  2504,  2506,  2508,
     1088    2513,  2514,  2516,  2518,  2523,  2525,  2527,  2533,  2535,  2537,
     1089    2541,  2543,  2545,  2547,  2561,  2562,  2564,  2569,  2571,  2573,
     1090    2575,  2577,  2582,  2583,  2585,  2587,  2592,  2594,  2596,  2602,
     1091    2603,  2605,  2614,  2617,  2619,  2622,  2624,  2626,  2639,  2640,
     1092    2642,  2647,  2649,  2651,  2653,  2655,  2660,  2661,  2663,  2665,
     1093    2670,  2672,  2680,  2681,  2682,  2687,  2688,  2692,  2694,  2696,
     1094    2698,  2700,  2702,  2709,  2711,  2713,  2715,  2717,  2719,  2721,
     1095    2723,  2725,  2727,  2732,  2734,  2736,  2741,  2767,  2768,  2770,
     1096    2774,  2775,  2779,  2781,  2783,  2785,  2787,  2789,  2796,  2798,
     1097    2800,  2802,  2804,  2806,  2811,  2816,  2818,  2820,  2838,  2840,
     1098    2845,  2846
    10991099};
    11001100#endif
     
    50775077    break;
    50785078
     5079  case 27:
     5080
     5081/* Line 1806 of yacc.c  */
     5082#line 379 "parser.yy"
     5083    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     5084    break;
     5085
    50795086  case 28:
    50805087
    50815088/* Line 1806 of yacc.c  */
    5082 #line 380 "parser.yy"
     5089#line 381 "parser.yy"
    50835090    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
    50845091    break;
    50855092
     5093  case 29:
     5094
     5095/* Line 1806 of yacc.c  */
     5096#line 383 "parser.yy"
     5097    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     5098    break;
     5099
    50865100  case 30:
    50875101
    50885102/* Line 1806 of yacc.c  */
    5089 #line 383 "parser.yy"
     5103#line 385 "parser.yy"
    50905104    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
    50915105    break;
     
    50945108
    50955109/* Line 1806 of yacc.c  */
    5096 #line 385 "parser.yy"
     5110#line 387 "parser.yy"
    50975111    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
    50985112    break;
     
    51015115
    51025116/* Line 1806 of yacc.c  */
    5103 #line 387 "parser.yy"
     5117#line 389 "parser.yy"
    51045118    { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
    51055119    break;
     
    51085122
    51095123/* Line 1806 of yacc.c  */
    5110 #line 389 "parser.yy"
     5124#line 391 "parser.yy"
    51115125    {
    51125126                        Token fn;
     
    51195133
    51205134/* Line 1806 of yacc.c  */
    5121 #line 399 "parser.yy"
     5135#line 401 "parser.yy"
    51225136    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
    51235137    break;
     
    51265140
    51275141/* Line 1806 of yacc.c  */
    5128 #line 404 "parser.yy"
     5142#line 406 "parser.yy"
    51295143    { (yyval.en) = 0; }
    51305144    break;
     
    51335147
    51345148/* Line 1806 of yacc.c  */
    5135 #line 410 "parser.yy"
     5149#line 412 "parser.yy"
    51365150    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    51375151    break;
     
    51405154
    51415155/* Line 1806 of yacc.c  */
    5142 #line 415 "parser.yy"
     5156#line 417 "parser.yy"
    51435157    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
    51445158    break;
     
    51475161
    51485162/* Line 1806 of yacc.c  */
    5149 #line 419 "parser.yy"
     5163#line 421 "parser.yy"
    51505164    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
    51515165    break;
     
    51545168
    51555169/* Line 1806 of yacc.c  */
    5156 #line 421 "parser.yy"
     5170#line 423 "parser.yy"
    51575171    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
    51585172    break;
     
    51615175
    51625176/* Line 1806 of yacc.c  */
    5163 #line 423 "parser.yy"
     5177#line 425 "parser.yy"
    51645178    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
    51655179    break;
     
    51685182
    51695183/* Line 1806 of yacc.c  */
    5170 #line 425 "parser.yy"
     5184#line 427 "parser.yy"
    51715185    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
    51725186    break;
     
    51755189
    51765190/* Line 1806 of yacc.c  */
    5177 #line 433 "parser.yy"
     5191#line 435 "parser.yy"
    51785192    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    51795193    break;
     
    51825196
    51835197/* Line 1806 of yacc.c  */
    5184 #line 435 "parser.yy"
     5198#line 437 "parser.yy"
    51855199    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
    51865200    break;
     
    51895203
    51905204/* Line 1806 of yacc.c  */
    5191 #line 437 "parser.yy"
     5205#line 439 "parser.yy"
    51925206    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
    51935207    break;
     
    51965210
    51975211/* Line 1806 of yacc.c  */
    5198 #line 442 "parser.yy"
     5212#line 444 "parser.yy"
    51995213    {
    52005214                        switch ( (yyvsp[(1) - (2)].op) ) {
     
    52145228
    52155229/* Line 1806 of yacc.c  */
    5216 #line 455 "parser.yy"
     5230#line 457 "parser.yy"
    52175231    { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
    52185232    break;
     
    52215235
    52225236/* Line 1806 of yacc.c  */
    5223 #line 457 "parser.yy"
     5237#line 459 "parser.yy"
    52245238    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
    52255239    break;
     
    52285242
    52295243/* Line 1806 of yacc.c  */
    5230 #line 459 "parser.yy"
     5244#line 461 "parser.yy"
    52315245    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
    52325246    break;
     
    52355249
    52365250/* Line 1806 of yacc.c  */
    5237 #line 461 "parser.yy"
     5251#line 463 "parser.yy"
    52385252    { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
    52395253    break;
     
    52425256
    52435257/* Line 1806 of yacc.c  */
    5244 #line 463 "parser.yy"
     5258#line 465 "parser.yy"
    52455259    { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
    52465260    break;
     
    52495263
    52505264/* Line 1806 of yacc.c  */
    5251 #line 465 "parser.yy"
     5265#line 467 "parser.yy"
    52525266    { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
    52535267    break;
     
    52565270
    52575271/* Line 1806 of yacc.c  */
    5258 #line 467 "parser.yy"
     5272#line 469 "parser.yy"
    52595273    { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
    52605274    break;
     
    52635277
    52645278/* Line 1806 of yacc.c  */
    5265 #line 469 "parser.yy"
     5279#line 471 "parser.yy"
    52665280    { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
    52675281    break;
     
    52705284
    52715285/* Line 1806 of yacc.c  */
    5272 #line 471 "parser.yy"
     5286#line 473 "parser.yy"
    52735287    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
    52745288    break;
     
    52775291
    52785292/* Line 1806 of yacc.c  */
    5279 #line 473 "parser.yy"
     5293#line 475 "parser.yy"
    52805294    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
    52815295    break;
     
    52845298
    52855299/* Line 1806 of yacc.c  */
    5286 #line 475 "parser.yy"
     5300#line 477 "parser.yy"
    52875301    { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
    52885302    break;
     
    52915305
    52925306/* Line 1806 of yacc.c  */
    5293 #line 481 "parser.yy"
     5307#line 483 "parser.yy"
    52945308    { (yyval.op) = OperKinds::PointTo; }
    52955309    break;
     
    52985312
    52995313/* Line 1806 of yacc.c  */
    5300 #line 482 "parser.yy"
     5314#line 484 "parser.yy"
    53015315    { (yyval.op) = OperKinds::AddressOf; }
    53025316    break;
     
    53055319
    53065320/* Line 1806 of yacc.c  */
    5307 #line 488 "parser.yy"
     5321#line 490 "parser.yy"
    53085322    { (yyval.op) = OperKinds::UnPlus; }
    53095323    break;
     
    53125326
    53135327/* Line 1806 of yacc.c  */
    5314 #line 489 "parser.yy"
     5328#line 491 "parser.yy"
    53155329    { (yyval.op) = OperKinds::UnMinus; }
    53165330    break;
     
    53195333
    53205334/* Line 1806 of yacc.c  */
    5321 #line 490 "parser.yy"
     5335#line 492 "parser.yy"
    53225336    { (yyval.op) = OperKinds::Neg; }
    53235337    break;
     
    53265340
    53275341/* Line 1806 of yacc.c  */
    5328 #line 491 "parser.yy"
     5342#line 493 "parser.yy"
    53295343    { (yyval.op) = OperKinds::BitNeg; }
    53305344    break;
    53315345
    53325346  case 68:
    5333 
    5334 /* Line 1806 of yacc.c  */
    5335 #line 497 "parser.yy"
    5336     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
    5337     break;
    5338 
    5339   case 69:
    53405347
    53415348/* Line 1806 of yacc.c  */
     
    53445351    break;
    53455352
     5353  case 69:
     5354
     5355/* Line 1806 of yacc.c  */
     5356#line 501 "parser.yy"
     5357    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     5358    break;
     5359
    53465360  case 71:
    53475361
    53485362/* Line 1806 of yacc.c  */
    5349 #line 505 "parser.yy"
     5363#line 507 "parser.yy"
    53505364    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53515365    break;
     
    53545368
    53555369/* Line 1806 of yacc.c  */
    5356 #line 507 "parser.yy"
     5370#line 509 "parser.yy"
    53575371    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53585372    break;
     
    53615375
    53625376/* Line 1806 of yacc.c  */
    5363 #line 509 "parser.yy"
     5377#line 511 "parser.yy"
    53645378    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53655379    break;
     
    53685382
    53695383/* Line 1806 of yacc.c  */
    5370 #line 515 "parser.yy"
     5384#line 517 "parser.yy"
    53715385    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53725386    break;
     
    53755389
    53765390/* Line 1806 of yacc.c  */
    5377 #line 517 "parser.yy"
     5391#line 519 "parser.yy"
    53785392    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53795393    break;
     
    53825396
    53835397/* Line 1806 of yacc.c  */
    5384 #line 523 "parser.yy"
     5398#line 525 "parser.yy"
    53855399    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53865400    break;
     
    53895403
    53905404/* Line 1806 of yacc.c  */
    5391 #line 525 "parser.yy"
     5405#line 527 "parser.yy"
    53925406    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    53935407    break;
     
    53965410
    53975411/* Line 1806 of yacc.c  */
    5398 #line 531 "parser.yy"
     5412#line 533 "parser.yy"
    53995413    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54005414    break;
     
    54035417
    54045418/* Line 1806 of yacc.c  */
    5405 #line 533 "parser.yy"
     5419#line 535 "parser.yy"
    54065420    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54075421    break;
     
    54105424
    54115425/* Line 1806 of yacc.c  */
    5412 #line 535 "parser.yy"
     5426#line 537 "parser.yy"
    54135427    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54145428    break;
     
    54175431
    54185432/* Line 1806 of yacc.c  */
    5419 #line 537 "parser.yy"
     5433#line 539 "parser.yy"
    54205434    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54215435    break;
     
    54245438
    54255439/* Line 1806 of yacc.c  */
    5426 #line 543 "parser.yy"
     5440#line 545 "parser.yy"
    54275441    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54285442    break;
     
    54315445
    54325446/* Line 1806 of yacc.c  */
    5433 #line 545 "parser.yy"
     5447#line 547 "parser.yy"
    54345448    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54355449    break;
     
    54385452
    54395453/* Line 1806 of yacc.c  */
    5440 #line 551 "parser.yy"
     5454#line 553 "parser.yy"
    54415455    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54425456    break;
     
    54455459
    54465460/* Line 1806 of yacc.c  */
    5447 #line 557 "parser.yy"
     5461#line 559 "parser.yy"
    54485462    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54495463    break;
     
    54525466
    54535467/* Line 1806 of yacc.c  */
    5454 #line 563 "parser.yy"
     5468#line 565 "parser.yy"
    54555469    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54565470    break;
     
    54595473
    54605474/* Line 1806 of yacc.c  */
    5461 #line 569 "parser.yy"
     5475#line 571 "parser.yy"
    54625476    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
    54635477    break;
     
    54665480
    54675481/* Line 1806 of yacc.c  */
    5468 #line 575 "parser.yy"
     5482#line 577 "parser.yy"
    54695483    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
    54705484    break;
     
    54735487
    54745488/* Line 1806 of yacc.c  */
    5475 #line 581 "parser.yy"
     5489#line 583 "parser.yy"
    54765490    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
    54775491    break;
     
    54805494
    54815495/* Line 1806 of yacc.c  */
    5482 #line 584 "parser.yy"
     5496#line 586 "parser.yy"
    54835497    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
    54845498    break;
     
    54875501
    54885502/* Line 1806 of yacc.c  */
    5489 #line 586 "parser.yy"
     5503#line 588 "parser.yy"
    54905504    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
    54915505    break;
     
    54945508
    54955509/* Line 1806 of yacc.c  */
    5496 #line 597 "parser.yy"
     5510#line 599 "parser.yy"
    54975511    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    54985512    break;
     
    55015515
    55025516/* Line 1806 of yacc.c  */
    5503 #line 599 "parser.yy"
     5517#line 601 "parser.yy"
    55045518    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
    55055519    break;
     
    55085522
    55095523/* Line 1806 of yacc.c  */
    5510 #line 604 "parser.yy"
     5524#line 606 "parser.yy"
    55115525    { (yyval.en) = nullptr; }
    55125526    break;
     
    55155529
    55165530/* Line 1806 of yacc.c  */
    5517 #line 609 "parser.yy"
     5531#line 611 "parser.yy"
    55185532    { (yyval.op) = OperKinds::Assign; }
    55195533    break;
     
    55225536
    55235537/* Line 1806 of yacc.c  */
    5524 #line 610 "parser.yy"
     5538#line 612 "parser.yy"
    55255539    { (yyval.op) = OperKinds::AtAssn; }
    55265540    break;
     
    55295543
    55305544/* Line 1806 of yacc.c  */
    5531 #line 611 "parser.yy"
     5545#line 613 "parser.yy"
    55325546    { (yyval.op) = OperKinds::MulAssn; }
    55335547    break;
     
    55365550
    55375551/* Line 1806 of yacc.c  */
    5538 #line 612 "parser.yy"
     5552#line 614 "parser.yy"
    55395553    { (yyval.op) = OperKinds::DivAssn; }
    55405554    break;
     
    55435557
    55445558/* Line 1806 of yacc.c  */
    5545 #line 613 "parser.yy"
     5559#line 615 "parser.yy"
    55465560    { (yyval.op) = OperKinds::ModAssn; }
    55475561    break;
     
    55505564
    55515565/* Line 1806 of yacc.c  */
    5552 #line 614 "parser.yy"
     5566#line 616 "parser.yy"
    55535567    { (yyval.op) = OperKinds::PlusAssn; }
    55545568    break;
     
    55575571
    55585572/* Line 1806 of yacc.c  */
    5559 #line 615 "parser.yy"
     5573#line 617 "parser.yy"
    55605574    { (yyval.op) = OperKinds::MinusAssn; }
    55615575    break;
     
    55645578
    55655579/* Line 1806 of yacc.c  */
    5566 #line 616 "parser.yy"
     5580#line 618 "parser.yy"
    55675581    { (yyval.op) = OperKinds::LSAssn; }
    55685582    break;
     
    55715585
    55725586/* Line 1806 of yacc.c  */
    5573 #line 617 "parser.yy"
     5587#line 619 "parser.yy"
    55745588    { (yyval.op) = OperKinds::RSAssn; }
    55755589    break;
     
    55785592
    55795593/* Line 1806 of yacc.c  */
    5580 #line 618 "parser.yy"
     5594#line 620 "parser.yy"
    55815595    { (yyval.op) = OperKinds::AndAssn; }
    55825596    break;
     
    55855599
    55865600/* Line 1806 of yacc.c  */
    5587 #line 619 "parser.yy"
     5601#line 621 "parser.yy"
    55885602    { (yyval.op) = OperKinds::ERAssn; }
    55895603    break;
     
    55925606
    55935607/* Line 1806 of yacc.c  */
    5594 #line 620 "parser.yy"
     5608#line 622 "parser.yy"
    55955609    { (yyval.op) = OperKinds::OrAssn; }
    55965610    break;
     
    55995613
    56005614/* Line 1806 of yacc.c  */
    5601 #line 627 "parser.yy"
     5615#line 629 "parser.yy"
    56025616    { (yyval.en) = new ExpressionNode( build_tuple() ); }
    56035617    break;
     
    56065620
    56075621/* Line 1806 of yacc.c  */
    5608 #line 629 "parser.yy"
     5622#line 631 "parser.yy"
    56095623    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
    56105624    break;
     
    56135627
    56145628/* Line 1806 of yacc.c  */
    5615 #line 631 "parser.yy"
     5629#line 633 "parser.yy"
    56165630    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
    56175631    break;
     
    56205634
    56215635/* Line 1806 of yacc.c  */
    5622 #line 633 "parser.yy"
     5636#line 635 "parser.yy"
    56235637    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
    56245638    break;
     
    56275641
    56285642/* Line 1806 of yacc.c  */
    5629 #line 639 "parser.yy"
     5643#line 641 "parser.yy"
    56305644    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    56315645    break;
     
    56345648
    56355649/* Line 1806 of yacc.c  */
    5636 #line 645 "parser.yy"
     5650#line 647 "parser.yy"
    56375651    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56385652    break;
     
    56415655
    56425656/* Line 1806 of yacc.c  */
    5643 #line 650 "parser.yy"
     5657#line 652 "parser.yy"
    56445658    { (yyval.en) = 0; }
    56455659    break;
     
    56485662
    56495663/* Line 1806 of yacc.c  */
    5650 #line 659 "parser.yy"
     5664#line 661 "parser.yy"
    56515665    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    56525666    break;
     
    56555669
    56565670/* Line 1806 of yacc.c  */
    5657 #line 666 "parser.yy"
     5671#line 668 "parser.yy"
    56585672    {
    56595673                        Token fn;
     
    56665680
    56675681/* Line 1806 of yacc.c  */
    5668 #line 676 "parser.yy"
     5682#line 678 "parser.yy"
    56695683    {
    56705684                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    56755689
    56765690/* Line 1806 of yacc.c  */
    5677 #line 683 "parser.yy"
     5691#line 685 "parser.yy"
    56785692    { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
    56795693    break;
     
    56825696
    56835697/* Line 1806 of yacc.c  */
    5684 #line 690 "parser.yy"
     5698#line 692 "parser.yy"
    56855699    { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
    56865700    break;
     
    56895703
    56905704/* Line 1806 of yacc.c  */
    5691 #line 696 "parser.yy"
     5705#line 698 "parser.yy"
    56925706    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    56935707    break;
     
    56965710
    56975711/* Line 1806 of yacc.c  */
    5698 #line 701 "parser.yy"
     5712#line 703 "parser.yy"
    56995713    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57005714    break;
     
    57035717
    57045718/* Line 1806 of yacc.c  */
    5705 #line 703 "parser.yy"
     5719#line 705 "parser.yy"
    57065720    {   // mark all fields in list
    57075721                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     
    57145728
    57155729/* Line 1806 of yacc.c  */
    5716 #line 709 "parser.yy"
     5730#line 711 "parser.yy"
    57175731    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57185732    break;
     
    57215735
    57225736/* Line 1806 of yacc.c  */
    5723 #line 716 "parser.yy"
     5737#line 718 "parser.yy"
    57245738    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    57255739    break;
     
    57285742
    57295743/* Line 1806 of yacc.c  */
    5730 #line 721 "parser.yy"
     5744#line 723 "parser.yy"
    57315745    { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
    57325746    break;
     
    57355749
    57365750/* Line 1806 of yacc.c  */
    5737 #line 727 "parser.yy"
     5751#line 729 "parser.yy"
    57385752    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
    57395753    break;
     
    57425756
    57435757/* Line 1806 of yacc.c  */
    5744 #line 729 "parser.yy"
     5758#line 731 "parser.yy"
    57455759    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
    57465760    break;
     
    57495763
    57505764/* Line 1806 of yacc.c  */
    5751 #line 731 "parser.yy"
     5765#line 733 "parser.yy"
    57525766    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
    57535767    break;
     
    57565770
    57575771/* Line 1806 of yacc.c  */
    5758 #line 733 "parser.yy"
     5772#line 735 "parser.yy"
    57595773    {
    57605774                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
     
    57715785
    57725786/* Line 1806 of yacc.c  */
    5773 #line 743 "parser.yy"
     5787#line 745 "parser.yy"
    57745788    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
    57755789    break;
     
    57785792
    57795793/* Line 1806 of yacc.c  */
    5780 #line 745 "parser.yy"
     5794#line 747 "parser.yy"
    57815795    {
    57825796                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
     
    57885802
    57895803/* Line 1806 of yacc.c  */
    5790 #line 755 "parser.yy"
     5804#line 757 "parser.yy"
    57915805    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    57925806    break;
     
    57955809
    57965810/* Line 1806 of yacc.c  */
    5797 #line 757 "parser.yy"
     5811#line 759 "parser.yy"
    57985812    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    57995813    break;
     
    58025816
    58035817/* Line 1806 of yacc.c  */
    5804 #line 762 "parser.yy"
     5818#line 764 "parser.yy"
    58055819    { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
    58065820    break;
     
    58095823
    58105824/* Line 1806 of yacc.c  */
    5811 #line 764 "parser.yy"
     5825#line 766 "parser.yy"
    58125826    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
    58135827    break;
     
    58165830
    58175831/* Line 1806 of yacc.c  */
    5818 #line 768 "parser.yy"
     5832#line 770 "parser.yy"
    58195833    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
    58205834    break;
     
    58235837
    58245838/* Line 1806 of yacc.c  */
    5825 #line 769 "parser.yy"
     5839#line 771 "parser.yy"
    58265840    { (yyval.sn) = new StatementNode( build_default() ); }
    58275841    break;
     
    58305844
    58315845/* Line 1806 of yacc.c  */
    5832 #line 775 "parser.yy"
     5846#line 777 "parser.yy"
    58335847    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
    58345848    break;
     
    58375851
    58385852/* Line 1806 of yacc.c  */
    5839 #line 779 "parser.yy"
     5853#line 781 "parser.yy"
    58405854    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
    58415855    break;
     
    58445858
    58455859/* Line 1806 of yacc.c  */
    5846 #line 784 "parser.yy"
     5860#line 786 "parser.yy"
    58475861    { (yyval.sn) = 0; }
    58485862    break;
     
    58515865
    58525866/* Line 1806 of yacc.c  */
    5853 #line 790 "parser.yy"
     5867#line 792 "parser.yy"
    58545868    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
    58555869    break;
     
    58585872
    58595873/* Line 1806 of yacc.c  */
    5860 #line 792 "parser.yy"
     5874#line 794 "parser.yy"
    58615875    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
    58625876    break;
     
    58655879
    58665880/* Line 1806 of yacc.c  */
    5867 #line 797 "parser.yy"
     5881#line 799 "parser.yy"
    58685882    { (yyval.sn) = 0; }
    58695883    break;
     
    58725886
    58735887/* Line 1806 of yacc.c  */
    5874 #line 803 "parser.yy"
     5888#line 805 "parser.yy"
    58755889    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58765890    break;
     
    58795893
    58805894/* Line 1806 of yacc.c  */
    5881 #line 805 "parser.yy"
     5895#line 807 "parser.yy"
    58825896    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
    58835897    break;
     
    58865900
    58875901/* Line 1806 of yacc.c  */
    5888 #line 807 "parser.yy"
     5902#line 809 "parser.yy"
    58895903    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    58905904    break;
     
    58935907
    58945908/* Line 1806 of yacc.c  */
    5895 #line 809 "parser.yy"
     5909#line 811 "parser.yy"
    58965910    { (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) ) ) ) ) ) ); }
    58975911    break;
     
    59005914
    59015915/* Line 1806 of yacc.c  */
    5902 #line 814 "parser.yy"
     5916#line 816 "parser.yy"
    59035917    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
    59045918    break;
    59055919
    59065920  case 179:
    5907 
    5908 /* Line 1806 of yacc.c  */
    5909 #line 820 "parser.yy"
    5910     { (yyval.sn) = 0; }
    5911     break;
    5912 
    5913   case 180:
    59145921
    59155922/* Line 1806 of yacc.c  */
     
    59185925    break;
    59195926
     5927  case 180:
     5928
     5929/* Line 1806 of yacc.c  */
     5930#line 824 "parser.yy"
     5931    { (yyval.sn) = 0; }
     5932    break;
     5933
    59205934  case 181:
    59215935
    59225936/* Line 1806 of yacc.c  */
    5923 #line 827 "parser.yy"
     5937#line 829 "parser.yy"
    59245938    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
    59255939    break;
     
    59285942
    59295943/* Line 1806 of yacc.c  */
    5930 #line 829 "parser.yy"
     5944#line 831 "parser.yy"
    59315945    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
    59325946    break;
     
    59355949
    59365950/* Line 1806 of yacc.c  */
    5937 #line 831 "parser.yy"
     5951#line 833 "parser.yy"
    59385952    { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
    59395953    break;
     
    59425956
    59435957/* Line 1806 of yacc.c  */
    5944 #line 836 "parser.yy"
     5958#line 838 "parser.yy"
    59455959    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    59465960    break;
     
    59495963
    59505964/* Line 1806 of yacc.c  */
    5951 #line 838 "parser.yy"
     5965#line 840 "parser.yy"
    59525966    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    59535967    break;
     
    59565970
    59575971/* Line 1806 of yacc.c  */
    5958 #line 843 "parser.yy"
     5972#line 845 "parser.yy"
    59595973    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
    59605974    break;
     
    59635977
    59645978/* Line 1806 of yacc.c  */
    5965 #line 847 "parser.yy"
     5979#line 849 "parser.yy"
    59665980    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
    59675981    break;
     
    59705984
    59715985/* Line 1806 of yacc.c  */
    5972 #line 850 "parser.yy"
     5986#line 852 "parser.yy"
    59735987    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
    59745988    break;
     
    59775991
    59785992/* Line 1806 of yacc.c  */
    5979 #line 854 "parser.yy"
     5993#line 856 "parser.yy"
    59805994    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
    59815995    break;
     
    59845998
    59855999/* Line 1806 of yacc.c  */
    5986 #line 857 "parser.yy"
     6000#line 859 "parser.yy"
    59876001    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
    59886002    break;
     
    59916005
    59926006/* Line 1806 of yacc.c  */
    5993 #line 861 "parser.yy"
     6007#line 863 "parser.yy"
    59946008    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
    59956009    break;
     
    59986012
    59996013/* Line 1806 of yacc.c  */
    6000 #line 863 "parser.yy"
     6014#line 865 "parser.yy"
    60016015    { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
    60026016    break;
    60036017
    60046018  case 193:
    6005 
    6006 /* Line 1806 of yacc.c  */
    6007 #line 865 "parser.yy"
    6008     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
    6009     break;
    6010 
    6011   case 194:
    60126019
    60136020/* Line 1806 of yacc.c  */
     
    60166023    break;
    60176024
     6025  case 194:
     6026
     6027/* Line 1806 of yacc.c  */
     6028#line 869 "parser.yy"
     6029    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     6030    break;
     6031
    60186032  case 195:
    60196033
    60206034/* Line 1806 of yacc.c  */
    6021 #line 869 "parser.yy"
     6035#line 871 "parser.yy"
    60226036    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
    60236037    break;
     
    60266040
    60276041/* Line 1806 of yacc.c  */
    6028 #line 874 "parser.yy"
     6042#line 876 "parser.yy"
    60296043    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
    60306044    break;
     
    60336047
    60346048/* Line 1806 of yacc.c  */
    6035 #line 876 "parser.yy"
     6049#line 878 "parser.yy"
    60366050    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
    60376051    break;
     
    60406054
    60416055/* Line 1806 of yacc.c  */
    6042 #line 878 "parser.yy"
     6056#line 880 "parser.yy"
    60436057    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
    60446058    break;
     
    60476061
    60486062/* Line 1806 of yacc.c  */
    6049 #line 885 "parser.yy"
     6063#line 887 "parser.yy"
    60506064    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
    60516065    break;
     
    60546068
    60556069/* Line 1806 of yacc.c  */
    6056 #line 887 "parser.yy"
     6070#line 889 "parser.yy"
    60576071    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
    60586072    break;
     
    60616075
    60626076/* Line 1806 of yacc.c  */
    6063 #line 889 "parser.yy"
     6077#line 891 "parser.yy"
    60646078    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
    60656079    break;
     
    60686082
    60696083/* Line 1806 of yacc.c  */
    6070 #line 891 "parser.yy"
     6084#line 893 "parser.yy"
    60716085    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
    60726086    break;
     
    60756089
    60766090/* Line 1806 of yacc.c  */
    6077 #line 896 "parser.yy"
     6091#line 898 "parser.yy"
    60786092    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
    60796093    break;
     
    60826096
    60836097/* Line 1806 of yacc.c  */
    6084 #line 898 "parser.yy"
     6098#line 900 "parser.yy"
    60856099    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
    60866100    break;
     
    60896103
    60906104/* Line 1806 of yacc.c  */
    6091 #line 900 "parser.yy"
     6105#line 902 "parser.yy"
    60926106    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
    60936107    break;
     
    60966110
    60976111/* Line 1806 of yacc.c  */
    6098 #line 902 "parser.yy"
     6112#line 904 "parser.yy"
    60996113    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
    61006114    break;
     
    61036117
    61046118/* Line 1806 of yacc.c  */
    6105 #line 907 "parser.yy"
     6119#line 909 "parser.yy"
    61066120    {
    61076121                        (yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
     
    61126126
    61136127/* Line 1806 of yacc.c  */
    6114 #line 920 "parser.yy"
     6128#line 922 "parser.yy"
    61156129    {
    61166130                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61226136
    61236137/* Line 1806 of yacc.c  */
    6124 #line 925 "parser.yy"
     6138#line 927 "parser.yy"
    61256139    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    61266140    break;
     
    61296143
    61306144/* Line 1806 of yacc.c  */
    6131 #line 927 "parser.yy"
     6145#line 929 "parser.yy"
    61326146    {
    61336147                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61396153
    61406154/* Line 1806 of yacc.c  */
    6141 #line 936 "parser.yy"
     6155#line 938 "parser.yy"
    61426156    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
    61436157    break;
     
    61466160
    61476161/* Line 1806 of yacc.c  */
    6148 #line 938 "parser.yy"
     6162#line 940 "parser.yy"
    61496163    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
    61506164    break;
     
    61536167
    61546168/* Line 1806 of yacc.c  */
    6155 #line 940 "parser.yy"
     6169#line 942 "parser.yy"
    61566170    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
    61576171    break;
     
    61606174
    61616175/* Line 1806 of yacc.c  */
    6162 #line 942 "parser.yy"
     6176#line 944 "parser.yy"
    61636177    { (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) ) ); }
    61646178    break;
     
    61676181
    61686182/* Line 1806 of yacc.c  */
    6169 #line 944 "parser.yy"
     6183#line 946 "parser.yy"
    61706184    { (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) ) ); }
    61716185    break;
     
    61746188
    61756189/* Line 1806 of yacc.c  */
    6176 #line 949 "parser.yy"
     6190#line 951 "parser.yy"
    61776191    { (yyval.flag) = false; }
    61786192    break;
     
    61816195
    61826196/* Line 1806 of yacc.c  */
    6183 #line 951 "parser.yy"
     6197#line 953 "parser.yy"
    61846198    { (yyval.flag) = true; }
    61856199    break;
     
    61886202
    61896203/* Line 1806 of yacc.c  */
    6190 #line 956 "parser.yy"
     6204#line 958 "parser.yy"
    61916205    { (yyval.en) = 0; }
    61926206    break;
     
    61956209
    61966210/* Line 1806 of yacc.c  */
    6197 #line 963 "parser.yy"
     6211#line 965 "parser.yy"
    61986212    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    61996213    break;
     
    62026216
    62036217/* Line 1806 of yacc.c  */
    6204 #line 968 "parser.yy"
     6218#line 970 "parser.yy"
    62056219    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
    62066220    break;
     
    62096223
    62106224/* Line 1806 of yacc.c  */
    6211 #line 970 "parser.yy"
     6225#line 972 "parser.yy"
    62126226    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
    62136227    break;
     
    62166230
    62176231/* Line 1806 of yacc.c  */
    6218 #line 975 "parser.yy"
     6232#line 977 "parser.yy"
    62196233    { (yyval.en) = 0; }
    62206234    break;
     
    62236237
    62246238/* Line 1806 of yacc.c  */
    6225 #line 977 "parser.yy"
     6239#line 979 "parser.yy"
    62266240    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
    62276241    break;
     
    62306244
    62316245/* Line 1806 of yacc.c  */
    6232 #line 979 "parser.yy"
     6246#line 981 "parser.yy"
    62336247    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
    62346248    break;
     
    62376251
    62386252/* Line 1806 of yacc.c  */
    6239 #line 984 "parser.yy"
     6253#line 986 "parser.yy"
    62406254    {
    62416255                        (yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
     
    62476261
    62486262/* Line 1806 of yacc.c  */
    6249 #line 989 "parser.yy"
     6263#line 991 "parser.yy"
    62506264    {
    62516265                        (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
     
    62576271
    62586272/* Line 1806 of yacc.c  */
    6259 #line 999 "parser.yy"
     6273#line 1001 "parser.yy"
    62606274    { (yyval.decl) = 0; }
    62616275    break;
     
    62646278
    62656279/* Line 1806 of yacc.c  */
    6266 #line 1006 "parser.yy"
     6280#line 1008 "parser.yy"
    62676281    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    62686282    break;
     
    62716285
    62726286/* Line 1806 of yacc.c  */
    6273 #line 1011 "parser.yy"
     6287#line 1013 "parser.yy"
    62746288    { (yyval.decl) = 0; }
    62756289    break;
     
    62786292
    62796293/* Line 1806 of yacc.c  */
    6280 #line 1018 "parser.yy"
     6294#line 1020 "parser.yy"
    62816295    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    62826296    break;
     
    62856299
    62866300/* Line 1806 of yacc.c  */
    6287 #line 1032 "parser.yy"
     6301#line 1034 "parser.yy"
    62886302    {}
    62896303    break;
     
    62926306
    62936307/* Line 1806 of yacc.c  */
    6294 #line 1033 "parser.yy"
     6308#line 1035 "parser.yy"
    62956309    {}
    62966310    break;
     
    62996313
    63006314/* Line 1806 of yacc.c  */
    6301 #line 1062 "parser.yy"
     6315#line 1064 "parser.yy"
    63026316    {
    63036317                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63096323
    63106324/* Line 1806 of yacc.c  */
    6311 #line 1069 "parser.yy"
     6325#line 1071 "parser.yy"
    63126326    {
    63136327                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63196333
    63206334/* Line 1806 of yacc.c  */
    6321 #line 1074 "parser.yy"
     6335#line 1076 "parser.yy"
    63226336    {
    63236337                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    63296343
    63306344/* Line 1806 of yacc.c  */
    6331 #line 1084 "parser.yy"
     6345#line 1086 "parser.yy"
    63326346    {
    63336347                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    63396353
    63406354/* Line 1806 of yacc.c  */
    6341 #line 1089 "parser.yy"
     6355#line 1091 "parser.yy"
    63426356    {
    63436357                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    63496363
    63506364/* Line 1806 of yacc.c  */
    6351 #line 1094 "parser.yy"
     6365#line 1096 "parser.yy"
    63526366    {
    63536367                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    63596373
    63606374/* Line 1806 of yacc.c  */
    6361 #line 1102 "parser.yy"
     6375#line 1104 "parser.yy"
    63626376    {
    63636377                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63696383
    63706384/* Line 1806 of yacc.c  */
    6371 #line 1107 "parser.yy"
     6385#line 1109 "parser.yy"
    63726386    {
    63736387                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63796393
    63806394/* Line 1806 of yacc.c  */
    6381 #line 1112 "parser.yy"
     6395#line 1114 "parser.yy"
    63826396    {
    63836397                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63896403
    63906404/* Line 1806 of yacc.c  */
    6391 #line 1117 "parser.yy"
     6405#line 1119 "parser.yy"
    63926406    {
    63936407                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63996413
    64006414/* Line 1806 of yacc.c  */
    6401 #line 1122 "parser.yy"
     6415#line 1124 "parser.yy"
    64026416    {
    64036417                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    64096423
    64106424/* Line 1806 of yacc.c  */
    6411 #line 1130 "parser.yy"
     6425#line 1132 "parser.yy"
    64126426    {
    64136427                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    64186432
    64196433/* Line 1806 of yacc.c  */
    6420 #line 1153 "parser.yy"
     6434#line 1155 "parser.yy"
    64216435    {
    64226436                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64276441
    64286442/* Line 1806 of yacc.c  */
    6429 #line 1157 "parser.yy"
     6443#line 1159 "parser.yy"
    64306444    {
    64316445                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64366450
    64376451/* Line 1806 of yacc.c  */
    6438 #line 1164 "parser.yy"
     6452#line 1166 "parser.yy"
    64396453    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    64406454    break;
     
    64436457
    64446458/* Line 1806 of yacc.c  */
    6445 #line 1168 "parser.yy"
     6459#line 1170 "parser.yy"
    64466460    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    64476461    break;
     
    64506464
    64516465/* Line 1806 of yacc.c  */
    6452 #line 1173 "parser.yy"
     6466#line 1175 "parser.yy"
    64536467    {
    64546468                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64606474
    64616475/* Line 1806 of yacc.c  */
    6462 #line 1178 "parser.yy"
     6476#line 1180 "parser.yy"
    64636477    {
    64646478                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64706484
    64716485/* Line 1806 of yacc.c  */
    6472 #line 1183 "parser.yy"
     6486#line 1185 "parser.yy"
    64736487    {
    64746488                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    64806494
    64816495/* Line 1806 of yacc.c  */
    6482 #line 1194 "parser.yy"
     6496#line 1196 "parser.yy"
    64836497    {
    64846498                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64906504
    64916505/* Line 1806 of yacc.c  */
    6492 #line 1199 "parser.yy"
     6506#line 1201 "parser.yy"
    64936507    {
    64946508                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65006514
    65016515/* Line 1806 of yacc.c  */
    6502 #line 1204 "parser.yy"
     6516#line 1206 "parser.yy"
    65036517    {
    65046518                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65106524
    65116525/* Line 1806 of yacc.c  */
    6512 #line 1209 "parser.yy"
     6526#line 1211 "parser.yy"
    65136527    {
    65146528                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65206534
    65216535/* Line 1806 of yacc.c  */
    6522 #line 1214 "parser.yy"
     6536#line 1216 "parser.yy"
    65236537    {
    65246538                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65306544
    65316545/* Line 1806 of yacc.c  */
    6532 #line 1223 "parser.yy"
     6546#line 1225 "parser.yy"
    65336547    {
    65346548                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    65406554
    65416555/* Line 1806 of yacc.c  */
    6542 #line 1228 "parser.yy"
     6556#line 1230 "parser.yy"
    65436557    {
    65446558                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    65506564
    65516565/* Line 1806 of yacc.c  */
    6552 #line 1245 "parser.yy"
     6566#line 1247 "parser.yy"
    65536567    {
    65546568                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65606574
    65616575/* Line 1806 of yacc.c  */
    6562 #line 1250 "parser.yy"
     6576#line 1252 "parser.yy"
    65636577    {
    65646578                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65706584
    65716585/* Line 1806 of yacc.c  */
    6572 #line 1272 "parser.yy"
     6586#line 1274 "parser.yy"
    65736587    { (yyval.decl) = 0; }
    65746588    break;
     
    65776591
    65786592/* Line 1806 of yacc.c  */
    6579 #line 1284 "parser.yy"
     6593#line 1286 "parser.yy"
    65806594    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    65816595    break;
     
    65846598
    65856599/* Line 1806 of yacc.c  */
    6586 #line 1295 "parser.yy"
     6600#line 1297 "parser.yy"
    65876601    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    65886602    break;
     
    65916605
    65926606/* Line 1806 of yacc.c  */
    6593 #line 1297 "parser.yy"
     6607#line 1299 "parser.yy"
    65946608    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    65956609    break;
     
    65986612
    65996613/* Line 1806 of yacc.c  */
    6600 #line 1299 "parser.yy"
     6614#line 1301 "parser.yy"
    66016615    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    66026616    break;
     
    66056619
    66066620/* Line 1806 of yacc.c  */
    6607 #line 1301 "parser.yy"
     6621#line 1303 "parser.yy"
    66086622    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    66096623    break;
     
    66126626
    66136627/* Line 1806 of yacc.c  */
    6614 #line 1303 "parser.yy"
     6628#line 1305 "parser.yy"
    66156629    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    66166630    break;
     
    66196633
    66206634/* Line 1806 of yacc.c  */
    6621 #line 1305 "parser.yy"
     6635#line 1307 "parser.yy"
    66226636    {
    66236637                        typedefTable.enterScope();
     
    66286642
    66296643/* Line 1806 of yacc.c  */
    6630 #line 1309 "parser.yy"
     6644#line 1311 "parser.yy"
    66316645    {
    66326646                        typedefTable.leaveScope();
     
    66386652
    66396653/* Line 1806 of yacc.c  */
    6640 #line 1318 "parser.yy"
     6654#line 1320 "parser.yy"
    66416655    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66426656    break;
     
    66456659
    66466660/* Line 1806 of yacc.c  */
    6647 #line 1320 "parser.yy"
     6661#line 1322 "parser.yy"
    66486662    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    66496663    break;
     
    66526666
    66536667/* Line 1806 of yacc.c  */
    6654 #line 1331 "parser.yy"
     6668#line 1333 "parser.yy"
    66556669    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66566670    break;
     
    66596673
    66606674/* Line 1806 of yacc.c  */
    6661 #line 1336 "parser.yy"
     6675#line 1338 "parser.yy"
    66626676    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    66636677    break;
     
    66666680
    66676681/* Line 1806 of yacc.c  */
    6668 #line 1338 "parser.yy"
     6682#line 1340 "parser.yy"
    66696683    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    66706684    break;
     
    66736687
    66746688/* Line 1806 of yacc.c  */
    6675 #line 1340 "parser.yy"
     6689#line 1342 "parser.yy"
    66766690    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    66776691    break;
     
    66806694
    66816695/* Line 1806 of yacc.c  */
    6682 #line 1342 "parser.yy"
     6696#line 1344 "parser.yy"
    66836697    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    66846698    break;
     
    66876701
    66886702/* Line 1806 of yacc.c  */
    6689 #line 1345 "parser.yy"
     6703#line 1347 "parser.yy"
    66906704    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
    66916705    break;
     
    66946708
    66956709/* Line 1806 of yacc.c  */
    6696 #line 1347 "parser.yy"
     6710#line 1349 "parser.yy"
    66976711    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    66986712    break;
     
    67016715
    67026716/* Line 1806 of yacc.c  */
    6703 #line 1350 "parser.yy"
     6717#line 1352 "parser.yy"
    67046718    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
    67056719    break;
     
    67086722
    67096723/* Line 1806 of yacc.c  */
    6710 #line 1352 "parser.yy"
     6724#line 1354 "parser.yy"
    67116725    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    67126726    break;
     
    67156729
    67166730/* Line 1806 of yacc.c  */
    6717 #line 1357 "parser.yy"
     6731#line 1359 "parser.yy"
    67186732    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    67196733    break;
     
    67226736
    67236737/* Line 1806 of yacc.c  */
    6724 #line 1359 "parser.yy"
     6738#line 1361 "parser.yy"
    67256739    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    67266740    break;
     
    67296743
    67306744/* Line 1806 of yacc.c  */
    6731 #line 1361 "parser.yy"
     6745#line 1363 "parser.yy"
    67326746    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    67336747    break;
     
    67366750
    67376751/* Line 1806 of yacc.c  */
    6738 #line 1363 "parser.yy"
     6752#line 1365 "parser.yy"
    67396753    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    67406754    break;
     
    67436757
    67446758/* Line 1806 of yacc.c  */
    6745 #line 1365 "parser.yy"
     6759#line 1367 "parser.yy"
    67466760    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    67476761    break;
     
    67506764
    67516765/* Line 1806 of yacc.c  */
    6752 #line 1367 "parser.yy"
     6766#line 1369 "parser.yy"
    67536767    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    67546768    break;
     
    67576771
    67586772/* Line 1806 of yacc.c  */
    6759 #line 1369 "parser.yy"
     6773#line 1371 "parser.yy"
    67606774    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    67616775    break;
     
    67646778
    67656779/* Line 1806 of yacc.c  */
    6766 #line 1371 "parser.yy"
     6780#line 1373 "parser.yy"
    67676781    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    67686782    break;
     
    67716785
    67726786/* Line 1806 of yacc.c  */
    6773 #line 1373 "parser.yy"
     6787#line 1375 "parser.yy"
    67746788    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    67756789    break;
     
    67786792
    67796793/* Line 1806 of yacc.c  */
    6780 #line 1375 "parser.yy"
     6794#line 1377 "parser.yy"
    67816795    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    67826796    break;
     
    67856799
    67866800/* Line 1806 of yacc.c  */
    6787 #line 1377 "parser.yy"
     6801#line 1379 "parser.yy"
    67886802    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    67896803    break;
     
    67926806
    67936807/* Line 1806 of yacc.c  */
    6794 #line 1379 "parser.yy"
     6808#line 1381 "parser.yy"
    67956809    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    67966810    break;
     
    67996813
    68006814/* Line 1806 of yacc.c  */
    6801 #line 1381 "parser.yy"
     6815#line 1383 "parser.yy"
    68026816    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    68036817    break;
     
    68066820
    68076821/* Line 1806 of yacc.c  */
    6808 #line 1388 "parser.yy"
     6822#line 1390 "parser.yy"
    68096823    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68106824    break;
     
    68136827
    68146828/* Line 1806 of yacc.c  */
    6815 #line 1390 "parser.yy"
     6829#line 1392 "parser.yy"
    68166830    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68176831    break;
     
    68206834
    68216835/* Line 1806 of yacc.c  */
    6822 #line 1392 "parser.yy"
     6836#line 1394 "parser.yy"
    68236837    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68246838    break;
     
    68276841
    68286842/* Line 1806 of yacc.c  */
    6829 #line 1394 "parser.yy"
     6843#line 1396 "parser.yy"
    68306844    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    68316845    break;
     
    68346848
    68356849/* Line 1806 of yacc.c  */
    6836 #line 1400 "parser.yy"
     6850#line 1402 "parser.yy"
    68376851    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68386852    break;
     
    68416855
    68426856/* Line 1806 of yacc.c  */
    6843 #line 1407 "parser.yy"
     6857#line 1409 "parser.yy"
    68446858    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68456859    break;
     
    68486862
    68496863/* Line 1806 of yacc.c  */
    6850 #line 1409 "parser.yy"
     6864#line 1411 "parser.yy"
    68516865    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68526866    break;
     
    68556869
    68566870/* Line 1806 of yacc.c  */
    6857 #line 1411 "parser.yy"
     6871#line 1413 "parser.yy"
    68586872    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    68596873    break;
     
    68626876
    68636877/* Line 1806 of yacc.c  */
    6864 #line 1416 "parser.yy"
     6878#line 1418 "parser.yy"
    68656879    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    68666880    break;
     
    68696883
    68706884/* Line 1806 of yacc.c  */
    6871 #line 1418 "parser.yy"
     6885#line 1420 "parser.yy"
    68726886    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    68736887    break;
     
    68766890
    68776891/* Line 1806 of yacc.c  */
    6878 #line 1420 "parser.yy"
     6892#line 1422 "parser.yy"
    68796893    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    68806894    break;
     
    68836897
    68846898/* Line 1806 of yacc.c  */
    6885 #line 1422 "parser.yy"
     6899#line 1424 "parser.yy"
    68866900    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    68876901    break;
     
    68906904
    68916905/* Line 1806 of yacc.c  */
    6892 #line 1428 "parser.yy"
     6906#line 1430 "parser.yy"
    68936907    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68946908    break;
     
    68976911
    68986912/* Line 1806 of yacc.c  */
    6899 #line 1430 "parser.yy"
     6913#line 1432 "parser.yy"
    69006914    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69016915    break;
     
    69046918
    69056919/* Line 1806 of yacc.c  */
    6906 #line 1432 "parser.yy"
     6920#line 1434 "parser.yy"
    69076921    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69086922    break;
     
    69116925
    69126926/* Line 1806 of yacc.c  */
    6913 #line 1438 "parser.yy"
     6927#line 1440 "parser.yy"
    69146928    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69156929    break;
     
    69186932
    69196933/* Line 1806 of yacc.c  */
    6920 #line 1440 "parser.yy"
     6934#line 1442 "parser.yy"
    69216935    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69226936    break;
     
    69256939
    69266940/* Line 1806 of yacc.c  */
    6927 #line 1446 "parser.yy"
     6941#line 1448 "parser.yy"
    69286942    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69296943    break;
     
    69326946
    69336947/* Line 1806 of yacc.c  */
    6934 #line 1448 "parser.yy"
     6948#line 1450 "parser.yy"
    69356949    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69366950    break;
     
    69396953
    69406954/* Line 1806 of yacc.c  */
    6941 #line 1450 "parser.yy"
     6955#line 1452 "parser.yy"
    69426956    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69436957    break;
     
    69466960
    69476961/* Line 1806 of yacc.c  */
    6948 #line 1455 "parser.yy"
     6962#line 1457 "parser.yy"
    69496963    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    69506964    break;
     
    69536967
    69546968/* Line 1806 of yacc.c  */
    6955 #line 1457 "parser.yy"
     6969#line 1459 "parser.yy"
    69566970    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69576971    break;
     
    69606974
    69616975/* Line 1806 of yacc.c  */
    6962 #line 1459 "parser.yy"
     6976#line 1461 "parser.yy"
    69636977    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69646978    break;
     
    69676981
    69686982/* Line 1806 of yacc.c  */
    6969 #line 1469 "parser.yy"
     6983#line 1471 "parser.yy"
    69706984    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
    69716985    break;
     
    69746988
    69756989/* Line 1806 of yacc.c  */
    6976 #line 1471 "parser.yy"
     6990#line 1473 "parser.yy"
    69776991    {
    69786992                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    69846998
    69856999/* Line 1806 of yacc.c  */
    6986 #line 1476 "parser.yy"
     7000#line 1478 "parser.yy"
    69877001    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    69887002    break;
     
    69917005
    69927006/* Line 1806 of yacc.c  */
    6993 #line 1478 "parser.yy"
     7007#line 1480 "parser.yy"
    69947008    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
    69957009    break;
     
    69987012
    69997013/* Line 1806 of yacc.c  */
    7000 #line 1480 "parser.yy"
     7014#line 1482 "parser.yy"
    70017015    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
    70027016    break;
     
    70057019
    70067020/* Line 1806 of yacc.c  */
    7007 #line 1482 "parser.yy"
     7021#line 1484 "parser.yy"
    70087022    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    70097023    break;
     
    70127026
    70137027/* Line 1806 of yacc.c  */
    7014 #line 1487 "parser.yy"
     7028#line 1489 "parser.yy"
    70157029    { (yyval.aggKey) = DeclarationNode::Struct; }
    70167030    break;
     
    70197033
    70207034/* Line 1806 of yacc.c  */
    7021 #line 1489 "parser.yy"
     7035#line 1491 "parser.yy"
    70227036    { (yyval.aggKey) = DeclarationNode::Union; }
    70237037    break;
     
    70267040
    70277041/* Line 1806 of yacc.c  */
    7028 #line 1494 "parser.yy"
     7042#line 1496 "parser.yy"
    70297043    { (yyval.decl) = 0; }
    70307044    break;
     
    70337047
    70347048/* Line 1806 of yacc.c  */
    7035 #line 1496 "parser.yy"
     7049#line 1498 "parser.yy"
    70367050    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    70377051    break;
     
    70407054
    70417055/* Line 1806 of yacc.c  */
    7042 #line 1502 "parser.yy"
     7056#line 1504 "parser.yy"
    70437057    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
    70447058    break;
     
    70477061
    70487062/* Line 1806 of yacc.c  */
    7049 #line 1505 "parser.yy"
     7063#line 1507 "parser.yy"
    70507064    {   // mark all fields in list
    70517065                        for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     
    70587072
    70597073/* Line 1806 of yacc.c  */
    7060 #line 1515 "parser.yy"
     7074#line 1517 "parser.yy"
    70617075    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    70627076    break;
     
    70657079
    70667080/* Line 1806 of yacc.c  */
    7067 #line 1517 "parser.yy"
     7081#line 1519 "parser.yy"
    70687082    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    70697083    break;
     
    70727086
    70737087/* Line 1806 of yacc.c  */
    7074 #line 1519 "parser.yy"
     7088#line 1521 "parser.yy"
    70757089    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    70767090    break;
     
    70797093
    70807094/* Line 1806 of yacc.c  */
    7081 #line 1524 "parser.yy"
     7095#line 1526 "parser.yy"
    70827096    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    70837097    break;
     
    70867100
    70877101/* Line 1806 of yacc.c  */
    7088 #line 1526 "parser.yy"
     7102#line 1528 "parser.yy"
    70897103    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    70907104    break;
     
    70937107
    70947108/* Line 1806 of yacc.c  */
    7095 #line 1531 "parser.yy"
     7109#line 1533 "parser.yy"
    70967110    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    70977111    break;
     
    71007114
    71017115/* Line 1806 of yacc.c  */
    7102 #line 1533 "parser.yy"
     7116#line 1535 "parser.yy"
    71037117    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    71047118    break;
     
    71077121
    71087122/* Line 1806 of yacc.c  */
    7109 #line 1536 "parser.yy"
     7123#line 1538 "parser.yy"
    71107124    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71117125    break;
     
    71147128
    71157129/* Line 1806 of yacc.c  */
    7116 #line 1539 "parser.yy"
     7130#line 1541 "parser.yy"
    71177131    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71187132    break;
     
    71217135
    71227136/* Line 1806 of yacc.c  */
    7123 #line 1545 "parser.yy"
     7137#line 1547 "parser.yy"
    71247138    { (yyval.en) = 0; }
    71257139    break;
     
    71287142
    71297143/* Line 1806 of yacc.c  */
    7130 #line 1547 "parser.yy"
     7144#line 1549 "parser.yy"
    71317145    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    71327146    break;
     
    71357149
    71367150/* Line 1806 of yacc.c  */
    7137 #line 1552 "parser.yy"
     7151#line 1554 "parser.yy"
    71387152    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71397153    break;
     
    71427156
    71437157/* Line 1806 of yacc.c  */
    7144 #line 1561 "parser.yy"
     7158#line 1563 "parser.yy"
    71457159    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    71467160    break;
     
    71497163
    71507164/* Line 1806 of yacc.c  */
    7151 #line 1563 "parser.yy"
     7165#line 1565 "parser.yy"
    71527166    {
    71537167                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    71597173
    71607174/* Line 1806 of yacc.c  */
    7161 #line 1568 "parser.yy"
     7175#line 1570 "parser.yy"
    71627176    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    71637177    break;
     
    71667180
    71677181/* Line 1806 of yacc.c  */
    7168 #line 1570 "parser.yy"
     7182#line 1572 "parser.yy"
    71697183    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
    71707184    break;
     
    71737187
    71747188/* Line 1806 of yacc.c  */
    7175 #line 1575 "parser.yy"
     7189#line 1577 "parser.yy"
    71767190    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    71777191    break;
     
    71807194
    71817195/* Line 1806 of yacc.c  */
    7182 #line 1577 "parser.yy"
     7196#line 1579 "parser.yy"
    71837197    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    71847198    break;
     
    71877201
    71887202/* Line 1806 of yacc.c  */
    7189 #line 1582 "parser.yy"
     7203#line 1584 "parser.yy"
    71907204    { (yyval.en) = 0; }
    71917205    break;
     
    71947208
    71957209/* Line 1806 of yacc.c  */
    7196 #line 1584 "parser.yy"
     7210#line 1586 "parser.yy"
    71977211    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71987212    break;
     
    72017215
    72027216/* Line 1806 of yacc.c  */
    7203 #line 1591 "parser.yy"
     7217#line 1593 "parser.yy"
    72047218    { (yyval.decl) = 0; }
    72057219    break;
     
    72087222
    72097223/* Line 1806 of yacc.c  */
    7210 #line 1599 "parser.yy"
     7224#line 1601 "parser.yy"
    72117225    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72127226    break;
    72137227
    72147228  case 405:
    7215 
    7216 /* Line 1806 of yacc.c  */
    7217 #line 1601 "parser.yy"
    7218     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7219     break;
    7220 
    7221   case 406:
    72227229
    72237230/* Line 1806 of yacc.c  */
     
    72267233    break;
    72277234
     7235  case 406:
     7236
     7237/* Line 1806 of yacc.c  */
     7238#line 1605 "parser.yy"
     7239    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7240    break;
     7241
    72287242  case 408:
    7229 
    7230 /* Line 1806 of yacc.c  */
    7231 #line 1611 "parser.yy"
    7232     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7233     break;
    7234 
    7235   case 409:
    72367243
    72377244/* Line 1806 of yacc.c  */
     
    72407247    break;
    72417248
     7249  case 409:
     7250
     7251/* Line 1806 of yacc.c  */
     7252#line 1615 "parser.yy"
     7253    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7254    break;
     7255
    72427256  case 410:
    72437257
    72447258/* Line 1806 of yacc.c  */
    7245 #line 1615 "parser.yy"
     7259#line 1617 "parser.yy"
    72467260    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    72477261    break;
     
    72507264
    72517265/* Line 1806 of yacc.c  */
    7252 #line 1621 "parser.yy"
     7266#line 1623 "parser.yy"
    72537267    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72547268    break;
     
    72577271
    72587272/* Line 1806 of yacc.c  */
    7259 #line 1626 "parser.yy"
     7273#line 1628 "parser.yy"
    72607274    { (yyval.decl) = 0; }
    72617275    break;
     
    72647278
    72657279/* Line 1806 of yacc.c  */
    7266 #line 1633 "parser.yy"
     7280#line 1635 "parser.yy"
    72677281    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72687282    break;
    72697283
    72707284  case 419:
    7271 
    7272 /* Line 1806 of yacc.c  */
    7273 #line 1640 "parser.yy"
    7274     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7275     break;
    7276 
    7277   case 420:
    72787285
    72797286/* Line 1806 of yacc.c  */
     
    72827289    break;
    72837290
     7291  case 420:
     7292
     7293/* Line 1806 of yacc.c  */
     7294#line 1644 "parser.yy"
     7295    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7296    break;
     7297
    72847298  case 422:
    72857299
    72867300/* Line 1806 of yacc.c  */
    7287 #line 1651 "parser.yy"
     7301#line 1653 "parser.yy"
    72887302    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    72897303    break;
     
    72927306
    72937307/* Line 1806 of yacc.c  */
    7294 #line 1654 "parser.yy"
     7308#line 1656 "parser.yy"
    72957309    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    72967310    break;
     
    72997313
    73007314/* Line 1806 of yacc.c  */
    7301 #line 1656 "parser.yy"
     7315#line 1658 "parser.yy"
    73027316    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    73037317    break;
     
    73067320
    73077321/* Line 1806 of yacc.c  */
    7308 #line 1666 "parser.yy"
     7322#line 1668 "parser.yy"
    73097323    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73107324    break;
     
    73137327
    73147328/* Line 1806 of yacc.c  */
    7315 #line 1672 "parser.yy"
     7329#line 1674 "parser.yy"
    73167330    {
    73177331                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73237337
    73247338/* Line 1806 of yacc.c  */
    7325 #line 1677 "parser.yy"
     7339#line 1679 "parser.yy"
    73267340    {
    73277341                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73337347
    73347348/* Line 1806 of yacc.c  */
    7335 #line 1686 "parser.yy"
     7349#line 1688 "parser.yy"
    73367350    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73377351    break;
     
    73407354
    73417355/* Line 1806 of yacc.c  */
    7342 #line 1695 "parser.yy"
     7356#line 1697 "parser.yy"
    73437357    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    73447358    break;
     
    73477361
    73487362/* Line 1806 of yacc.c  */
    7349 #line 1697 "parser.yy"
     7363#line 1699 "parser.yy"
    73507364    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    73517365    break;
     
    73547368
    73557369/* Line 1806 of yacc.c  */
    7356 #line 1722 "parser.yy"
     7370#line 1724 "parser.yy"
    73577371    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73587372    break;
     
    73617375
    73627376/* Line 1806 of yacc.c  */
    7363 #line 1730 "parser.yy"
     7377#line 1732 "parser.yy"
    73647378    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73657379    break;
     
    73687382
    73697383/* Line 1806 of yacc.c  */
    7370 #line 1735 "parser.yy"
     7384#line 1737 "parser.yy"
    73717385    { (yyval.in) = 0; }
    73727386    break;
     
    73757389
    73767390/* Line 1806 of yacc.c  */
    7377 #line 1737 "parser.yy"
     7391#line 1739 "parser.yy"
    73787392    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    73797393    break;
     
    73827396
    73837397/* Line 1806 of yacc.c  */
    7384 #line 1739 "parser.yy"
     7398#line 1741 "parser.yy"
    73857399    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
    73867400    break;
     
    73897403
    73907404/* Line 1806 of yacc.c  */
    7391 #line 1743 "parser.yy"
     7405#line 1745 "parser.yy"
    73927406    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    73937407    break;
     
    73967410
    73977411/* Line 1806 of yacc.c  */
    7398 #line 1744 "parser.yy"
     7412#line 1746 "parser.yy"
    73997413    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    74007414    break;
     
    74037417
    74047418/* Line 1806 of yacc.c  */
    7405 #line 1749 "parser.yy"
     7419#line 1751 "parser.yy"
    74067420    { (yyval.in) = 0; }
    74077421    break;
     
    74107424
    74117425/* Line 1806 of yacc.c  */
    7412 #line 1751 "parser.yy"
     7426#line 1753 "parser.yy"
    74137427    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    74147428    break;
     
    74177431
    74187432/* Line 1806 of yacc.c  */
    7419 #line 1752 "parser.yy"
     7433#line 1754 "parser.yy"
    74207434    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
    74217435    break;
     
    74247438
    74257439/* Line 1806 of yacc.c  */
    7426 #line 1754 "parser.yy"
     7440#line 1756 "parser.yy"
    74277441    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    74287442    break;
     
    74317445
    74327446/* Line 1806 of yacc.c  */
    7433 #line 1770 "parser.yy"
     7447#line 1772 "parser.yy"
    74347448    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
    74357449    break;
     
    74387452
    74397453/* Line 1806 of yacc.c  */
    7440 #line 1776 "parser.yy"
     7454#line 1778 "parser.yy"
    74417455    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
    74427456    break;
     
    74457459
    74467460/* Line 1806 of yacc.c  */
    7447 #line 1782 "parser.yy"
     7461#line 1784 "parser.yy"
    74487462    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
    74497463    break;
    74507464
    74517465  case 468:
    7452 
    7453 /* Line 1806 of yacc.c  */
    7454 #line 1785 "parser.yy"
    7455     { (yyval.en) = (yyvsp[(3) - (5)].en); }
    7456     break;
    7457 
    7458   case 469:
    74597466
    74607467/* Line 1806 of yacc.c  */
     
    74637470    break;
    74647471
     7472  case 469:
     7473
     7474/* Line 1806 of yacc.c  */
     7475#line 1789 "parser.yy"
     7476    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     7477    break;
     7478
    74657479  case 470:
    74667480
    74677481/* Line 1806 of yacc.c  */
    7468 #line 1789 "parser.yy"
     7482#line 1791 "parser.yy"
    74697483    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
    74707484    break;
     
    74737487
    74747488/* Line 1806 of yacc.c  */
    7475 #line 1791 "parser.yy"
     7489#line 1793 "parser.yy"
    74767490    { (yyval.en) = (yyvsp[(4) - (6)].en); }
    74777491    break;
     
    74807494
    74817495/* Line 1806 of yacc.c  */
    7482 #line 1815 "parser.yy"
     7496#line 1817 "parser.yy"
    74837497    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    74847498    break;
     
    74877501
    74887502/* Line 1806 of yacc.c  */
    7489 #line 1817 "parser.yy"
     7503#line 1819 "parser.yy"
    74907504    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    74917505    break;
     
    74947508
    74957509/* Line 1806 of yacc.c  */
    7496 #line 1819 "parser.yy"
     7510#line 1821 "parser.yy"
    74977511    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    74987512    break;
     
    75017515
    75027516/* Line 1806 of yacc.c  */
    7503 #line 1825 "parser.yy"
     7517#line 1827 "parser.yy"
    75047518    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75057519    break;
     
    75087522
    75097523/* Line 1806 of yacc.c  */
    7510 #line 1827 "parser.yy"
     7524#line 1829 "parser.yy"
    75117525    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    75127526    break;
     
    75157529
    75167530/* Line 1806 of yacc.c  */
    7517 #line 1832 "parser.yy"
     7531#line 1834 "parser.yy"
    75187532    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    75197533    break;
     
    75227536
    75237537/* Line 1806 of yacc.c  */
    7524 #line 1838 "parser.yy"
     7538#line 1840 "parser.yy"
    75257539    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    75267540    break;
     
    75297543
    75307544/* Line 1806 of yacc.c  */
    7531 #line 1843 "parser.yy"
     7545#line 1845 "parser.yy"
    75327546    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    75337547    break;
     
    75367550
    75377551/* Line 1806 of yacc.c  */
    7538 #line 1845 "parser.yy"
     7552#line 1847 "parser.yy"
    75397553    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    75407554    break;
     
    75437557
    75447558/* Line 1806 of yacc.c  */
    7545 #line 1851 "parser.yy"
     7559#line 1853 "parser.yy"
    75467560    { (yyval.tclass) = DeclarationNode::Type; }
    75477561    break;
     
    75507564
    75517565/* Line 1806 of yacc.c  */
    7552 #line 1853 "parser.yy"
     7566#line 1855 "parser.yy"
    75537567    { (yyval.tclass) = DeclarationNode::Ftype; }
    75547568    break;
     
    75577571
    75587572/* Line 1806 of yacc.c  */
    7559 #line 1855 "parser.yy"
     7573#line 1857 "parser.yy"
    75607574    { (yyval.tclass) = DeclarationNode::Dtype; }
    75617575    break;
     
    75647578
    75657579/* Line 1806 of yacc.c  */
    7566 #line 1860 "parser.yy"
     7580#line 1862 "parser.yy"
    75677581    { (yyval.decl) = 0; }
    75687582    break;
     
    75717585
    75727586/* Line 1806 of yacc.c  */
    7573 #line 1862 "parser.yy"
     7587#line 1864 "parser.yy"
    75747588    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    75757589    break;
     
    75787592
    75797593/* Line 1806 of yacc.c  */
    7580 #line 1867 "parser.yy"
     7594#line 1869 "parser.yy"
    75817595    {
    75827596                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    75887602
    75897603/* Line 1806 of yacc.c  */
    7590 #line 1872 "parser.yy"
     7604#line 1874 "parser.yy"
    75917605    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    75927606    break;
     
    75957609
    75967610/* Line 1806 of yacc.c  */
    7597 #line 1874 "parser.yy"
     7611#line 1876 "parser.yy"
    75987612    { (yyval.decl) = 0; }
    75997613    break;
     
    76027616
    76037617/* Line 1806 of yacc.c  */
    7604 #line 1879 "parser.yy"
     7618#line 1881 "parser.yy"
    76057619    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
    76067620    break;
     
    76097623
    76107624/* Line 1806 of yacc.c  */
    7611 #line 1882 "parser.yy"
     7625#line 1884 "parser.yy"
    76127626    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
    76137627    break;
     
    76167630
    76177631/* Line 1806 of yacc.c  */
    7618 #line 1884 "parser.yy"
     7632#line 1886 "parser.yy"
    76197633    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
    76207634    break;
     
    76237637
    76247638/* Line 1806 of yacc.c  */
    7625 #line 1889 "parser.yy"
     7639#line 1891 "parser.yy"
    76267640    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    76277641    break;
     
    76307644
    76317645/* Line 1806 of yacc.c  */
    7632 #line 1891 "parser.yy"
     7646#line 1893 "parser.yy"
    76337647    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    76347648    break;
     
    76377651
    76387652/* Line 1806 of yacc.c  */
    7639 #line 1893 "parser.yy"
     7653#line 1895 "parser.yy"
    76407654    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    76417655    break;
     
    76447658
    76457659/* Line 1806 of yacc.c  */
    7646 #line 1898 "parser.yy"
     7660#line 1900 "parser.yy"
    76477661    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    76487662    break;
     
    76517665
    76527666/* Line 1806 of yacc.c  */
    7653 #line 1900 "parser.yy"
     7667#line 1902 "parser.yy"
    76547668    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    76557669    break;
     
    76587672
    76597673/* Line 1806 of yacc.c  */
    7660 #line 1905 "parser.yy"
     7674#line 1907 "parser.yy"
    76617675    {
    76627676                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    76687682
    76697683/* Line 1806 of yacc.c  */
    7670 #line 1910 "parser.yy"
     7684#line 1912 "parser.yy"
    76717685    {
    76727686                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    76787692
    76797693/* Line 1806 of yacc.c  */
    7680 #line 1918 "parser.yy"
     7694#line 1920 "parser.yy"
    76817695    {
    76827696                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    76887702
    76897703/* Line 1806 of yacc.c  */
    7690 #line 1923 "parser.yy"
     7704#line 1925 "parser.yy"
    76917705    {
    76927706                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    76987712
    76997713/* Line 1806 of yacc.c  */
    7700 #line 1928 "parser.yy"
     7714#line 1930 "parser.yy"
    77017715    {
    77027716                        typedefTable.leaveTrait();
     
    77097723
    77107724/* Line 1806 of yacc.c  */
    7711 #line 1938 "parser.yy"
     7725#line 1940 "parser.yy"
    77127726    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    77137727    break;
     
    77167730
    77177731/* Line 1806 of yacc.c  */
    7718 #line 1948 "parser.yy"
     7732#line 1950 "parser.yy"
    77197733    {
    77207734                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77267740
    77277741/* Line 1806 of yacc.c  */
    7728 #line 1953 "parser.yy"
     7742#line 1955 "parser.yy"
    77297743    {
    77307744                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77367750
    77377751/* Line 1806 of yacc.c  */
    7738 #line 1958 "parser.yy"
     7752#line 1960 "parser.yy"
    77397753    {
    77407754                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    77467760
    77477761/* Line 1806 of yacc.c  */
    7748 #line 1966 "parser.yy"
     7762#line 1968 "parser.yy"
    77497763    {
    77507764                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77567770
    77577771/* Line 1806 of yacc.c  */
    7758 #line 1971 "parser.yy"
     7772#line 1973 "parser.yy"
    77597773    {
    77607774                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77667780
    77677781/* Line 1806 of yacc.c  */
    7768 #line 1981 "parser.yy"
     7782#line 1983 "parser.yy"
    77697783    {}
    77707784    break;
     
    77737787
    77747788/* Line 1806 of yacc.c  */
    7775 #line 1983 "parser.yy"
     7789#line 1985 "parser.yy"
    77767790    { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);    }
    77777791    break;
     
    77807794
    77817795/* Line 1806 of yacc.c  */
    7782 #line 1989 "parser.yy"
     7796#line 1991 "parser.yy"
    77837797    { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    77847798    break;
     
    77877801
    77887802/* Line 1806 of yacc.c  */
    7789 #line 1994 "parser.yy"
     7803#line 1996 "parser.yy"
    77907804    { (yyval.decl) = 0; }
    77917805    break;
     
    77947808
    77957809/* Line 1806 of yacc.c  */
    7796 #line 2002 "parser.yy"
     7810#line 2004 "parser.yy"
    77977811    {}
    77987812    break;
     
    78017815
    78027816/* Line 1806 of yacc.c  */
    7803 #line 2004 "parser.yy"
     7817#line 2006 "parser.yy"
    78047818    {
    78057819                        linkageStack.push( linkage );                           // handle nested extern "C"/"Cforall"
     
    78117825
    78127826/* Line 1806 of yacc.c  */
    7813 #line 2009 "parser.yy"
     7827#line 2011 "parser.yy"
    78147828    {
    78157829                        linkage = linkageStack.top();
     
    78227836
    78237837/* Line 1806 of yacc.c  */
    7824 #line 2015 "parser.yy"
     7838#line 2017 "parser.yy"
    78257839    {   // mark all fields in list
    78267840                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     
    78337847
    78347848/* Line 1806 of yacc.c  */
    7835 #line 2030 "parser.yy"
     7849#line 2032 "parser.yy"
    78367850    {
    78377851                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78447858
    78457859/* Line 1806 of yacc.c  */
    7846 #line 2036 "parser.yy"
     7860#line 2038 "parser.yy"
    78477861    {
    78487862                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78557869
    78567870/* Line 1806 of yacc.c  */
    7857 #line 2045 "parser.yy"
     7871#line 2047 "parser.yy"
    78587872    {
    78597873                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78667880
    78677881/* Line 1806 of yacc.c  */
    7868 #line 2051 "parser.yy"
     7882#line 2053 "parser.yy"
    78697883    {
    78707884                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78777891
    78787892/* Line 1806 of yacc.c  */
    7879 #line 2057 "parser.yy"
     7893#line 2059 "parser.yy"
    78807894    {
    78817895                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78887902
    78897903/* Line 1806 of yacc.c  */
    7890 #line 2063 "parser.yy"
     7904#line 2065 "parser.yy"
    78917905    {
    78927906                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78997913
    79007914/* Line 1806 of yacc.c  */
    7901 #line 2069 "parser.yy"
     7915#line 2071 "parser.yy"
    79027916    {
    79037917                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79107924
    79117925/* Line 1806 of yacc.c  */
    7912 #line 2077 "parser.yy"
     7926#line 2079 "parser.yy"
    79137927    {
    79147928                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79217935
    79227936/* Line 1806 of yacc.c  */
    7923 #line 2083 "parser.yy"
     7937#line 2085 "parser.yy"
    79247938    {
    79257939                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79327946
    79337947/* Line 1806 of yacc.c  */
    7934 #line 2091 "parser.yy"
     7948#line 2093 "parser.yy"
    79357949    {
    79367950                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79437957
    79447958/* Line 1806 of yacc.c  */
    7945 #line 2097 "parser.yy"
     7959#line 2099 "parser.yy"
    79467960    {
    79477961                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79547968
    79557969/* Line 1806 of yacc.c  */
    7956 #line 2112 "parser.yy"
     7970#line 2114 "parser.yy"
    79577971    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    79587972    break;
     
    79617975
    79627976/* Line 1806 of yacc.c  */
    7963 #line 2117 "parser.yy"
     7977#line 2119 "parser.yy"
    79647978    { delete (yyvsp[(3) - (5)].str); }
    79657979    break;
     
    79687982
    79697983/* Line 1806 of yacc.c  */
    7970 #line 2122 "parser.yy"
     7984#line 2124 "parser.yy"
    79717985    { (yyval.decl) = 0; }
    79727986    break;
     
    79757989
    79767990/* Line 1806 of yacc.c  */
    7977 #line 2129 "parser.yy"
     7991#line 2131 "parser.yy"
    79787992    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    79797993    break;
     
    79827996
    79837997/* Line 1806 of yacc.c  */
    7984 #line 2135 "parser.yy"
     7998#line 2137 "parser.yy"
    79857999    { (yyval.decl) = 0; }
    79868000    break;
     
    79898003
    79908004/* Line 1806 of yacc.c  */
    7991 #line 2146 "parser.yy"
     8005#line 2148 "parser.yy"
    79928006    { delete (yyvsp[(3) - (4)].en); }
    79938007    break;
     
    79968010
    79978011/* Line 1806 of yacc.c  */
    7998 #line 2150 "parser.yy"
     8012#line 2152 "parser.yy"
    79998013    { delete (yyvsp[(1) - (1)].tok); }
    80008014    break;
    80018015
    80028016  case 557:
    8003 
    8004 /* Line 1806 of yacc.c  */
    8005 #line 2151 "parser.yy"
    8006     { delete (yyvsp[(1) - (1)].decl); }
    8007     break;
    8008 
    8009   case 558:
    8010 
    8011 /* Line 1806 of yacc.c  */
    8012 #line 2152 "parser.yy"
    8013     { delete (yyvsp[(1) - (1)].decl); }
    8014     break;
    8015 
    8016   case 559:
    80178017
    80188018/* Line 1806 of yacc.c  */
     
    80218021    break;
    80228022
     8023  case 558:
     8024
     8025/* Line 1806 of yacc.c  */
     8026#line 2154 "parser.yy"
     8027    { delete (yyvsp[(1) - (1)].decl); }
     8028    break;
     8029
     8030  case 559:
     8031
     8032/* Line 1806 of yacc.c  */
     8033#line 2155 "parser.yy"
     8034    { delete (yyvsp[(1) - (1)].decl); }
     8035    break;
     8036
    80238037  case 560:
    80248038
    80258039/* Line 1806 of yacc.c  */
    8026 #line 2188 "parser.yy"
     8040#line 2190 "parser.yy"
    80278041    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80288042    break;
    80298043
    80308044  case 562:
    8031 
    8032 /* Line 1806 of yacc.c  */
    8033 #line 2191 "parser.yy"
    8034     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8035     break;
    8036 
    8037   case 563:
    80388045
    80398046/* Line 1806 of yacc.c  */
     
    80428049    break;
    80438050
     8051  case 563:
     8052
     8053/* Line 1806 of yacc.c  */
     8054#line 2195 "parser.yy"
     8055    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8056    break;
     8057
    80448058  case 564:
    80458059
    80468060/* Line 1806 of yacc.c  */
    8047 #line 2198 "parser.yy"
     8061#line 2200 "parser.yy"
    80488062    {
    80498063                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    80558069
    80568070/* Line 1806 of yacc.c  */
    8057 #line 2203 "parser.yy"
     8071#line 2205 "parser.yy"
    80588072    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80598073    break;
     
    80628076
    80638077/* Line 1806 of yacc.c  */
    8064 #line 2208 "parser.yy"
     8078#line 2210 "parser.yy"
    80658079    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    80668080    break;
     
    80698083
    80708084/* Line 1806 of yacc.c  */
    8071 #line 2210 "parser.yy"
     8085#line 2212 "parser.yy"
    80728086    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    80738087    break;
     
    80768090
    80778091/* Line 1806 of yacc.c  */
    8078 #line 2212 "parser.yy"
     8092#line 2214 "parser.yy"
    80798093    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80808094    break;
     
    80838097
    80848098/* Line 1806 of yacc.c  */
    8085 #line 2217 "parser.yy"
     8099#line 2219 "parser.yy"
    80868100    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    80878101    break;
    80888102
    80898103  case 570:
    8090 
    8091 /* Line 1806 of yacc.c  */
    8092 #line 2219 "parser.yy"
    8093     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8094     break;
    8095 
    8096   case 571:
    80978104
    80988105/* Line 1806 of yacc.c  */
     
    81018108    break;
    81028109
     8110  case 571:
     8111
     8112/* Line 1806 of yacc.c  */
     8113#line 2223 "parser.yy"
     8114    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8115    break;
     8116
    81038117  case 572:
    81048118
    81058119/* Line 1806 of yacc.c  */
    8106 #line 2223 "parser.yy"
     8120#line 2225 "parser.yy"
    81078121    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81088122    break;
     
    81118125
    81128126/* Line 1806 of yacc.c  */
    8113 #line 2228 "parser.yy"
     8127#line 2230 "parser.yy"
    81148128    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81158129    break;
     
    81188132
    81198133/* Line 1806 of yacc.c  */
    8120 #line 2230 "parser.yy"
     8134#line 2232 "parser.yy"
    81218135    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81228136    break;
     
    81258139
    81268140/* Line 1806 of yacc.c  */
    8127 #line 2239 "parser.yy"
     8141#line 2241 "parser.yy"
    81288142    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81298143    break;
     
    81328146
    81338147/* Line 1806 of yacc.c  */
    8134 #line 2242 "parser.yy"
     8148#line 2244 "parser.yy"
    81358149    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81368150    break;
     
    81398153
    81408154/* Line 1806 of yacc.c  */
    8141 #line 2247 "parser.yy"
     8155#line 2249 "parser.yy"
    81428156    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    81438157    break;
     
    81468160
    81478161/* Line 1806 of yacc.c  */
    8148 #line 2249 "parser.yy"
     8162#line 2251 "parser.yy"
    81498163    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81508164    break;
     
    81538167
    81548168/* Line 1806 of yacc.c  */
    8155 #line 2251 "parser.yy"
     8169#line 2253 "parser.yy"
    81568170    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81578171    break;
     
    81608174
    81618175/* Line 1806 of yacc.c  */
    8162 #line 2256 "parser.yy"
     8176#line 2258 "parser.yy"
    81638177    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81648178    break;
     
    81678181
    81688182/* Line 1806 of yacc.c  */
    8169 #line 2258 "parser.yy"
     8183#line 2260 "parser.yy"
    81708184    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81718185    break;
     
    81748188
    81758189/* Line 1806 of yacc.c  */
    8176 #line 2260 "parser.yy"
     8190#line 2262 "parser.yy"
    81778191    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81788192    break;
    81798193
    81808194  case 584:
    8181 
    8182 /* Line 1806 of yacc.c  */
    8183 #line 2265 "parser.yy"
    8184     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8185     break;
    8186 
    8187   case 585:
    81888195
    81898196/* Line 1806 of yacc.c  */
     
    81928199    break;
    81938200
     8201  case 585:
     8202
     8203/* Line 1806 of yacc.c  */
     8204#line 2269 "parser.yy"
     8205    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8206    break;
     8207
    81948208  case 586:
    81958209
    81968210/* Line 1806 of yacc.c  */
    8197 #line 2269 "parser.yy"
     8211#line 2271 "parser.yy"
    81988212    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81998213    break;
     
    82028216
    82038217/* Line 1806 of yacc.c  */
    8204 #line 2284 "parser.yy"
     8218#line 2286 "parser.yy"
    82058219    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    82068220    break;
     
    82098223
    82108224/* Line 1806 of yacc.c  */
    8211 #line 2286 "parser.yy"
     8225#line 2288 "parser.yy"
    82128226    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    82138227    break;
     
    82168230
    82178231/* Line 1806 of yacc.c  */
    8218 #line 2288 "parser.yy"
     8232#line 2290 "parser.yy"
    82198233    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82208234    break;
     
    82238237
    82248238/* Line 1806 of yacc.c  */
    8225 #line 2293 "parser.yy"
     8239#line 2295 "parser.yy"
    82268240    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82278241    break;
     
    82308244
    82318245/* Line 1806 of yacc.c  */
    8232 #line 2295 "parser.yy"
     8246#line 2297 "parser.yy"
    82338247    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82348248    break;
     
    82378251
    82388252/* Line 1806 of yacc.c  */
    8239 #line 2297 "parser.yy"
     8253#line 2299 "parser.yy"
    82408254    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82418255    break;
    82428256
    82438257  case 596:
    8244 
    8245 /* Line 1806 of yacc.c  */
    8246 #line 2302 "parser.yy"
    8247     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8248     break;
    8249 
    8250   case 597:
    82518258
    82528259/* Line 1806 of yacc.c  */
     
    82558262    break;
    82568263
     8264  case 597:
     8265
     8266/* Line 1806 of yacc.c  */
     8267#line 2306 "parser.yy"
     8268    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8269    break;
     8270
    82578271  case 598:
    82588272
    82598273/* Line 1806 of yacc.c  */
    8260 #line 2306 "parser.yy"
     8274#line 2308 "parser.yy"
    82618275    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82628276    break;
     
    82658279
    82668280/* Line 1806 of yacc.c  */
    8267 #line 2321 "parser.yy"
     8281#line 2323 "parser.yy"
    82688282    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82698283    break;
    82708284
    82718285  case 601:
    8272 
    8273 /* Line 1806 of yacc.c  */
    8274 #line 2324 "parser.yy"
    8275     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8276     break;
    8277 
    8278   case 602:
    82798286
    82808287/* Line 1806 of yacc.c  */
     
    82838290    break;
    82848291
     8292  case 602:
     8293
     8294/* Line 1806 of yacc.c  */
     8295#line 2328 "parser.yy"
     8296    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8297    break;
     8298
    82858299  case 604:
    82868300
    82878301/* Line 1806 of yacc.c  */
    8288 #line 2332 "parser.yy"
     8302#line 2334 "parser.yy"
    82898303    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82908304    break;
     
    82938307
    82948308/* Line 1806 of yacc.c  */
    8295 #line 2337 "parser.yy"
     8309#line 2339 "parser.yy"
    82968310    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82978311    break;
     
    83008314
    83018315/* Line 1806 of yacc.c  */
    8302 #line 2339 "parser.yy"
     8316#line 2341 "parser.yy"
    83038317    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83048318    break;
     
    83078321
    83088322/* Line 1806 of yacc.c  */
    8309 #line 2341 "parser.yy"
     8323#line 2343 "parser.yy"
    83108324    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83118325    break;
     
    83148328
    83158329/* Line 1806 of yacc.c  */
    8316 #line 2346 "parser.yy"
     8330#line 2348 "parser.yy"
    83178331    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83188332    break;
    83198333
    83208334  case 609:
    8321 
    8322 /* Line 1806 of yacc.c  */
    8323 #line 2348 "parser.yy"
    8324     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8325     break;
    8326 
    8327   case 610:
    83288335
    83298336/* Line 1806 of yacc.c  */
     
    83328339    break;
    83338340
     8341  case 610:
     8342
     8343/* Line 1806 of yacc.c  */
     8344#line 2352 "parser.yy"
     8345    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8346    break;
     8347
    83348348  case 611:
    83358349
    83368350/* Line 1806 of yacc.c  */
    8337 #line 2352 "parser.yy"
     8351#line 2354 "parser.yy"
    83388352    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83398353    break;
     
    83428356
    83438357/* Line 1806 of yacc.c  */
    8344 #line 2357 "parser.yy"
     8358#line 2359 "parser.yy"
    83458359    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83468360    break;
     
    83498363
    83508364/* Line 1806 of yacc.c  */
    8351 #line 2359 "parser.yy"
     8365#line 2361 "parser.yy"
    83528366    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83538367    break;
     
    83568370
    83578371/* Line 1806 of yacc.c  */
    8358 #line 2361 "parser.yy"
     8372#line 2363 "parser.yy"
    83598373    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83608374    break;
     
    83638377
    83648378/* Line 1806 of yacc.c  */
    8365 #line 2371 "parser.yy"
     8379#line 2373 "parser.yy"
    83668380    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83678381    break;
    83688382
    83698383  case 617:
    8370 
    8371 /* Line 1806 of yacc.c  */
    8372 #line 2374 "parser.yy"
    8373     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8374     break;
    8375 
    8376   case 618:
    83778384
    83788385/* Line 1806 of yacc.c  */
     
    83818388    break;
    83828389
     8390  case 618:
     8391
     8392/* Line 1806 of yacc.c  */
     8393#line 2378 "parser.yy"
     8394    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8395    break;
     8396
    83838397  case 619:
    83848398
    83858399/* Line 1806 of yacc.c  */
    8386 #line 2381 "parser.yy"
     8400#line 2383 "parser.yy"
    83878401    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83888402    break;
     
    83918405
    83928406/* Line 1806 of yacc.c  */
    8393 #line 2383 "parser.yy"
     8407#line 2385 "parser.yy"
    83948408    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83958409    break;
     
    83988412
    83998413/* Line 1806 of yacc.c  */
    8400 #line 2385 "parser.yy"
     8414#line 2387 "parser.yy"
    84018415    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84028416    break;
     
    84058419
    84068420/* Line 1806 of yacc.c  */
    8407 #line 2390 "parser.yy"
     8421#line 2392 "parser.yy"
    84088422    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    84098423    break;
    84108424
    84118425  case 623:
    8412 
    8413 /* Line 1806 of yacc.c  */
    8414 #line 2392 "parser.yy"
    8415     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8416     break;
    8417 
    8418   case 624:
    84198426
    84208427/* Line 1806 of yacc.c  */
     
    84238430    break;
    84248431
     8432  case 624:
     8433
     8434/* Line 1806 of yacc.c  */
     8435#line 2396 "parser.yy"
     8436    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8437    break;
     8438
    84258439  case 625:
    84268440
    84278441/* Line 1806 of yacc.c  */
    8428 #line 2396 "parser.yy"
     8442#line 2398 "parser.yy"
    84298443    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84308444    break;
     
    84338447
    84348448/* Line 1806 of yacc.c  */
    8435 #line 2401 "parser.yy"
     8449#line 2403 "parser.yy"
    84368450    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    84378451    break;
     
    84408454
    84418455/* Line 1806 of yacc.c  */
    8442 #line 2403 "parser.yy"
     8456#line 2405 "parser.yy"
    84438457    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84448458    break;
     
    84478461
    84488462/* Line 1806 of yacc.c  */
    8449 #line 2405 "parser.yy"
     8463#line 2407 "parser.yy"
    84508464    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84518465    break;
     
    84548468
    84558469/* Line 1806 of yacc.c  */
    8456 #line 2436 "parser.yy"
     8470#line 2438 "parser.yy"
    84578471    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84588472    break;
    84598473
    84608474  case 631:
    8461 
    8462 /* Line 1806 of yacc.c  */
    8463 #line 2439 "parser.yy"
    8464     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8465     break;
    8466 
    8467   case 632:
    84688475
    84698476/* Line 1806 of yacc.c  */
     
    84728479    break;
    84738480
     8481  case 632:
     8482
     8483/* Line 1806 of yacc.c  */
     8484#line 2443 "parser.yy"
     8485    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8486    break;
     8487
    84748488  case 633:
    84758489
    84768490/* Line 1806 of yacc.c  */
    8477 #line 2446 "parser.yy"
     8491#line 2448 "parser.yy"
    84788492    {
    84798493                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    84858499
    84868500/* Line 1806 of yacc.c  */
    8487 #line 2451 "parser.yy"
     8501#line 2453 "parser.yy"
    84888502    {
    84898503                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    84958509
    84968510/* Line 1806 of yacc.c  */
    8497 #line 2459 "parser.yy"
     8511#line 2461 "parser.yy"
    84988512    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84998513    break;
     
    85028516
    85038517/* Line 1806 of yacc.c  */
    8504 #line 2461 "parser.yy"
     8518#line 2463 "parser.yy"
    85058519    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85068520    break;
     
    85098523
    85108524/* Line 1806 of yacc.c  */
    8511 #line 2463 "parser.yy"
     8525#line 2465 "parser.yy"
    85128526    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85138527    break;
     
    85168530
    85178531/* Line 1806 of yacc.c  */
    8518 #line 2468 "parser.yy"
     8532#line 2470 "parser.yy"
    85198533    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    85208534    break;
     
    85238537
    85248538/* Line 1806 of yacc.c  */
    8525 #line 2470 "parser.yy"
     8539#line 2472 "parser.yy"
    85268540    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85278541    break;
     
    85308544
    85318545/* Line 1806 of yacc.c  */
    8532 #line 2475 "parser.yy"
     8546#line 2477 "parser.yy"
    85338547    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85348548    break;
     
    85378551
    85388552/* Line 1806 of yacc.c  */
    8539 #line 2477 "parser.yy"
     8553#line 2479 "parser.yy"
    85408554    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85418555    break;
    85428556
    85438557  case 643:
    8544 
    8545 /* Line 1806 of yacc.c  */
    8546 #line 2492 "parser.yy"
    8547     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8548     break;
    8549 
    8550   case 644:
    85518558
    85528559/* Line 1806 of yacc.c  */
     
    85558562    break;
    85568563
     8564  case 644:
     8565
     8566/* Line 1806 of yacc.c  */
     8567#line 2496 "parser.yy"
     8568    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8569    break;
     8570
    85578571  case 645:
    85588572
    85598573/* Line 1806 of yacc.c  */
    8560 #line 2499 "parser.yy"
     8574#line 2501 "parser.yy"
    85618575    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85628576    break;
     
    85658579
    85668580/* Line 1806 of yacc.c  */
    8567 #line 2501 "parser.yy"
     8581#line 2503 "parser.yy"
    85688582    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    85698583    break;
     
    85728586
    85738587/* Line 1806 of yacc.c  */
    8574 #line 2503 "parser.yy"
     8588#line 2505 "parser.yy"
    85758589    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85768590    break;
     
    85798593
    85808594/* Line 1806 of yacc.c  */
    8581 #line 2505 "parser.yy"
     8595#line 2507 "parser.yy"
    85828596    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85838597    break;
     
    85868600
    85878601/* Line 1806 of yacc.c  */
    8588 #line 2507 "parser.yy"
     8602#line 2509 "parser.yy"
    85898603    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85908604    break;
    85918605
    85928606  case 651:
    8593 
    8594 /* Line 1806 of yacc.c  */
    8595 #line 2513 "parser.yy"
    8596     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8597     break;
    8598 
    8599   case 652:
    86008607
    86018608/* Line 1806 of yacc.c  */
     
    86048611    break;
    86058612
     8613  case 652:
     8614
     8615/* Line 1806 of yacc.c  */
     8616#line 2517 "parser.yy"
     8617    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8618    break;
     8619
    86068620  case 653:
    86078621
    86088622/* Line 1806 of yacc.c  */
    8609 #line 2517 "parser.yy"
     8623#line 2519 "parser.yy"
    86108624    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86118625    break;
     
    86148628
    86158629/* Line 1806 of yacc.c  */
    8616 #line 2522 "parser.yy"
     8630#line 2524 "parser.yy"
    86178631    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    86188632    break;
     
    86218635
    86228636/* Line 1806 of yacc.c  */
    8623 #line 2524 "parser.yy"
     8637#line 2526 "parser.yy"
    86248638    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86258639    break;
     
    86288642
    86298643/* Line 1806 of yacc.c  */
    8630 #line 2526 "parser.yy"
     8644#line 2528 "parser.yy"
    86318645    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86328646    break;
     
    86358649
    86368650/* Line 1806 of yacc.c  */
    8637 #line 2532 "parser.yy"
     8651#line 2534 "parser.yy"
    86388652    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    86398653    break;
     
    86428656
    86438657/* Line 1806 of yacc.c  */
    8644 #line 2534 "parser.yy"
     8658#line 2536 "parser.yy"
    86458659    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    86468660    break;
     
    86498663
    86508664/* Line 1806 of yacc.c  */
    8651 #line 2540 "parser.yy"
     8665#line 2542 "parser.yy"
    86528666    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    86538667    break;
     
    86568670
    86578671/* Line 1806 of yacc.c  */
    8658 #line 2542 "parser.yy"
     8672#line 2544 "parser.yy"
    86598673    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    86608674    break;
     
    86638677
    86648678/* Line 1806 of yacc.c  */
    8665 #line 2544 "parser.yy"
     8679#line 2546 "parser.yy"
    86668680    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    86678681    break;
     
    86708684
    86718685/* Line 1806 of yacc.c  */
    8672 #line 2546 "parser.yy"
     8686#line 2548 "parser.yy"
    86738687    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    86748688    break;
    86758689
    86768690  case 665:
    8677 
    8678 /* Line 1806 of yacc.c  */
    8679 #line 2561 "parser.yy"
    8680     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8681     break;
    8682 
    8683   case 666:
    86848691
    86858692/* Line 1806 of yacc.c  */
     
    86888695    break;
    86898696
     8697  case 666:
     8698
     8699/* Line 1806 of yacc.c  */
     8700#line 2565 "parser.yy"
     8701    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8702    break;
     8703
    86908704  case 667:
    86918705
    86928706/* Line 1806 of yacc.c  */
    8693 #line 2568 "parser.yy"
     8707#line 2570 "parser.yy"
    86948708    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    86958709    break;
     
    86988712
    86998713/* Line 1806 of yacc.c  */
    8700 #line 2570 "parser.yy"
     8714#line 2572 "parser.yy"
    87018715    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    87028716    break;
     
    87058719
    87068720/* Line 1806 of yacc.c  */
    8707 #line 2572 "parser.yy"
     8721#line 2574 "parser.yy"
    87088722    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87098723    break;
     
    87128726
    87138727/* Line 1806 of yacc.c  */
    8714 #line 2574 "parser.yy"
     8728#line 2576 "parser.yy"
    87158729    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87168730    break;
     
    87198733
    87208734/* Line 1806 of yacc.c  */
    8721 #line 2576 "parser.yy"
     8735#line 2578 "parser.yy"
    87228736    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87238737    break;
    87248738
    87258739  case 673:
    8726 
    8727 /* Line 1806 of yacc.c  */
    8728 #line 2582 "parser.yy"
    8729     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8730     break;
    8731 
    8732   case 674:
    87338740
    87348741/* Line 1806 of yacc.c  */
     
    87378744    break;
    87388745
     8746  case 674:
     8747
     8748/* Line 1806 of yacc.c  */
     8749#line 2586 "parser.yy"
     8750    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8751    break;
     8752
    87398753  case 675:
    87408754
    87418755/* Line 1806 of yacc.c  */
    8742 #line 2586 "parser.yy"
     8756#line 2588 "parser.yy"
    87438757    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87448758    break;
     
    87478761
    87488762/* Line 1806 of yacc.c  */
    8749 #line 2591 "parser.yy"
     8763#line 2593 "parser.yy"
    87508764    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    87518765    break;
     
    87548768
    87558769/* Line 1806 of yacc.c  */
    8756 #line 2593 "parser.yy"
     8770#line 2595 "parser.yy"
    87578771    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87588772    break;
     
    87618775
    87628776/* Line 1806 of yacc.c  */
    8763 #line 2595 "parser.yy"
     8777#line 2597 "parser.yy"
    87648778    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87658779    break;
     
    87688782
    87698783/* Line 1806 of yacc.c  */
    8770 #line 2602 "parser.yy"
     8784#line 2604 "parser.yy"
    87718785    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87728786    break;
     
    87758789
    87768790/* Line 1806 of yacc.c  */
    8777 #line 2613 "parser.yy"
     8791#line 2615 "parser.yy"
    87788792    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    87798793    break;
     
    87828796
    87838797/* Line 1806 of yacc.c  */
    8784 #line 2616 "parser.yy"
     8798#line 2618 "parser.yy"
    87858799    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    87868800    break;
     
    87898803
    87908804/* Line 1806 of yacc.c  */
    8791 #line 2618 "parser.yy"
     8805#line 2620 "parser.yy"
    87928806    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    87938807    break;
     
    87968810
    87978811/* Line 1806 of yacc.c  */
    8798 #line 2621 "parser.yy"
     8812#line 2623 "parser.yy"
    87998813    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    88008814    break;
     
    88038817
    88048818/* Line 1806 of yacc.c  */
    8805 #line 2623 "parser.yy"
     8819#line 2625 "parser.yy"
    88068820    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    88078821    break;
     
    88108824
    88118825/* Line 1806 of yacc.c  */
    8812 #line 2625 "parser.yy"
     8826#line 2627 "parser.yy"
    88138827    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    88148828    break;
    88158829
    88168830  case 689:
    8817 
    8818 /* Line 1806 of yacc.c  */
    8819 #line 2639 "parser.yy"
    8820     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8821     break;
    8822 
    8823   case 690:
    88248831
    88258832/* Line 1806 of yacc.c  */
     
    88288835    break;
    88298836
     8837  case 690:
     8838
     8839/* Line 1806 of yacc.c  */
     8840#line 2643 "parser.yy"
     8841    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8842    break;
     8843
    88308844  case 691:
    88318845
    88328846/* Line 1806 of yacc.c  */
    8833 #line 2646 "parser.yy"
     8847#line 2648 "parser.yy"
    88348848    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    88358849    break;
     
    88388852
    88398853/* Line 1806 of yacc.c  */
    8840 #line 2648 "parser.yy"
     8854#line 2650 "parser.yy"
    88418855    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    88428856    break;
     
    88458859
    88468860/* Line 1806 of yacc.c  */
    8847 #line 2650 "parser.yy"
     8861#line 2652 "parser.yy"
    88488862    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88498863    break;
     
    88528866
    88538867/* Line 1806 of yacc.c  */
    8854 #line 2652 "parser.yy"
     8868#line 2654 "parser.yy"
    88558869    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88568870    break;
     
    88598873
    88608874/* Line 1806 of yacc.c  */
    8861 #line 2654 "parser.yy"
     8875#line 2656 "parser.yy"
    88628876    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88638877    break;
    88648878
    88658879  case 697:
    8866 
    8867 /* Line 1806 of yacc.c  */
    8868 #line 2660 "parser.yy"
    8869     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8870     break;
    8871 
    8872   case 698:
    88738880
    88748881/* Line 1806 of yacc.c  */
     
    88778884    break;
    88788885
     8886  case 698:
     8887
     8888/* Line 1806 of yacc.c  */
     8889#line 2664 "parser.yy"
     8890    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8891    break;
     8892
    88798893  case 699:
    88808894
    88818895/* Line 1806 of yacc.c  */
    8882 #line 2664 "parser.yy"
     8896#line 2666 "parser.yy"
    88838897    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88848898    break;
     
    88878901
    88888902/* Line 1806 of yacc.c  */
    8889 #line 2669 "parser.yy"
     8903#line 2671 "parser.yy"
    88908904    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    88918905    break;
     
    88948908
    88958909/* Line 1806 of yacc.c  */
    8896 #line 2671 "parser.yy"
     8910#line 2673 "parser.yy"
    88978911    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88988912    break;
     
    89018915
    89028916/* Line 1806 of yacc.c  */
    8903 #line 2681 "parser.yy"
     8917#line 2683 "parser.yy"
    89048918    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    89058919    break;
     
    89088922
    89098923/* Line 1806 of yacc.c  */
    8910 #line 2691 "parser.yy"
     8924#line 2693 "parser.yy"
    89118925    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89128926    break;
     
    89158929
    89168930/* Line 1806 of yacc.c  */
    8917 #line 2693 "parser.yy"
     8931#line 2695 "parser.yy"
    89188932    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89198933    break;
     
    89228936
    89238937/* Line 1806 of yacc.c  */
    8924 #line 2695 "parser.yy"
     8938#line 2697 "parser.yy"
    89258939    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89268940    break;
     
    89298943
    89308944/* Line 1806 of yacc.c  */
    8931 #line 2697 "parser.yy"
     8945#line 2699 "parser.yy"
    89328946    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89338947    break;
     
    89368950
    89378951/* Line 1806 of yacc.c  */
    8938 #line 2699 "parser.yy"
     8952#line 2701 "parser.yy"
    89398953    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89408954    break;
     
    89438957
    89448958/* Line 1806 of yacc.c  */
    8945 #line 2701 "parser.yy"
     8959#line 2703 "parser.yy"
    89468960    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89478961    break;
     
    89508964
    89518965/* Line 1806 of yacc.c  */
    8952 #line 2708 "parser.yy"
     8966#line 2710 "parser.yy"
    89538967    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89548968    break;
     
    89578971
    89588972/* Line 1806 of yacc.c  */
    8959 #line 2710 "parser.yy"
     8973#line 2712 "parser.yy"
    89608974    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89618975    break;
     
    89648978
    89658979/* Line 1806 of yacc.c  */
    8966 #line 2712 "parser.yy"
     8980#line 2714 "parser.yy"
    89678981    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89688982    break;
     
    89718985
    89728986/* Line 1806 of yacc.c  */
    8973 #line 2714 "parser.yy"
     8987#line 2716 "parser.yy"
    89748988    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    89758989    break;
     
    89788992
    89798993/* Line 1806 of yacc.c  */
    8980 #line 2716 "parser.yy"
     8994#line 2718 "parser.yy"
    89818995    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89828996    break;
     
    89858999
    89869000/* Line 1806 of yacc.c  */
    8987 #line 2718 "parser.yy"
     9001#line 2720 "parser.yy"
    89889002    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89899003    break;
     
    89929006
    89939007/* Line 1806 of yacc.c  */
    8994 #line 2720 "parser.yy"
     9008#line 2722 "parser.yy"
    89959009    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89969010    break;
     
    89999013
    90009014/* Line 1806 of yacc.c  */
    9001 #line 2722 "parser.yy"
     9015#line 2724 "parser.yy"
    90029016    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90039017    break;
     
    90069020
    90079021/* Line 1806 of yacc.c  */
    9008 #line 2724 "parser.yy"
     9022#line 2726 "parser.yy"
    90099023    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    90109024    break;
     
    90139027
    90149028/* Line 1806 of yacc.c  */
    9015 #line 2726 "parser.yy"
     9029#line 2728 "parser.yy"
    90169030    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90179031    break;
     
    90209034
    90219035/* Line 1806 of yacc.c  */
    9022 #line 2731 "parser.yy"
     9036#line 2733 "parser.yy"
    90239037    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    90249038    break;
     
    90279041
    90289042/* Line 1806 of yacc.c  */
    9029 #line 2733 "parser.yy"
     9043#line 2735 "parser.yy"
    90309044    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    90319045    break;
     
    90349048
    90359049/* Line 1806 of yacc.c  */
    9036 #line 2738 "parser.yy"
     9050#line 2740 "parser.yy"
    90379051    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    90389052    break;
     
    90419055
    90429056/* Line 1806 of yacc.c  */
    9043 #line 2740 "parser.yy"
     9057#line 2742 "parser.yy"
    90449058    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    90459059    break;
     
    90489062
    90499063/* Line 1806 of yacc.c  */
    9050 #line 2767 "parser.yy"
     9064#line 2769 "parser.yy"
    90519065    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    90529066    break;
     
    90559069
    90569070/* Line 1806 of yacc.c  */
    9057 #line 2778 "parser.yy"
     9071#line 2780 "parser.yy"
    90589072    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90599073    break;
     
    90629076
    90639077/* Line 1806 of yacc.c  */
    9064 #line 2780 "parser.yy"
     9078#line 2782 "parser.yy"
    90659079    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90669080    break;
     
    90699083
    90709084/* Line 1806 of yacc.c  */
    9071 #line 2782 "parser.yy"
     9085#line 2784 "parser.yy"
    90729086    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90739087    break;
     
    90769090
    90779091/* Line 1806 of yacc.c  */
    9078 #line 2784 "parser.yy"
     9092#line 2786 "parser.yy"
    90799093    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90809094    break;
     
    90839097
    90849098/* Line 1806 of yacc.c  */
    9085 #line 2786 "parser.yy"
     9099#line 2788 "parser.yy"
    90869100    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90879101    break;
     
    90909104
    90919105/* Line 1806 of yacc.c  */
    9092 #line 2788 "parser.yy"
     9106#line 2790 "parser.yy"
    90939107    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90949108    break;
     
    90979111
    90989112/* Line 1806 of yacc.c  */
    9099 #line 2795 "parser.yy"
     9113#line 2797 "parser.yy"
    91009114    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91019115    break;
     
    91049118
    91059119/* Line 1806 of yacc.c  */
    9106 #line 2797 "parser.yy"
     9120#line 2799 "parser.yy"
    91079121    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91089122    break;
     
    91119125
    91129126/* Line 1806 of yacc.c  */
    9113 #line 2799 "parser.yy"
     9127#line 2801 "parser.yy"
    91149128    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91159129    break;
     
    91189132
    91199133/* Line 1806 of yacc.c  */
    9120 #line 2801 "parser.yy"
     9134#line 2803 "parser.yy"
    91219135    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91229136    break;
     
    91259139
    91269140/* Line 1806 of yacc.c  */
    9127 #line 2803 "parser.yy"
     9141#line 2805 "parser.yy"
    91289142    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91299143    break;
     
    91329146
    91339147/* Line 1806 of yacc.c  */
    9134 #line 2805 "parser.yy"
     9148#line 2807 "parser.yy"
    91359149    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91369150    break;
     
    91399153
    91409154/* Line 1806 of yacc.c  */
    9141 #line 2810 "parser.yy"
     9155#line 2812 "parser.yy"
    91429156    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    91439157    break;
     
    91469160
    91479161/* Line 1806 of yacc.c  */
    9148 #line 2815 "parser.yy"
     9162#line 2817 "parser.yy"
    91499163    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    91509164    break;
    91519165
    91529166  case 746:
    9153 
    9154 /* Line 1806 of yacc.c  */
    9155 #line 2817 "parser.yy"
    9156     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    9157     break;
    9158 
    9159   case 747:
    91609167
    91619168/* Line 1806 of yacc.c  */
     
    91649171    break;
    91659172
     9173  case 747:
     9174
     9175/* Line 1806 of yacc.c  */
     9176#line 2821 "parser.yy"
     9177    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     9178    break;
     9179
    91669180  case 750:
    91679181
    91689182/* Line 1806 of yacc.c  */
    9169 #line 2843 "parser.yy"
     9183#line 2845 "parser.yy"
    91709184    { (yyval.en) = 0; }
    91719185    break;
     
    91749188
    91759189/* Line 1806 of yacc.c  */
    9176 #line 2845 "parser.yy"
     9190#line 2847 "parser.yy"
    91779191    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    91789192    break;
     
    91819195
    91829196/* Line 1806 of yacc.c  */
    9183 #line 9184 "Parser/parser.cc"
     9197#line 9198 "Parser/parser.cc"
    91849198      default: break;
    91859199    }
     
    94129426
    94139427/* Line 2067 of yacc.c  */
    9414 #line 2848 "parser.yy"
     9428#line 2850 "parser.yy"
    94159429
    94169430// ----end of grammar----
  • src/Parser/parser.yy

    r4e7f0f1 r3b58d91  
    377377                { $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
    378378        | postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
     379                { $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
    379380        | postfix_expression ARROW no_attr_identifier
    380381                { $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
    381382        | postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
     383                        { $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
    382384        | postfix_expression ICR
    383385                { $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
  • src/ResolvExpr/AlternativeFinder.cc

    r4e7f0f1 r3b58d91  
    251251
    252252        template< typename StructOrUnionType >
    253         void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const std::string &name ) {
     253        void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, Expression * member ) {
     254                NameExpr * nameExpr = safe_dynamic_cast< NameExpr * >( member );
     255                const std::string & name = nameExpr->get_name();
     256
    254257                std::list< Declaration* > members;
    255258                aggInst->lookup( name, members );
     
    839842                        renameTypes( alternatives.back().expr );
    840843                        if ( StructInstType *structInst = dynamic_cast< StructInstType* >( (*i)->get_type() ) ) {
    841                                 addAggMembers( structInst, &newExpr, Cost( 0, 0, 1 ), "" );
     844                                NameExpr nameExpr( "" );
     845                                addAggMembers( structInst, &newExpr, Cost( 0, 0, 1 ), &nameExpr );
    842846                        } else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( (*i)->get_type() ) ) {
    843                                 addAggMembers( unionInst, &newExpr, Cost( 0, 0, 1 ), "" );
     847                                NameExpr nameExpr( "" );
     848                                addAggMembers( unionInst, &newExpr, Cost( 0, 0, 1 ), &nameExpr );
    844849                        } // if
    845850                } // for
  • src/ResolvExpr/AlternativeFinder.h

    r4e7f0f1 r3b58d91  
    7474          private:
    7575                /// Adds alternatives for member expressions, given the aggregate, conversion cost for that aggregate, and name of the member
    76                 template< typename StructOrUnionType > void addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const std::string &name );
     76                template< typename StructOrUnionType > void addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, Expression * member );
    7777                /// Adds alternatives for offsetof expressions, given the base type and name of the member
    7878                template< typename StructOrUnionType > void addOffsetof( StructOrUnionType *aggInst, const std::string &name );
  • src/SynTree/Expression.cc

    r4e7f0f1 r3b58d91  
    310310}
    311311
    312 UntypedMemberExpr::UntypedMemberExpr( std::string _member, Expression *_aggregate, Expression *_aname ) :
     312UntypedMemberExpr::UntypedMemberExpr( Expression * _member, Expression *_aggregate, Expression *_aname ) :
    313313                Expression( _aname ), member(_member), aggregate(_aggregate) {}
    314314
    315315UntypedMemberExpr::UntypedMemberExpr( const UntypedMemberExpr &other ) :
    316                 Expression( other ), member( other.member ), aggregate( maybeClone( other.aggregate ) ) {
     316                Expression( other ), member( maybeClone( other.member ) ), aggregate( maybeClone( other.aggregate ) ) {
    317317}
    318318
    319319UntypedMemberExpr::~UntypedMemberExpr() {
    320320        delete aggregate;
     321        delete member;
    321322}
    322323
    323324void UntypedMemberExpr::print( std::ostream &os, int indent ) const {
    324         os << "Untyped Member Expression, with field: " << get_member();
     325        os << "Untyped Member Expression, with field: " << std::endl;
     326        get_member()->print(os, indent+4);
     327        os << std::string( indent+2, ' ' );
    325328
    326329        Expression *agg = get_aggregate();
    327         os << ", from aggregate: ";
     330        os << "from aggregate: " << std::endl;
    328331        if (agg != 0) {
    329                 os << std::string( indent + 2, ' ' );
    330                 agg->print(os, indent + 2);
     332                os << std::string( indent + 4, ' ' );
     333                agg->print(os, indent + 4);
    331334        }
    332335        os << std::string( indent+2, ' ' );
  • src/SynTree/Expression.h

    r4e7f0f1 r3b58d91  
    200200class UntypedMemberExpr : public Expression {
    201201  public:
    202         UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = nullptr );
     202        UntypedMemberExpr( Expression *member, Expression *aggregate, Expression *_aname = nullptr );
    203203        UntypedMemberExpr( const UntypedMemberExpr &other );
    204204        virtual ~UntypedMemberExpr();
    205205
    206         std::string get_member() const { return member; }
    207         void set_member( const std::string &newValue ) { member = newValue; }
     206        Expression * get_member() const { return member; }
     207        void set_member( Expression * newValue ) { member = newValue; }
    208208        Expression *get_aggregate() const { return aggregate; }
    209209        void set_aggregate( Expression *newValue ) { aggregate = newValue; }
     
    214214        virtual void print( std::ostream &os, int indent = 0 ) const;
    215215  private:
    216         std::string member;
     216        Expression *member;
    217217        Expression *aggregate;
    218218};
     
    618618        CompoundLiteralExpr( Type * type, Initializer * initializer );
    619619        CompoundLiteralExpr( const CompoundLiteralExpr &other );
    620         ~CompoundLiteralExpr();
     620        virtual ~CompoundLiteralExpr();
    621621
    622622        Type * get_type() const { return type; }
     
    651651  private:
    652652        Expression *low, *high;
     653};
     654
     655/// TupleIndexExpr represents an element selection operation on a tuple value, e.g. t.3 after processing by the expression analyzer
     656class TupleIndexExpr : public Expression {
     657  public:
     658        TupleIndexExpr( Expression * tuple, unsigned int index );
     659        TupleIndexExpr( const TupleIndexExpr &other );
     660        virtual ~TupleIndexExpr();
     661
     662        Expression * get_tuple() const { return tuple; }
     663        int get_index() const { return index; }
     664        TupleIndexExpr * set_tuple( Expression *newValue ) { tuple = newValue; return this; }
     665        TupleIndexExpr * set_index( unsigned int newValue ) { index = newValue; return this; }
     666
     667        virtual TupleIndexExpr *clone() const { return new TupleIndexExpr( *this ); }
     668        virtual void accept( Visitor &v ) { v.visit( this ); }
     669        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     670        virtual void print( std::ostream &os, int indent = 0 ) const;
     671  private:
     672        Expression * tuple;
     673        unsigned int index;
     674};
     675
     676/// MemberTupleExpr represents a tuple member selection operation on a struct type, e.g. s.[a, b, c] after processing by the expression analyzer
     677class MemberTupleExpr : public Expression {
     678  public:
     679        MemberTupleExpr( Expression * member, Expression * aggregate, Expression * _aname = nullptr );
     680        MemberTupleExpr( const MemberTupleExpr &other );
     681        virtual ~MemberTupleExpr();
     682
     683        Expression * get_member() const { return member; }
     684        Expression * get_aggregate() const { return aggregate; }
     685        MemberTupleExpr * set_member( Expression *newValue ) { member = newValue; return this; }
     686        MemberTupleExpr * set_aggregate( Expression *newValue ) { aggregate = newValue; return this; }
     687
     688        virtual MemberTupleExpr *clone() const { return new MemberTupleExpr( *this ); }
     689        virtual void accept( Visitor &v ) { v.visit( this ); }
     690        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     691        virtual void print( std::ostream &os, int indent = 0 ) const;
     692  private:
     693        Expression * member;
     694        Expression * aggregate;
     695};
     696
     697/// MultipleAssignExpr represents a multiple assignment operation, where both sides of the assignment have tuple type, e.g. [a, b, c] = [d, e, f];
     698class MultipleAssignExpr : public Expression {
     699  public:
     700        MultipleAssignExpr( Expression * lhs, Expression * rhs );
     701        MultipleAssignExpr( const MultipleAssignExpr &other );
     702        virtual ~MultipleAssignExpr();
     703
     704        Expression * get_lhs() const { return lhs; }
     705        Expression * get_rhs() const { return rhs; }
     706        MultipleAssignExpr * set_lhs( Expression *newValue ) { lhs = newValue; return this; }
     707        MultipleAssignExpr * set_rhs( Expression *newValue ) { rhs = newValue; return this; }
     708
     709        virtual MultipleAssignExpr *clone() const { return new MultipleAssignExpr( *this ); }
     710        virtual void accept( Visitor &v ) { v.visit( this ); }
     711        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     712        virtual void print( std::ostream &os, int indent = 0 ) const;
     713  private:
     714        Expression * lhs;
     715        Expression * rhs;
     716};
     717
     718/// MassAssignExpr represents a mass assignment operations, where the left hand side has tuple type and the right hand side does not, e.g. [a, b, c] = 5.0;
     719class MassAssignExpr : public Expression {
     720  public:
     721        MassAssignExpr( Expression * tuple, int field );
     722        MassAssignExpr( const MassAssignExpr &other );
     723        virtual ~MassAssignExpr();
     724
     725        Expression * get_lhs() const { return lhs; }
     726        Expression * get_rhs() const { return rhs; }
     727        MassAssignExpr * set_lhs( Expression *newValue ) { lhs = newValue; return this; }
     728        MassAssignExpr * set_rhs( Expression *newValue ) { rhs = newValue; return this; }
     729
     730        virtual MassAssignExpr *clone() const { return new MassAssignExpr( *this ); }
     731        virtual void accept( Visitor &v ) { v.visit( this ); }
     732        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     733        virtual void print( std::ostream &os, int indent = 0 ) const;
     734  private:
     735        Expression * lhs; // multiple exprs
     736        Expression * rhs; // single expr
    653737};
    654738
  • src/SynTree/Mutator.cc

    r4e7f0f1 r3b58d91  
    216216        mutateAll( memberExpr->get_results(), *this );
    217217        memberExpr->set_aggregate( maybeMutate( memberExpr->get_aggregate(), *this ) );
     218        memberExpr->set_member( maybeMutate( memberExpr->get_member(), *this ) );
    218219        return memberExpr;
    219220}
     
    355356        rangeExpr->set_high( maybeMutate( rangeExpr->get_high(), *this ) );
    356357        return rangeExpr;
     358}
     359
     360Expression *Mutator::mutate( TupleIndexExpr *tupleExpr ) {
     361        mutateAll( tupleExpr->get_results(), *this );
     362        tupleExpr->set_tuple( maybeMutate( tupleExpr->get_tuple(), *this ) );
     363        return tupleExpr;
     364}
     365
     366Expression *Mutator::mutate( MemberTupleExpr *tupleExpr ) {
     367        mutateAll( tupleExpr->get_results(), *this );
     368        tupleExpr->set_member( maybeMutate( tupleExpr->get_member(), *this ) );
     369        tupleExpr->set_aggregate( maybeMutate( tupleExpr->get_aggregate(), *this ) );
     370        return tupleExpr;
     371}
     372
     373Expression *Mutator::mutate( MultipleAssignExpr *assignExpr ) {
     374        mutateAll( assignExpr->get_results(), *this );
     375        assignExpr->set_lhs( maybeMutate( assignExpr->get_lhs(), *this ) );
     376        assignExpr->set_rhs( maybeMutate( assignExpr->get_rhs(), *this ) );
     377        return assignExpr;
     378}
     379
     380Expression *Mutator::mutate( MassAssignExpr *assignExpr ) {
     381        mutateAll( assignExpr->get_results(), *this );
     382        assignExpr->set_lhs( maybeMutate( assignExpr->get_lhs(), *this ) );
     383        assignExpr->set_rhs( maybeMutate( assignExpr->get_rhs(), *this ) );
     384        return assignExpr;
    357385}
    358386
  • src/SynTree/Mutator.h

    r4e7f0f1 r3b58d91  
    7979        virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
    8080        virtual Expression* mutate( RangeExpr *rangeExpr );
     81        virtual Expression* mutate( TupleIndexExpr *tupleExpr );
     82        virtual Expression* mutate( MemberTupleExpr *tupleExpr );
     83        virtual Expression* mutate( MultipleAssignExpr *assignExpr );
     84        virtual Expression* mutate( MassAssignExpr *assignExpr );
    8185
    8286        virtual Type* mutate( VoidType *basicType );
  • src/SynTree/SynTree.h

    r4e7f0f1 r3b58d91  
    8484class CompoundLiteralExpr;
    8585class RangeExpr;
     86class TupleIndexExpr;
     87class MemberTupleExpr;
     88class MultipleAssignExpr;
     89class MassAssignExpr;
    8690
    8791class Type;
  • src/SynTree/TupleExpr.cc

    r4e7f0f1 r3b58d91  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // TupleExpr.cc -- 
     7// TupleExpr.cc --
    88//
    99// Author           : Richard C. Bilson
     
    1616#include "Expression.h"
    1717#include "Common/utility.h"
     18#include "Type.h"
    1819
    1920TupleExpr::TupleExpr( Expression *_aname ) : Expression( _aname ) {
     
    4849}
    4950
     51TupleIndexExpr::TupleIndexExpr( Expression * tuple, unsigned int index ) {
     52        // TupleType * type = safe_dynamic_cast< TypeType * >( tuple->get_ )
     53        assert( tuple->get_results().size() >= index );
     54        add_result( *std::next( tuple->get_results().begin(), index ) );
     55}
     56
     57TupleIndexExpr::TupleIndexExpr( const TupleIndexExpr &other ) : Expression( other ), tuple( other.tuple->clone() ), index( other.index ) {
     58}
     59
     60TupleIndexExpr::~TupleIndexExpr() {
     61        delete tuple;
     62}
     63
     64void TupleIndexExpr::print( std::ostream &os, int indent ) const {
     65        os << std::string( indent, ' ' ) << "Tuple Index Expression, with tuple:" << std::endl;
     66        tuple->print( os, indent+2 );
     67        os << std::string( indent+2, ' ' ) << "with index: " << index << std::endl;
     68        Expression::print( os, indent );
     69}
     70
     71MemberTupleExpr::MemberTupleExpr( Expression * member, Expression * aggregate, Expression * _aname ) : Expression( _aname ) {
     72        cloneAll( member->get_results(), get_results() ); // xxx - ???
     73}
     74
     75MemberTupleExpr::MemberTupleExpr( const MemberTupleExpr &other ) : Expression( other ), member( other.member->clone() ), aggregate( other.aggregate->clone() ) {
     76}
     77
     78MemberTupleExpr::~MemberTupleExpr() {
     79        delete member;
     80        delete aggregate;
     81}
     82
     83void MemberTupleExpr::print( std::ostream &os, int indent ) const {
     84        os << std::string( indent, ' ' ) << "Member Tuple Expression, with aggregate:" << std::endl;
     85        aggregate->print( os, indent+2 );
     86        os << std::string( indent+2, ' ' ) << "with member: " << std::endl;
     87        member->print( os, indent+2 );
     88        Expression::print( os, indent );
     89}
     90
     91
    5092// Local Variables: //
    5193// tab-width: 4 //
  • src/SynTree/Visitor.cc

    r4e7f0f1 r3b58d91  
    182182        acceptAll( memberExpr->get_results(), *this );
    183183        maybeAccept( memberExpr->get_aggregate(), *this );
     184        maybeAccept( memberExpr->get_member(), *this );
    184185}
    185186
     
    301302        maybeAccept( rangeExpr->get_low(), *this );
    302303        maybeAccept( rangeExpr->get_high(), *this );
     304}
     305
     306void Visitor::visit( TupleIndexExpr *tupleExpr ) {
     307        acceptAll( tupleExpr->get_results(), *this );
     308        maybeAccept( tupleExpr->get_tuple(), *this );
     309}
     310
     311void Visitor::visit( MemberTupleExpr *tupleExpr ) {
     312        acceptAll( tupleExpr->get_results(), *this );
     313        maybeAccept( tupleExpr->get_member(), *this );
     314        maybeAccept( tupleExpr->get_aggregate(), *this );
     315}
     316
     317void Visitor::visit( MultipleAssignExpr *assignExpr ) {
     318        acceptAll( assignExpr->get_results(), *this );
     319        maybeAccept( assignExpr->get_lhs(), *this );
     320        maybeAccept( assignExpr->get_rhs(), *this );
     321}
     322
     323void Visitor::visit( MassAssignExpr *assignExpr ) {
     324        acceptAll( assignExpr->get_results(), *this );
     325        maybeAccept( assignExpr->get_lhs(), *this );
     326        maybeAccept( assignExpr->get_rhs(), *this );
    303327}
    304328
  • src/SynTree/Visitor.h

    r4e7f0f1 r3b58d91  
    7979        virtual void visit( CompoundLiteralExpr *compLitExpr );
    8080        virtual void visit( RangeExpr *rangeExpr );
     81        virtual void visit( TupleIndexExpr *tupleExpr );
     82        virtual void visit( MemberTupleExpr *tupleExpr );
     83        virtual void visit( MultipleAssignExpr *assignExpr );
     84        virtual void visit( MassAssignExpr *assignExpr );
    8185
    8286        virtual void visit( VoidType *basicType );
Note: See TracChangeset for help on using the changeset viewer.