Changeset 064e3ff


Ignore:
Timestamp:
Aug 4, 2016, 5:26:08 PM (5 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
b87e2b6
Parents:
76e8c55
Message:

add new type for ranges and refactor parser code

Location:
src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r76e8c55 r064e3ff  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug  4 11:16:21 2016
    13 // Update Count     : 351
     12// Last Modified On : Thu Aug  4 13:35:30 2016
     13// Update Count     : 352
    1414//
    1515
     
    492492        }
    493493
     494        void CodeGenerator::visit( RangeExpr * rangeExpr ) {
     495                rangeExpr->get_low()->accept( *this );
     496                output << " ... ";
     497                rangeExpr->get_high()->accept( *this );
     498        }
     499
    494500        void CodeGenerator::visit( NameExpr * nameExpr ) {
    495501                extension( nameExpr );
  • src/CodeGen/CodeGenerator.h

    r76e8c55 r064e3ff  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jul 30 11:10:42 2016
    13 // Update Count     : 37
     12// Last Modified On : Thu Aug  4 13:37:07 2016
     13// Update Count     : 38
    1414//
    1515
     
    5454                virtual void visit( ApplicationExpr *applicationExpr );
    5555                virtual void visit( UntypedExpr *untypedExpr );
     56                virtual void visit( RangeExpr * rangeExpr );
    5657                virtual void visit( NameExpr *nameExpr );
    5758                virtual void visit( AddressExpr *addressExpr );
  • src/Parser/ExpressionNode.cc

    r76e8c55 r064e3ff  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Aug  2 15:10:23 2016
    13 // Update Count     : 322
     12// Last Modified On : Thu Aug  4 16:11:23 2016
     13// Update Count     : 338
    1414//
    1515
     
    258258OperatorNode::~OperatorNode() {}
    259259
    260 OperatorNode::Type OperatorNode::get_type( void ) const{
     260OperatorNode::Type OperatorNode::get_type( void ) const {
    261261        return type;
    262262}
     
    311311}
    312312
    313 #include "Common/utility.h"
     313
     314Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
     315        DeclarationNode *decl_node = arg->get_decl();
     316
     317        Type *targetType = decl_node->buildType();
     318        if ( dynamic_cast< VoidType* >( targetType ) ) {
     319                delete targetType;
     320                return new CastExpr( maybeBuild<Expression>(expr_node) );
     321        } else {
     322                return new CastExpr( maybeBuild<Expression>(expr_node), targetType );
     323        } // if
     324}
     325
     326Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
     327        NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
     328        assert( memberExpr );
     329        UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), maybeBuild<Expression>(expr_node) );
     330        delete member;
     331        return ret;
     332}
     333
     334Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
     335        NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
     336        assert( memberExpr );
     337        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
     338        deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
     339        UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), deref );
     340        delete member;
     341        return ret;
     342}
     343
     344Expression *build_addressOf( ExpressionNode *expr_node ) {
     345                return new AddressExpr( maybeBuild<Expression>(expr_node) );
     346}
     347Expression *build_sizeOf( ExpressionNode *expr_node ) {
     348        if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
     349                return new SizeofExpr( arg->get_decl()->buildType() );
     350        } else {
     351                return new SizeofExpr( maybeBuild<Expression>(expr_node) );
     352        } // if
     353}
     354Expression *build_alignOf( ExpressionNode *expr_node ) {
     355        if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
     356                return new AlignofExpr( arg->get_decl()->buildType() );
     357        } else {
     358                return new AlignofExpr( maybeBuild<Expression>(expr_node) );
     359        } // if
     360}
     361Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member ) {
     362        NameExpr *memberExpr = dynamic_cast<NameExpr *>( maybeBuild<Expression>( member ) );
     363        assert( memberExpr );
     364        return new UntypedOffsetofExpr( arg->get_decl()->buildType(), memberExpr->get_name() );
     365}
     366
     367CompositeExprNode2::CompositeExprNode2( Expression *expr ) : expr( expr ) {}
     368CompositeExprNode2::CompositeExprNode2( const CompositeExprNode2 &other ) : expr( other.expr->clone() ) {}
     369CompositeExprNode2::~CompositeExprNode2() { delete expr; }
     370void CompositeExprNode2::print( std::ostream &, int indent ) const { assert( false ); }
     371void CompositeExprNode2::printOneLine( std::ostream &, int indent ) const { assert( false ); }
     372
    314373
    315374Expression *CompositeExprNode::build() const {
     
    388447          case OperatorNode::LabelAddress:
    389448                return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args );
    390           case OperatorNode::AddressOf:
    391                 assert( args.size() == 1 );
    392                 assert( args.front() );
    393 
    394                 return new AddressExpr( args.front() );
    395           case OperatorNode::Cast:
    396                 {
    397                         TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args());
    398                         assert( arg );
    399 
    400                         DeclarationNode *decl_node = arg->get_decl();
    401                         ExpressionNode *expr_node = dynamic_cast<ExpressionNode *>( arg->get_link());
    402 
    403                         Type *targetType = decl_node->buildType();
    404                         if ( dynamic_cast< VoidType* >( targetType ) ) {
    405                                 delete targetType;
    406                                 return new CastExpr( maybeBuild<Expression>(expr_node), maybeBuild< Expression >( get_argName() ) );
    407                         } else {
    408                                 return new CastExpr( maybeBuild<Expression>(expr_node),targetType, maybeBuild< Expression >( get_argName() ) );
    409                         } // if
    410                 }
    411           case OperatorNode::FieldSel:
    412                 {
    413                         assert( args.size() == 2 );
    414 
    415                         NameExpr *member = dynamic_cast<NameExpr *>( args.back());
    416                         // TupleExpr *memberTup = dynamic_cast<TupleExpr *>( args.back());
    417 
    418                         if ( member != 0 ) {
    419                                 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), args.front());
    420                                 delete member;
    421                                 return ret;
    422                                 /* else if ( memberTup != 0 )
    423                                    {
    424                                    UntypedMemberExpr *ret = new UntypedMemberExpr( memberTup->get_name(), args.front());
    425                                    delete member;
    426                                    return ret;
    427                                    } */
    428                         } else
    429                                 assert( false );
    430                 }
    431           case OperatorNode::PFieldSel:
    432                 {
    433                         assert( args.size() == 2 );
    434 
    435                         NameExpr *member = dynamic_cast<NameExpr *>( args.back());  // modify for Tuples   xxx
    436                         assert( member != 0 );
    437 
    438                         UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    439                         deref->get_args().push_back( args.front() );
    440 
    441                         UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
    442                         delete member;
    443                         return ret;
    444                 }
    445           case OperatorNode::SizeOf:
    446                 {
    447                         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
    448                                 return new SizeofExpr( arg->get_decl()->buildType());
    449                         } else {
    450                                 return new SizeofExpr( args.front());
    451                         } // if
    452                 }
    453           case OperatorNode::AlignOf:
    454                 {
    455                         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
    456                                 return new AlignofExpr( arg->get_decl()->buildType());
    457                         } else {
    458                                 return new AlignofExpr( args.front());
    459                         } // if
    460                 }
    461           case OperatorNode::OffsetOf:
    462                 {
    463                         assert( args.size() == 2 );
    464 
    465                         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args() ) ) {
    466                                 NameExpr *member = dynamic_cast<NameExpr *>( args.back() );
    467                                 assert( member != 0 );
    468 
    469                                 return new UntypedOffsetofExpr( arg->get_decl()->buildType(), member->get_name() );
    470                         } else assert( false );
    471                 }
    472449          case OperatorNode::Attr:
    473450                {
     
    774751}
    775752
    776 
    777753ExpressionNode *flattenCommas( ExpressionNode *list ) {
    778754        if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
  • src/Parser/ParseNode.h

    r76e8c55 r064e3ff  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Jul 24 02:17:00 2016
    13 // Update Count     : 269
     12// Last Modified On : Thu Aug  4 16:34:16 2016
     13// Update Count     : 277
    1414//
    1515
     
    225225};
    226226
     227Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node );
     228Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member );
     229Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member );
     230Expression *build_addressOf( ExpressionNode *expr_node );
     231Expression *build_sizeOf( ExpressionNode *expr_node );
     232Expression *build_alignOf( ExpressionNode *expr_node );
     233Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member );
     234
    227235class CompositeExprNode : public ExpressionNode {
    228236  public:
     
    250258        ExpressionNode *function;
    251259        ExpressionNode *arguments;
     260};
     261
     262class CompositeExprNode2 : public ExpressionNode {
     263  public:
     264        CompositeExprNode2( Expression *expr );
     265        CompositeExprNode2( const CompositeExprNode2 &other );
     266        virtual ~CompositeExprNode2();
     267
     268        virtual CompositeExprNode2 *clone() const { return new CompositeExprNode2( *this ); }
     269        virtual Expression *build() const { return expr->clone(); }
     270
     271        virtual void print( std::ostream &, int indent = 0) const;
     272        virtual void printOneLine( std::ostream &, int indent = 0) const;
     273  private:
     274        Expression *expr;
    252275};
    253276
  • src/Parser/parser.cc

    r76e8c55 r064e3ff  
    354354        LabelNode *label;
    355355        InitializerNode *in;
     356        OperatorNode::Type op;
    356357        bool flag;
    357358
     
    359360
    360361/* Line 293 of yacc.c  */
    361 #line 362 "Parser/parser.cc"
     362#line 363 "Parser/parser.cc"
    362363} YYSTYPE;
    363364# define YYSTYPE_IS_TRIVIAL 1
     
    371372
    372373/* Line 343 of yacc.c  */
    373 #line 374 "Parser/parser.cc"
     374#line 375 "Parser/parser.cc"
    374375
    375376#ifdef short
     
    10161017static const yytype_uint16 yyrline[] =
    10171018{
    1018        0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
    1019      317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
    1020      343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
    1021      369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
    1022      402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
    1023      429,   431,   436,   438,   440,   442,   444,   446,   448,   450,
    1024      452,   454,   456,   463,   464,   466,   470,   471,   472,   473,
    1025      477,   478,   480,   485,   486,   488,   490,   495,   496,   498,
    1026      503,   504,   506,   511,   512,   514,   516,   518,   523,   524,
    1027      526,   531,   532,   537,   538,   543,   544,   549,   550,   555,
    1028      556,   561,   562,   564,   566,   571,   576,   577,   579,   581,
    1029      587,   588,   594,   596,   598,   600,   605,   606,   611,   612,
    1030      613,   614,   615,   616,   617,   618,   619,   620,   624,   625,
    1031      631,   632,   638,   639,   640,   641,   642,   643,   644,   645,
    1032      646,   656,   663,   665,   675,   676,   681,   683,   689,   691,
    1033      695,   696,   701,   706,   709,   711,   713,   723,   725,   736,
    1034      737,   739,   743,   744,   748,   749,   754,   755,   759,   764,
    1035      765,   769,   771,   777,   778,   782,   784,   786,   788,   794,
    1036      795,   799,   801,   806,   808,   810,   815,   817,   822,   824,
    1037      828,   831,   835,   838,   842,   844,   848,   850,   857,   859,
    1038      861,   870,   872,   874,   876,   878,   883,   885,   887,   889,
    1039      894,   907,   908,   913,   915,   920,   924,   926,   928,   930,
    1040      932,   938,   939,   945,   946,   950,   951,   956,   958,   964,
    1041      965,   967,   972,   974,   981,   983,   987,   988,   993,   995,
    1042      999,  1000,  1004,  1006,  1010,  1011,  1015,  1016,  1020,  1021,
    1043     1036,  1037,  1038,  1039,  1040,  1044,  1049,  1056,  1066,  1071,
    1044     1076,  1084,  1089,  1094,  1099,  1104,  1112,  1134,  1139,  1146,
    1045     1148,  1155,  1160,  1165,  1176,  1181,  1186,  1191,  1196,  1205,
    1046     1210,  1218,  1219,  1220,  1221,  1227,  1232,  1240,  1241,  1242,
    1047     1243,  1247,  1248,  1249,  1250,  1255,  1256,  1265,  1266,  1271,
    1048     1272,  1277,  1279,  1281,  1283,  1285,  1288,  1287,  1299,  1300,
    1049     1302,  1312,  1313,  1318,  1322,  1324,  1326,  1328,  1330,  1332,
    1050     1334,  1336,  1341,  1343,  1345,  1347,  1349,  1351,  1353,  1355,
    1051     1357,  1359,  1361,  1363,  1365,  1371,  1372,  1374,  1376,  1378,
    1052     1383,  1384,  1390,  1391,  1393,  1395,  1400,  1402,  1404,  1406,
    1053     1411,  1412,  1414,  1416,  1421,  1422,  1424,  1429,  1430,  1432,
    1054     1434,  1439,  1441,  1443,  1448,  1449,  1453,  1455,  1461,  1460,
    1055     1464,  1466,  1471,  1473,  1479,  1480,  1485,  1486,  1488,  1489,
    1056     1498,  1499,  1501,  1503,  1508,  1510,  1516,  1517,  1519,  1522,
    1057     1525,  1530,  1531,  1536,  1541,  1545,  1547,  1553,  1552,  1559,
    1058     1561,  1567,  1568,  1576,  1577,  1581,  1582,  1583,  1585,  1587,
    1059     1594,  1595,  1597,  1599,  1604,  1605,  1611,  1612,  1616,  1617,
    1060     1622,  1623,  1624,  1626,  1634,  1635,  1637,  1640,  1642,  1646,
    1061     1647,  1648,  1650,  1652,  1656,  1661,  1669,  1670,  1679,  1681,
    1062     1686,  1687,  1688,  1692,  1693,  1694,  1698,  1699,  1700,  1704,
    1063     1705,  1706,  1711,  1712,  1713,  1714,  1720,  1721,  1723,  1728,
    1064     1729,  1734,  1735,  1736,  1737,  1738,  1753,  1754,  1759,  1760,
    1065     1768,  1770,  1772,  1775,  1777,  1779,  1802,  1803,  1805,  1807,
    1066     1812,  1813,  1815,  1820,  1825,  1826,  1832,  1831,  1835,  1839,
    1067     1841,  1843,  1849,  1850,  1855,  1860,  1862,  1867,  1869,  1870,
    1068     1872,  1877,  1879,  1881,  1886,  1888,  1893,  1898,  1906,  1912,
    1069     1911,  1925,  1926,  1931,  1932,  1936,  1941,  1946,  1954,  1959,
    1070     1970,  1971,  1982,  1983,  1989,  1990,  1994,  1995,  1996,  1999,
    1071     1998,  2009,  2018,  2024,  2030,  2039,  2045,  2051,  2057,  2063,
    1072     2071,  2077,  2085,  2091,  2100,  2101,  2102,  2106,  2110,  2112,
    1073     2117,  2118,  2122,  2123,  2128,  2134,  2135,  2138,  2140,  2141,
    1074     2145,  2146,  2147,  2148,  2182,  2184,  2185,  2187,  2192,  2197,
    1075     2202,  2204,  2206,  2211,  2213,  2215,  2217,  2222,  2224,  2233,
    1076     2235,  2236,  2241,  2243,  2245,  2250,  2252,  2254,  2259,  2261,
    1077     2263,  2272,  2273,  2274,  2278,  2280,  2282,  2287,  2289,  2291,
    1078     2296,  2298,  2300,  2315,  2317,  2318,  2320,  2325,  2326,  2331,
    1079     2333,  2335,  2340,  2342,  2344,  2346,  2351,  2353,  2355,  2365,
    1080     2367,  2368,  2370,  2375,  2377,  2379,  2384,  2386,  2388,  2390,
    1081     2395,  2397,  2399,  2430,  2432,  2433,  2435,  2440,  2445,  2453,
    1082     2455,  2457,  2462,  2464,  2469,  2471,  2485,  2486,  2488,  2493,
    1083     2495,  2497,  2499,  2501,  2506,  2507,  2509,  2511,  2516,  2518,
    1084     2520,  2526,  2528,  2530,  2534,  2536,  2538,  2540,  2554,  2555,
    1085     2557,  2562,  2564,  2566,  2568,  2570,  2575,  2576,  2578,  2580,
    1086     2585,  2587,  2589,  2595,  2596,  2598,  2607,  2610,  2612,  2615,
    1087     2617,  2619,  2632,  2633,  2635,  2640,  2642,  2644,  2646,  2648,
    1088     2653,  2654,  2656,  2658,  2663,  2665,  2673,  2674,  2675,  2680,
    1089     2681,  2685,  2687,  2689,  2691,  2693,  2695,  2702,  2704,  2706,
    1090     2708,  2710,  2712,  2714,  2716,  2718,  2720,  2725,  2727,  2729,
    1091     2734,  2760,  2761,  2763,  2767,  2768,  2772,  2774,  2776,  2778,
    1092     2780,  2782,  2789,  2791,  2793,  2795,  2797,  2799,  2804,  2809,
    1093     2811,  2813,  2831,  2833,  2838,  2839
     1019       0,   292,   292,   298,   307,   308,   309,   313,   314,   315,
     1020     319,   320,   324,   325,   329,   330,   334,   335,   341,   343,
     1021     345,   347,   352,   353,   359,   363,   365,   366,   368,   369,
     1022     371,   373,   375,   383,   384,   390,   391,   392,   397,   399,
     1023     404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
     1024     431,   433,   438,   440,   442,   444,   446,   448,   450,   452,
     1025     454,   456,   458,   465,   466,   468,   472,   473,   474,   475,
     1026     479,   480,   482,   487,   488,   490,   492,   497,   498,   500,
     1027     505,   506,   508,   513,   514,   516,   518,   520,   525,   526,
     1028     528,   533,   534,   539,   540,   545,   546,   551,   552,   557,
     1029     558,   563,   564,   566,   568,   573,   578,   579,   581,   583,
     1030     589,   590,   596,   598,   600,   602,   607,   608,   613,   614,
     1031     615,   616,   617,   618,   619,   620,   621,   622,   626,   627,
     1032     633,   634,   640,   641,   642,   643,   644,   645,   646,   647,
     1033     648,   658,   665,   667,   677,   678,   683,   685,   691,   693,
     1034     697,   698,   703,   708,   711,   713,   715,   725,   727,   738,
     1035     739,   741,   745,   747,   751,   752,   757,   758,   762,   767,
     1036     768,   772,   774,   780,   781,   785,   787,   789,   791,   797,
     1037     798,   802,   804,   809,   811,   813,   818,   820,   825,   827,
     1038     831,   834,   838,   841,   845,   847,   851,   853,   860,   862,
     1039     864,   873,   875,   877,   879,   881,   886,   888,   890,   892,
     1040     897,   910,   911,   916,   918,   923,   927,   929,   931,   933,
     1041     935,   941,   942,   948,   949,   953,   954,   959,   961,   967,
     1042     968,   970,   975,   977,   984,   986,   990,   991,   996,   998,
     1043    1002,  1003,  1007,  1009,  1013,  1014,  1018,  1019,  1023,  1024,
     1044    1039,  1040,  1041,  1042,  1043,  1047,  1052,  1059,  1069,  1074,
     1045    1079,  1087,  1092,  1097,  1102,  1107,  1115,  1137,  1142,  1149,
     1046    1151,  1158,  1163,  1168,  1179,  1184,  1189,  1194,  1199,  1208,
     1047    1213,  1221,  1222,  1223,  1224,  1230,  1235,  1243,  1244,  1245,
     1048    1246,  1250,  1251,  1252,  1253,  1258,  1259,  1268,  1269,  1274,
     1049    1275,  1280,  1282,  1284,  1286,  1288,  1291,  1290,  1302,  1303,
     1050    1305,  1315,  1316,  1321,  1325,  1327,  1329,  1331,  1333,  1335,
     1051    1337,  1339,  1344,  1346,  1348,  1350,  1352,  1354,  1356,  1358,
     1052    1360,  1362,  1364,  1366,  1368,  1374,  1375,  1377,  1379,  1381,
     1053    1386,  1387,  1393,  1394,  1396,  1398,  1403,  1405,  1407,  1409,
     1054    1414,  1415,  1417,  1419,  1424,  1425,  1427,  1432,  1433,  1435,
     1055    1437,  1442,  1444,  1446,  1451,  1452,  1456,  1458,  1464,  1463,
     1056    1467,  1469,  1474,  1476,  1482,  1483,  1488,  1489,  1491,  1492,
     1057    1501,  1502,  1504,  1506,  1511,  1513,  1519,  1520,  1522,  1525,
     1058    1528,  1533,  1534,  1539,  1544,  1548,  1550,  1556,  1555,  1562,
     1059    1564,  1570,  1571,  1579,  1580,  1584,  1585,  1586,  1588,  1590,
     1060    1597,  1598,  1600,  1602,  1607,  1608,  1614,  1615,  1619,  1620,
     1061    1625,  1626,  1627,  1629,  1637,  1638,  1640,  1643,  1645,  1649,
     1062    1650,  1651,  1653,  1655,  1659,  1664,  1672,  1673,  1682,  1684,
     1063    1689,  1690,  1691,  1695,  1696,  1697,  1701,  1702,  1703,  1707,
     1064    1708,  1709,  1714,  1715,  1716,  1717,  1723,  1724,  1726,  1731,
     1065    1732,  1737,  1738,  1739,  1740,  1741,  1756,  1757,  1762,  1763,
     1066    1771,  1773,  1775,  1778,  1780,  1782,  1805,  1806,  1808,  1810,
     1067    1815,  1816,  1818,  1823,  1828,  1829,  1835,  1834,  1838,  1842,
     1068    1844,  1846,  1852,  1853,  1858,  1863,  1865,  1870,  1872,  1873,
     1069    1875,  1880,  1882,  1884,  1889,  1891,  1896,  1901,  1909,  1915,
     1070    1914,  1928,  1929,  1934,  1935,  1939,  1944,  1949,  1957,  1962,
     1071    1973,  1974,  1985,  1986,  1992,  1993,  1997,  1998,  1999,  2002,
     1072    2001,  2012,  2021,  2027,  2033,  2042,  2048,  2054,  2060,  2066,
     1073    2074,  2080,  2088,  2094,  2103,  2104,  2105,  2109,  2113,  2115,
     1074    2120,  2121,  2125,  2126,  2131,  2137,  2138,  2141,  2143,  2144,
     1075    2148,  2149,  2150,  2151,  2185,  2187,  2188,  2190,  2195,  2200,
     1076    2205,  2207,  2209,  2214,  2216,  2218,  2220,  2225,  2227,  2236,
     1077    2238,  2239,  2244,  2246,  2248,  2253,  2255,  2257,  2262,  2264,
     1078    2266,  2275,  2276,  2277,  2281,  2283,  2285,  2290,  2292,  2294,
     1079    2299,  2301,  2303,  2318,  2320,  2321,  2323,  2328,  2329,  2334,
     1080    2336,  2338,  2343,  2345,  2347,  2349,  2354,  2356,  2358,  2368,
     1081    2370,  2371,  2373,  2378,  2380,  2382,  2387,  2389,  2391,  2393,
     1082    2398,  2400,  2402,  2433,  2435,  2436,  2438,  2443,  2448,  2456,
     1083    2458,  2460,  2465,  2467,  2472,  2474,  2488,  2489,  2491,  2496,
     1084    2498,  2500,  2502,  2504,  2509,  2510,  2512,  2514,  2519,  2521,
     1085    2523,  2529,  2531,  2533,  2537,  2539,  2541,  2543,  2557,  2558,
     1086    2560,  2565,  2567,  2569,  2571,  2573,  2578,  2579,  2581,  2583,
     1087    2588,  2590,  2592,  2598,  2599,  2601,  2610,  2613,  2615,  2618,
     1088    2620,  2622,  2635,  2636,  2638,  2643,  2645,  2647,  2649,  2651,
     1089    2656,  2657,  2659,  2661,  2666,  2668,  2676,  2677,  2678,  2683,
     1090    2684,  2688,  2690,  2692,  2694,  2696,  2698,  2705,  2707,  2709,
     1091    2711,  2713,  2715,  2717,  2719,  2721,  2723,  2728,  2730,  2732,
     1092    2737,  2763,  2764,  2766,  2770,  2771,  2775,  2777,  2779,  2781,
     1093    2783,  2785,  2792,  2794,  2796,  2798,  2800,  2802,  2807,  2812,
     1094    2814,  2816,  2834,  2836,  2841,  2842
    10941095};
    10951096#endif
     
    52165217
    52175218/* Line 1806 of yacc.c  */
    5218 #line 290 "parser.yy"
     5219#line 292 "parser.yy"
    52195220    {
    52205221                        typedefTable.enterScope();
     
    52255226
    52265227/* Line 1806 of yacc.c  */
    5227 #line 296 "parser.yy"
     5228#line 298 "parser.yy"
    52285229    {
    52295230                        typedefTable.leaveScope();
     
    52345235
    52355236/* Line 1806 of yacc.c  */
    5236 #line 305 "parser.yy"
     5237#line 307 "parser.yy"
    52375238    { (yyval.constant) = makeConstantInteger( *(yyvsp[(1) - (1)].tok) ); }
    52385239    break;
     
    52415242
    52425243/* Line 1806 of yacc.c  */
    5243 #line 306 "parser.yy"
     5244#line 308 "parser.yy"
    52445245    { (yyval.constant) = makeConstantFloat( *(yyvsp[(1) - (1)].tok) ); }
    52455246    break;
     
    52485249
    52495250/* Line 1806 of yacc.c  */
    5250 #line 307 "parser.yy"
     5251#line 309 "parser.yy"
    52515252    { (yyval.constant) = makeConstantChar( *(yyvsp[(1) - (1)].tok) ); }
    52525253    break;
     
    52555256
    52565257/* Line 1806 of yacc.c  */
    5257 #line 332 "parser.yy"
     5258#line 334 "parser.yy"
    52585259    { (yyval.constant) = makeConstantStr( *(yyvsp[(1) - (1)].tok) ); }
    52595260    break;
     
    52625263
    52635264/* Line 1806 of yacc.c  */
    5264 #line 333 "parser.yy"
     5265#line 335 "parser.yy"
    52655266    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
    52665267    break;
    52675268
    52685269  case 18:
    5269 
    5270 /* Line 1806 of yacc.c  */
    5271 #line 340 "parser.yy"
    5272     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    5273     break;
    5274 
    5275   case 19:
    52765270
    52775271/* Line 1806 of yacc.c  */
     
    52805274    break;
    52815275
     5276  case 19:
     5277
     5278/* Line 1806 of yacc.c  */
     5279#line 344 "parser.yy"
     5280    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     5281    break;
     5282
    52825283  case 20:
    52835284
    52845285/* Line 1806 of yacc.c  */
    5285 #line 344 "parser.yy"
     5286#line 346 "parser.yy"
    52865287    { (yyval.en) = (yyvsp[(2) - (3)].en); }
    52875288    break;
     
    52905291
    52915292/* Line 1806 of yacc.c  */
    5292 #line 346 "parser.yy"
     5293#line 348 "parser.yy"
    52935294    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
    52945295    break;
     
    52975298
    52985299/* Line 1806 of yacc.c  */
    5299 #line 356 "parser.yy"
     5300#line 358 "parser.yy"
    53005301    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
    53015302    break;
     
    53045305
    53055306/* Line 1806 of yacc.c  */
    5306 #line 358 "parser.yy"
     5307#line 360 "parser.yy"
    53075308    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
    53085309    break;
     
    53115312
    53125313/* Line 1806 of yacc.c  */
    5313 #line 362 "parser.yy"
    5314     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     5314#line 364 "parser.yy"
     5315    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
    53155316    break;
    53165317
     
    53185319
    53195320/* Line 1806 of yacc.c  */
    5320 #line 365 "parser.yy"
    5321     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     5321#line 367 "parser.yy"
     5322    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
    53225323    break;
    53235324
     
    53255326
    53265327/* Line 1806 of yacc.c  */
    5327 #line 368 "parser.yy"
     5328#line 370 "parser.yy"
    53285329    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
    53295330    break;
     
    53325333
    53335334/* Line 1806 of yacc.c  */
    5334 #line 370 "parser.yy"
     5335#line 372 "parser.yy"
    53355336    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
    53365337    break;
     
    53395340
    53405341/* Line 1806 of yacc.c  */
    5341 #line 372 "parser.yy"
     5342#line 374 "parser.yy"
    53425343    { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
    53435344    break;
     
    53465347
    53475348/* Line 1806 of yacc.c  */
    5348 #line 374 "parser.yy"
     5349#line 376 "parser.yy"
    53495350    {
    53505351                        Token fn; fn.str = new std::string( "?{}" ); // location undefined
     
    53565357
    53575358/* Line 1806 of yacc.c  */
    5358 #line 383 "parser.yy"
     5359#line 385 "parser.yy"
    53595360    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    53605361    break;
     
    53635364
    53645365/* Line 1806 of yacc.c  */
    5365 #line 388 "parser.yy"
     5366#line 390 "parser.yy"
    53665367    { (yyval.en) = 0; }
    53675368    break;
     
    53705371
    53715372/* Line 1806 of yacc.c  */
    5372 #line 391 "parser.yy"
     5373#line 393 "parser.yy"
    53735374    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
    53745375    break;
     
    53775378
    53785379/* Line 1806 of yacc.c  */
    5379 #line 396 "parser.yy"
     5380#line 398 "parser.yy"
    53805381    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
    53815382    break;
     
    53845385
    53855386/* Line 1806 of yacc.c  */
    5386 #line 398 "parser.yy"
     5387#line 400 "parser.yy"
    53875388    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
    53885389    break;
     
    53915392
    53925393/* Line 1806 of yacc.c  */
    5393 #line 403 "parser.yy"
     5394#line 405 "parser.yy"
    53945395    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    53955396    break;
     
    53985399
    53995400/* Line 1806 of yacc.c  */
    5400 #line 408 "parser.yy"
     5401#line 410 "parser.yy"
    54015402    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    54025403    break;
     
    54055406
    54065407/* Line 1806 of yacc.c  */
    5407 #line 412 "parser.yy"
    5408     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     5408#line 414 "parser.yy"
     5409    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
    54095410    break;
    54105411
     
    54125413
    54135414/* Line 1806 of yacc.c  */
    5414 #line 414 "parser.yy"
    5415     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     5415#line 416 "parser.yy"
     5416    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
    54165417    break;
    54175418
     
    54195420
    54205421/* Line 1806 of yacc.c  */
    5421 #line 416 "parser.yy"
    5422     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     5422#line 418 "parser.yy"
     5423    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
    54235424    break;
    54245425
     
    54265427
    54275428/* Line 1806 of yacc.c  */
    5428 #line 418 "parser.yy"
    5429     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     5429#line 420 "parser.yy"
     5430    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
    54305431    break;
    54315432
    54325433  case 48:
    5433 
    5434 /* Line 1806 of yacc.c  */
    5435 #line 426 "parser.yy"
    5436     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    5437     break;
    5438 
    5439   case 49:
    54405434
    54415435/* Line 1806 of yacc.c  */
     
    54445438    break;
    54455439
     5440  case 49:
     5441
     5442/* Line 1806 of yacc.c  */
     5443#line 430 "parser.yy"
     5444    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     5445    break;
     5446
    54465447  case 50:
    54475448
    54485449/* Line 1806 of yacc.c  */
    5449 #line 430 "parser.yy"
     5450#line 432 "parser.yy"
    54505451    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
    54515452    break;
     
    54545455
    54555456/* Line 1806 of yacc.c  */
    5456 #line 432 "parser.yy"
     5457#line 434 "parser.yy"
     5458    { (yyval.en) = (yyvsp[(1) - (2)].op) == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( (yyvsp[(2) - (2)].en) ) ) : (ExpressionNode*)new CompositeExprNode( new OperatorNode ( (yyvsp[(1) - (2)].op) ), (yyvsp[(2) - (2)].en) ); }
     5459    break;
     5460
     5461  case 52:
     5462
     5463/* Line 1806 of yacc.c  */
     5464#line 439 "parser.yy"
    54575465    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    54585466    break;
    54595467
    5460   case 52:
    5461 
    5462 /* Line 1806 of yacc.c  */
    5463 #line 437 "parser.yy"
    5464     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    5465     break;
    5466 
    54675468  case 53:
    54685469
    54695470/* Line 1806 of yacc.c  */
    5470 #line 439 "parser.yy"
     5471#line 441 "parser.yy"
    54715472    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
    54725473    break;
     
    54755476
    54765477/* Line 1806 of yacc.c  */
    5477 #line 441 "parser.yy"
     5478#line 443 "parser.yy"
    54785479    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
    54795480    break;
     
    54825483
    54835484/* Line 1806 of yacc.c  */
    5484 #line 443 "parser.yy"
    5485     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     5485#line 445 "parser.yy"
     5486    { (yyval.en) = new CompositeExprNode2( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
    54865487    break;
    54875488
     
    54895490
    54905491/* Line 1806 of yacc.c  */
    5491 #line 445 "parser.yy"
    5492     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5492#line 447 "parser.yy"
     5493    { (yyval.en) = new CompositeExprNode2( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
    54935494    break;
    54945495
     
    54965497
    54975498/* Line 1806 of yacc.c  */
    5498 #line 447 "parser.yy"
    5499     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
     5499#line 449 "parser.yy"
     5500    { (yyval.en) = new CompositeExprNode2( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
    55005501    break;
    55015502
     
    55035504
    55045505/* Line 1806 of yacc.c  */
    5505 #line 449 "parser.yy"
     5506#line 451 "parser.yy"
    55065507    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
    55075508    break;
     
    55105511
    55115512/* Line 1806 of yacc.c  */
    5512 #line 451 "parser.yy"
     5513#line 453 "parser.yy"
    55135514    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    55145515    break;
     
    55175518
    55185519/* Line 1806 of yacc.c  */
    5519 #line 453 "parser.yy"
     5520#line 455 "parser.yy"
    55205521    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
    55215522    break;
     
    55245525
    55255526/* Line 1806 of yacc.c  */
    5526 #line 455 "parser.yy"
    5527     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     5527#line 457 "parser.yy"
     5528    { (yyval.en) = new CompositeExprNode2( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
    55285529    break;
    55295530
     
    55315532
    55325533/* Line 1806 of yacc.c  */
    5533 #line 457 "parser.yy"
    5534     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
     5534#line 459 "parser.yy"
     5535    { (yyval.en) = new CompositeExprNode2( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
    55355536    break;
    55365537
     
    55385539
    55395540/* Line 1806 of yacc.c  */
    5540 #line 463 "parser.yy"
    5541     { (yyval.en) = new OperatorNode( OperatorNode::PointTo ); }
     5541#line 465 "parser.yy"
     5542    { (yyval.op) = OperatorNode::PointTo; }
    55425543    break;
    55435544
     
    55455546
    55465547/* Line 1806 of yacc.c  */
    5547 #line 464 "parser.yy"
    5548     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     5548#line 466 "parser.yy"
     5549    { (yyval.op) = OperatorNode::AddressOf; }
    55495550    break;
    55505551
     
    55525553
    55535554/* Line 1806 of yacc.c  */
    5554 #line 466 "parser.yy"
    5555     { (yyval.en) = new OperatorNode( OperatorNode::And ); }
     5555#line 468 "parser.yy"
     5556    { (yyval.op) = OperatorNode::And; }
    55565557    break;
    55575558
     
    55595560
    55605561/* Line 1806 of yacc.c  */
    5561 #line 470 "parser.yy"
     5562#line 472 "parser.yy"
    55625563    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
    55635564    break;
     
    55665567
    55675568/* Line 1806 of yacc.c  */
    5568 #line 471 "parser.yy"
     5569#line 473 "parser.yy"
    55695570    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
    55705571    break;
     
    55735574
    55745575/* Line 1806 of yacc.c  */
    5575 #line 472 "parser.yy"
     5576#line 474 "parser.yy"
    55765577    { (yyval.en) = new OperatorNode( OperatorNode::Neg ); }
    55775578    break;
     
    55805581
    55815582/* Line 1806 of yacc.c  */
    5582 #line 473 "parser.yy"
     5583#line 475 "parser.yy"
    55835584    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
    55845585    break;
     
    55875588
    55885589/* Line 1806 of yacc.c  */
    5589 #line 479 "parser.yy"
    5590     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5590#line 481 "parser.yy"
     5591    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
    55915592    break;
    55925593
     
    55945595
    55955596/* Line 1806 of yacc.c  */
    5596 #line 481 "parser.yy"
    5597     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5597#line 483 "parser.yy"
     5598    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
    55985599    break;
    55995600
     
    56015602
    56025603/* Line 1806 of yacc.c  */
    5603 #line 487 "parser.yy"
     5604#line 489 "parser.yy"
    56045605    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56055606    break;
     
    56085609
    56095610/* Line 1806 of yacc.c  */
    5610 #line 489 "parser.yy"
     5611#line 491 "parser.yy"
    56115612    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56125613    break;
     
    56155616
    56165617/* Line 1806 of yacc.c  */
    5617 #line 491 "parser.yy"
     5618#line 493 "parser.yy"
    56185619    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56195620    break;
     
    56225623
    56235624/* Line 1806 of yacc.c  */
    5624 #line 497 "parser.yy"
     5625#line 499 "parser.yy"
    56255626    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56265627    break;
     
    56295630
    56305631/* Line 1806 of yacc.c  */
    5631 #line 499 "parser.yy"
     5632#line 501 "parser.yy"
    56325633    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56335634    break;
     
    56365637
    56375638/* Line 1806 of yacc.c  */
    5638 #line 505 "parser.yy"
     5639#line 507 "parser.yy"
    56395640    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56405641    break;
     
    56435644
    56445645/* Line 1806 of yacc.c  */
    5645 #line 507 "parser.yy"
     5646#line 509 "parser.yy"
    56465647    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56475648    break;
     
    56505651
    56515652/* Line 1806 of yacc.c  */
    5652 #line 513 "parser.yy"
     5653#line 515 "parser.yy"
    56535654    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56545655    break;
     
    56575658
    56585659/* Line 1806 of yacc.c  */
    5659 #line 515 "parser.yy"
     5660#line 517 "parser.yy"
    56605661    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56615662    break;
     
    56645665
    56655666/* Line 1806 of yacc.c  */
    5666 #line 517 "parser.yy"
     5667#line 519 "parser.yy"
    56675668    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56685669    break;
     
    56715672
    56725673/* Line 1806 of yacc.c  */
    5673 #line 519 "parser.yy"
     5674#line 521 "parser.yy"
    56745675    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56755676    break;
     
    56785679
    56795680/* Line 1806 of yacc.c  */
    5680 #line 525 "parser.yy"
     5681#line 527 "parser.yy"
    56815682    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56825683    break;
     
    56855686
    56865687/* Line 1806 of yacc.c  */
    5687 #line 527 "parser.yy"
     5688#line 529 "parser.yy"
    56885689    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56895690    break;
     
    56925693
    56935694/* Line 1806 of yacc.c  */
    5694 #line 533 "parser.yy"
     5695#line 535 "parser.yy"
    56955696    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56965697    break;
     
    56995700
    57005701/* Line 1806 of yacc.c  */
    5701 #line 539 "parser.yy"
     5702#line 541 "parser.yy"
    57025703    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57035704    break;
     
    57065707
    57075708/* Line 1806 of yacc.c  */
    5708 #line 545 "parser.yy"
     5709#line 547 "parser.yy"
    57095710    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57105711    break;
     
    57135714
    57145715/* Line 1806 of yacc.c  */
    5715 #line 551 "parser.yy"
     5716#line 553 "parser.yy"
    57165717    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57175718    break;
     
    57205721
    57215722/* Line 1806 of yacc.c  */
    5722 #line 557 "parser.yy"
     5723#line 559 "parser.yy"
    57235724    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57245725    break;
     
    57275728
    57285729/* Line 1806 of yacc.c  */
    5729 #line 563 "parser.yy"
     5730#line 565 "parser.yy"
    57305731    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    57315732    break;
     
    57345735
    57355736/* Line 1806 of yacc.c  */
    5736 #line 565 "parser.yy"
     5737#line 567 "parser.yy"
    57375738    { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    57385739    break;
     
    57415742
    57425743/* Line 1806 of yacc.c  */
    5743 #line 567 "parser.yy"
     5744#line 569 "parser.yy"
    57445745    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    57455746    break;
     
    57485749
    57495750/* Line 1806 of yacc.c  */
    5750 #line 578 "parser.yy"
     5751#line 580 "parser.yy"
    57515752    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57525753    break;
     
    57555756
    57565757/* Line 1806 of yacc.c  */
    5757 #line 580 "parser.yy"
     5758#line 582 "parser.yy"
    57585759    { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57595760    break;
     
    57625763
    57635764/* Line 1806 of yacc.c  */
    5764 #line 582 "parser.yy"
     5765#line 584 "parser.yy"
    57655766    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    57665767    break;
     
    57695770
    57705771/* Line 1806 of yacc.c  */
    5771 #line 587 "parser.yy"
     5772#line 589 "parser.yy"
    57725773    { (yyval.en) = new NullExprNode; }
    57735774    break;
     
    57765777
    57775778/* Line 1806 of yacc.c  */
    5778 #line 595 "parser.yy"
     5779#line 597 "parser.yy"
    57795780    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
    57805781    break;
     
    57835784
    57845785/* Line 1806 of yacc.c  */
    5785 #line 597 "parser.yy"
     5786#line 599 "parser.yy"
    57865787    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
    57875788    break;
     
    57905791
    57915792/* Line 1806 of yacc.c  */
    5792 #line 599 "parser.yy"
     5793#line 601 "parser.yy"
    57935794    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
    57945795    break;
     
    57975798
    57985799/* Line 1806 of yacc.c  */
    5799 #line 601 "parser.yy"
     5800#line 603 "parser.yy"
    58005801    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
    58015802    break;
     
    58045805
    58055806/* Line 1806 of yacc.c  */
    5806 #line 607 "parser.yy"
     5807#line 609 "parser.yy"
    58075808    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    58085809    break;
     
    58115812
    58125813/* Line 1806 of yacc.c  */
    5813 #line 611 "parser.yy"
     5814#line 613 "parser.yy"
    58145815    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
    58155816    break;
     
    58185819
    58195820/* Line 1806 of yacc.c  */
    5820 #line 612 "parser.yy"
     5821#line 614 "parser.yy"
    58215822    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
    58225823    break;
     
    58255826
    58265827/* Line 1806 of yacc.c  */
    5827 #line 613 "parser.yy"
     5828#line 615 "parser.yy"
    58285829    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
    58295830    break;
     
    58325833
    58335834/* Line 1806 of yacc.c  */
    5834 #line 614 "parser.yy"
     5835#line 616 "parser.yy"
    58355836    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
    58365837    break;
     
    58395840
    58405841/* Line 1806 of yacc.c  */
    5841 #line 615 "parser.yy"
     5842#line 617 "parser.yy"
    58425843    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
    58435844    break;
     
    58465847
    58475848/* Line 1806 of yacc.c  */
    5848 #line 616 "parser.yy"
     5849#line 618 "parser.yy"
    58495850    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
    58505851    break;
     
    58535854
    58545855/* Line 1806 of yacc.c  */
    5855 #line 617 "parser.yy"
     5856#line 619 "parser.yy"
    58565857    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
    58575858    break;
     
    58605861
    58615862/* Line 1806 of yacc.c  */
    5862 #line 618 "parser.yy"
     5863#line 620 "parser.yy"
    58635864    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
    58645865    break;
     
    58675868
    58685869/* Line 1806 of yacc.c  */
    5869 #line 619 "parser.yy"
     5870#line 621 "parser.yy"
    58705871    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
    58715872    break;
     
    58745875
    58755876/* Line 1806 of yacc.c  */
    5876 #line 620 "parser.yy"
     5877#line 622 "parser.yy"
    58775878    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
    58785879    break;
     
    58815882
    58825883/* Line 1806 of yacc.c  */
    5883 #line 626 "parser.yy"
     5884#line 628 "parser.yy"
    58845885    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    58855886    break;
     
    58885889
    58895890/* Line 1806 of yacc.c  */
    5890 #line 631 "parser.yy"
     5891#line 633 "parser.yy"
    58915892    { (yyval.en) = 0; }
    58925893    break;
     
    58955896
    58965897/* Line 1806 of yacc.c  */
    5897 #line 640 "parser.yy"
     5898#line 642 "parser.yy"
    58985899    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    58995900    break;
     
    59025903
    59035904/* Line 1806 of yacc.c  */
    5904 #line 647 "parser.yy"
     5905#line 649 "parser.yy"
    59055906    {
    59065907                        Token fn; fn.str = new std::string( "^?{}" ); // location undefined
     
    59135914
    59145915/* Line 1806 of yacc.c  */
    5915 #line 657 "parser.yy"
     5916#line 659 "parser.yy"
    59165917    {
    59175918                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    59225923
    59235924/* Line 1806 of yacc.c  */
    5924 #line 664 "parser.yy"
     5925#line 666 "parser.yy"
    59255926    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
    59265927    break;
     
    59295930
    59305931/* Line 1806 of yacc.c  */
    5931 #line 671 "parser.yy"
     5932#line 673 "parser.yy"
    59325933    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
    59335934    break;
     
    59365937
    59375938/* Line 1806 of yacc.c  */
    5938 #line 677 "parser.yy"
     5939#line 679 "parser.yy"
    59395940    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    59405941    break;
     
    59435944
    59445945/* Line 1806 of yacc.c  */
    5945 #line 682 "parser.yy"
     5946#line 684 "parser.yy"
    59465947    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    59475948    break;
     
    59505951
    59515952/* Line 1806 of yacc.c  */
    5952 #line 684 "parser.yy"
     5953#line 686 "parser.yy"
    59535954    {   // mark all fields in list
    59545955                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     
    59615962
    59625963/* Line 1806 of yacc.c  */
    5963 #line 690 "parser.yy"
     5964#line 692 "parser.yy"
    59645965    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    59655966    break;
     
    59685969
    59695970/* Line 1806 of yacc.c  */
    5970 #line 697 "parser.yy"
     5971#line 699 "parser.yy"
    59715972    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    59725973    break;
     
    59755976
    59765977/* Line 1806 of yacc.c  */
    5977 #line 702 "parser.yy"
     5978#line 704 "parser.yy"
    59785979    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    59795980    break;
     
    59825983
    59835984/* Line 1806 of yacc.c  */
    5984 #line 708 "parser.yy"
     5985#line 710 "parser.yy"
    59855986    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    59865987    break;
     
    59895990
    59905991/* Line 1806 of yacc.c  */
    5991 #line 710 "parser.yy"
     5992#line 712 "parser.yy"
    59925993    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    59935994    break;
     
    59965997
    59975998/* Line 1806 of yacc.c  */
    5998 #line 712 "parser.yy"
     5999#line 714 "parser.yy"
    59996000    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    60006001    break;
     
    60036004
    60046005/* Line 1806 of yacc.c  */
    6005 #line 714 "parser.yy"
     6006#line 716 "parser.yy"
    60066007    {
    60076008                        StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
     
    60186019
    60196020/* Line 1806 of yacc.c  */
    6020 #line 724 "parser.yy"
     6021#line 726 "parser.yy"
    60216022    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    60226023    break;
     
    60256026
    60266027/* Line 1806 of yacc.c  */
    6027 #line 726 "parser.yy"
     6028#line 728 "parser.yy"
    60286029    {
    60296030                        StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
     
    60356036
    60366037/* Line 1806 of yacc.c  */
    6037 #line 736 "parser.yy"
     6038#line 738 "parser.yy"
    60386039    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    60396040    break;
     
    60426043
    60436044/* Line 1806 of yacc.c  */
    6044 #line 738 "parser.yy"
     6045#line 740 "parser.yy"
    60456046    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    60466047    break;
     
    60496050
    60506051/* Line 1806 of yacc.c  */
    6051 #line 743 "parser.yy"
     6052#line 745 "parser.yy"
    60526053    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
    60536054    break;
     
    60566057
    60576058/* Line 1806 of yacc.c  */
    6058 #line 744 "parser.yy"
     6059#line 747 "parser.yy"
    60596060    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
    60606061    break;
     
    60636064
    60646065/* Line 1806 of yacc.c  */
    6065 #line 748 "parser.yy"
     6066#line 751 "parser.yy"
    60666067    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
    60676068    break;
     
    60706071
    60716072/* Line 1806 of yacc.c  */
    6072 #line 749 "parser.yy"
     6073#line 752 "parser.yy"
    60736074    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    60746075    break;
     
    60776078
    60786079/* Line 1806 of yacc.c  */
    6079 #line 755 "parser.yy"
     6080#line 758 "parser.yy"
    60806081    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    60816082    break;
     
    60846085
    60856086/* Line 1806 of yacc.c  */
    6086 #line 759 "parser.yy"
     6087#line 762 "parser.yy"
    60876088    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
    60886089    break;
     
    60916092
    60926093/* Line 1806 of yacc.c  */
    6093 #line 764 "parser.yy"
     6094#line 767 "parser.yy"
    60946095    { (yyval.sn) = 0; }
    60956096    break;
     
    60986099
    60996100/* Line 1806 of yacc.c  */
    6100 #line 770 "parser.yy"
     6101#line 773 "parser.yy"
    61016102    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
    61026103    break;
     
    61056106
    61066107/* Line 1806 of yacc.c  */
    6107 #line 772 "parser.yy"
     6108#line 775 "parser.yy"
    61086109    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
    61096110    break;
     
    61126113
    61136114/* Line 1806 of yacc.c  */
    6114 #line 777 "parser.yy"
     6115#line 780 "parser.yy"
    61156116    { (yyval.sn) = 0; }
    61166117    break;
     
    61196120
    61206121/* Line 1806 of yacc.c  */
    6121 #line 783 "parser.yy"
     6122#line 786 "parser.yy"
    61226123    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    61236124    break;
     
    61266127
    61276128/* Line 1806 of yacc.c  */
    6128 #line 785 "parser.yy"
     6129#line 788 "parser.yy"
    61296130    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
    61306131    break;
     
    61336134
    61346135/* Line 1806 of yacc.c  */
    6135 #line 787 "parser.yy"
     6136#line 790 "parser.yy"
    61366137    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    61376138    break;
     
    61406141
    61416142/* Line 1806 of yacc.c  */
    6142 #line 789 "parser.yy"
     6143#line 792 "parser.yy"
    61436144    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
    61446145    break;
     
    61476148
    61486149/* Line 1806 of yacc.c  */
    6149 #line 794 "parser.yy"
     6150#line 797 "parser.yy"
    61506151    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    61516152    break;
     
    61546155
    61556156/* Line 1806 of yacc.c  */
    6156 #line 800 "parser.yy"
     6157#line 803 "parser.yy"
    61576158    { (yyval.sn) = 0; }
    61586159    break;
     
    61616162
    61626163/* Line 1806 of yacc.c  */
    6163 #line 802 "parser.yy"
     6164#line 805 "parser.yy"
    61646165    { (yyval.sn) = 0; }
    61656166    break;
     
    61686169
    61696170/* Line 1806 of yacc.c  */
    6170 #line 807 "parser.yy"
     6171#line 810 "parser.yy"
    61716172    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    61726173    break;
     
    61756176
    61766177/* Line 1806 of yacc.c  */
    6177 #line 809 "parser.yy"
     6178#line 812 "parser.yy"
    61786179    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    61796180    break;
     
    61826183
    61836184/* Line 1806 of yacc.c  */
    6184 #line 811 "parser.yy"
     6185#line 814 "parser.yy"
    61856186    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    61866187    break;
     
    61896190
    61906191/* Line 1806 of yacc.c  */
    6191 #line 816 "parser.yy"
     6192#line 819 "parser.yy"
    61926193    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    61936194    break;
     
    61966197
    61976198/* Line 1806 of yacc.c  */
    6198 #line 818 "parser.yy"
     6199#line 821 "parser.yy"
    61996200    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    62006201    break;
     
    62036204
    62046205/* Line 1806 of yacc.c  */
    6205 #line 823 "parser.yy"
     6206#line 826 "parser.yy"
    62066207    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    62076208    break;
     
    62106211
    62116212/* Line 1806 of yacc.c  */
    6212 #line 827 "parser.yy"
     6213#line 830 "parser.yy"
    62136214    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    62146215    break;
     
    62176218
    62186219/* Line 1806 of yacc.c  */
    6219 #line 830 "parser.yy"
     6220#line 833 "parser.yy"
    62206221    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    62216222    break;
     
    62246225
    62256226/* Line 1806 of yacc.c  */
    6226 #line 834 "parser.yy"
     6227#line 837 "parser.yy"
    62276228    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    62286229    break;
     
    62316232
    62326233/* Line 1806 of yacc.c  */
    6233 #line 837 "parser.yy"
     6234#line 840 "parser.yy"
    62346235    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    62356236    break;
     
    62386239
    62396240/* Line 1806 of yacc.c  */
    6240 #line 841 "parser.yy"
     6241#line 844 "parser.yy"
    62416242    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    62426243    break;
     
    62456246
    62466247/* Line 1806 of yacc.c  */
    6247 #line 843 "parser.yy"
     6248#line 846 "parser.yy"
    62486249    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    62496250    break;
     
    62526253
    62536254/* Line 1806 of yacc.c  */
    6254 #line 845 "parser.yy"
     6255#line 848 "parser.yy"
    62556256    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    62566257    break;
     
    62596260
    62606261/* Line 1806 of yacc.c  */
    6261 #line 849 "parser.yy"
     6262#line 852 "parser.yy"
    62626263    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    62636264    break;
     
    62666267
    62676268/* Line 1806 of yacc.c  */
    6268 #line 851 "parser.yy"
     6269#line 854 "parser.yy"
    62696270    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    62706271    break;
     
    62736274
    62746275/* Line 1806 of yacc.c  */
    6275 #line 858 "parser.yy"
     6276#line 861 "parser.yy"
    62766277    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    62776278    break;
     
    62806281
    62816282/* Line 1806 of yacc.c  */
    6282 #line 860 "parser.yy"
     6283#line 863 "parser.yy"
    62836284    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    62846285    break;
     
    62876288
    62886289/* Line 1806 of yacc.c  */
    6289 #line 862 "parser.yy"
     6290#line 865 "parser.yy"
    62906291    {
    62916292                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    62976298
    62986299/* Line 1806 of yacc.c  */
    6299 #line 873 "parser.yy"
     6300#line 876 "parser.yy"
    63006301    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    63016302    break;
     
    63046305
    63056306/* Line 1806 of yacc.c  */
    6306 #line 875 "parser.yy"
     6307#line 878 "parser.yy"
    63076308    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    63086309    break;
     
    63116312
    63126313/* Line 1806 of yacc.c  */
    6313 #line 877 "parser.yy"
     6314#line 880 "parser.yy"
    63146315    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    63156316    break;
     
    63186319
    63196320/* Line 1806 of yacc.c  */
    6320 #line 879 "parser.yy"
     6321#line 882 "parser.yy"
    63216322    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    63226323    break;
     
    63256326
    63266327/* Line 1806 of yacc.c  */
    6327 #line 884 "parser.yy"
     6328#line 887 "parser.yy"
    63286329    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    63296330    break;
     
    63326333
    63336334/* Line 1806 of yacc.c  */
    6334 #line 886 "parser.yy"
     6335#line 889 "parser.yy"
    63356336    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    63366337    break;
     
    63396340
    63406341/* Line 1806 of yacc.c  */
    6341 #line 888 "parser.yy"
     6342#line 891 "parser.yy"
    63426343    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    63436344    break;
     
    63466347
    63476348/* Line 1806 of yacc.c  */
    6348 #line 890 "parser.yy"
     6349#line 893 "parser.yy"
    63496350    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    63506351    break;
     
    63536354
    63546355/* Line 1806 of yacc.c  */
    6355 #line 895 "parser.yy"
     6356#line 898 "parser.yy"
    63566357    {
    63576358                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    63636364
    63646365/* Line 1806 of yacc.c  */
    6365 #line 909 "parser.yy"
     6366#line 912 "parser.yy"
    63666367    {
    63676368                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63736374
    63746375/* Line 1806 of yacc.c  */
    6375 #line 914 "parser.yy"
     6376#line 917 "parser.yy"
    63766377    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    63776378    break;
     
    63806381
    63816382/* Line 1806 of yacc.c  */
    6382 #line 916 "parser.yy"
     6383#line 919 "parser.yy"
    63836384    {
    63846385                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63906391
    63916392/* Line 1806 of yacc.c  */
    6392 #line 925 "parser.yy"
     6393#line 928 "parser.yy"
    63936394    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
    63946395    break;
     
    63976398
    63986399/* Line 1806 of yacc.c  */
    6399 #line 927 "parser.yy"
     6400#line 930 "parser.yy"
    64006401    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
    64016402    break;
     
    64046405
    64056406/* Line 1806 of yacc.c  */
    6406 #line 929 "parser.yy"
     6407#line 932 "parser.yy"
    64076408    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
    64086409    break;
     
    64116412
    64126413/* Line 1806 of yacc.c  */
    6413 #line 931 "parser.yy"
     6414#line 934 "parser.yy"
    64146415    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
    64156416    break;
     
    64186419
    64196420/* Line 1806 of yacc.c  */
    6420 #line 933 "parser.yy"
     6421#line 936 "parser.yy"
    64216422    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
    64226423    break;
     
    64256426
    64266427/* Line 1806 of yacc.c  */
    6427 #line 938 "parser.yy"
     6428#line 941 "parser.yy"
    64286429    { (yyval.flag) = false; }
    64296430    break;
     
    64326433
    64336434/* Line 1806 of yacc.c  */
    6434 #line 940 "parser.yy"
     6435#line 943 "parser.yy"
    64356436    { (yyval.flag) = true; }
    64366437    break;
     
    64396440
    64406441/* Line 1806 of yacc.c  */
    6441 #line 945 "parser.yy"
     6442#line 948 "parser.yy"
    64426443    { (yyval.en) = 0; }
    64436444    break;
     
    64466447
    64476448/* Line 1806 of yacc.c  */
    6448 #line 952 "parser.yy"
     6449#line 955 "parser.yy"
    64496450    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    64506451    break;
     
    64536454
    64546455/* Line 1806 of yacc.c  */
    6455 #line 957 "parser.yy"
     6456#line 960 "parser.yy"
    64566457    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
    64576458    break;
     
    64606461
    64616462/* Line 1806 of yacc.c  */
    6462 #line 959 "parser.yy"
     6463#line 962 "parser.yy"
    64636464    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
    64646465    break;
     
    64676468
    64686469/* Line 1806 of yacc.c  */
    6469 #line 964 "parser.yy"
     6470#line 967 "parser.yy"
    64706471    { (yyval.constant) = 0; }
    64716472    break;
     
    64746475
    64756476/* Line 1806 of yacc.c  */
    6476 #line 966 "parser.yy"
     6477#line 969 "parser.yy"
    64776478    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    64786479    break;
     
    64816482
    64826483/* Line 1806 of yacc.c  */
    6483 #line 968 "parser.yy"
     6484#line 971 "parser.yy"
    64846485    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    64856486    break;
     
    64886489
    64896490/* Line 1806 of yacc.c  */
    6490 #line 973 "parser.yy"
     6491#line 976 "parser.yy"
    64916492    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
    64926493    break;
     
    64956496
    64966497/* Line 1806 of yacc.c  */
    6497 #line 975 "parser.yy"
     6498#line 978 "parser.yy"
    64986499    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
    64996500    break;
     
    65026503
    65036504/* Line 1806 of yacc.c  */
    6504 #line 982 "parser.yy"
     6505#line 985 "parser.yy"
    65056506    { (yyval.decl) = 0; }
    65066507    break;
     
    65096510
    65106511/* Line 1806 of yacc.c  */
    6511 #line 989 "parser.yy"
     6512#line 992 "parser.yy"
    65126513    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    65136514    break;
     
    65166517
    65176518/* Line 1806 of yacc.c  */
    6518 #line 994 "parser.yy"
     6519#line 997 "parser.yy"
    65196520    { (yyval.decl) = 0; }
    65206521    break;
     
    65236524
    65246525/* Line 1806 of yacc.c  */
    6525 #line 1001 "parser.yy"
     6526#line 1004 "parser.yy"
    65266527    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    65276528    break;
     
    65306531
    65316532/* Line 1806 of yacc.c  */
    6532 #line 1015 "parser.yy"
     6533#line 1018 "parser.yy"
    65336534    {}
    65346535    break;
     
    65376538
    65386539/* Line 1806 of yacc.c  */
    6539 #line 1016 "parser.yy"
     6540#line 1019 "parser.yy"
    65406541    {}
    65416542    break;
     
    65446545
    65456546/* Line 1806 of yacc.c  */
    6546 #line 1045 "parser.yy"
     6547#line 1048 "parser.yy"
    65476548    {
    65486549                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65546555
    65556556/* Line 1806 of yacc.c  */
    6556 #line 1052 "parser.yy"
     6557#line 1055 "parser.yy"
    65576558    {
    65586559                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65646565
    65656566/* Line 1806 of yacc.c  */
    6566 #line 1057 "parser.yy"
     6567#line 1060 "parser.yy"
    65676568    {
    65686569                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    65746575
    65756576/* Line 1806 of yacc.c  */
    6576 #line 1067 "parser.yy"
     6577#line 1070 "parser.yy"
    65776578    {
    65786579                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65846585
    65856586/* Line 1806 of yacc.c  */
    6586 #line 1072 "parser.yy"
     6587#line 1075 "parser.yy"
    65876588    {
    65886589                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65946595
    65956596/* Line 1806 of yacc.c  */
    6596 #line 1077 "parser.yy"
     6597#line 1080 "parser.yy"
    65976598    {
    65986599                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    66046605
    66056606/* Line 1806 of yacc.c  */
    6606 #line 1085 "parser.yy"
     6607#line 1088 "parser.yy"
    66076608    {
    66086609                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66146615
    66156616/* Line 1806 of yacc.c  */
    6616 #line 1090 "parser.yy"
     6617#line 1093 "parser.yy"
    66176618    {
    66186619                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66246625
    66256626/* Line 1806 of yacc.c  */
    6626 #line 1095 "parser.yy"
     6627#line 1098 "parser.yy"
    66276628    {
    66286629                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66346635
    66356636/* Line 1806 of yacc.c  */
    6636 #line 1100 "parser.yy"
     6637#line 1103 "parser.yy"
    66376638    {
    66386639                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66446645
    66456646/* Line 1806 of yacc.c  */
    6646 #line 1105 "parser.yy"
     6647#line 1108 "parser.yy"
    66476648    {
    66486649                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    66546655
    66556656/* Line 1806 of yacc.c  */
    6656 #line 1113 "parser.yy"
     6657#line 1116 "parser.yy"
    66576658    {
    66586659                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    66636664
    66646665/* Line 1806 of yacc.c  */
    6665 #line 1136 "parser.yy"
     6666#line 1139 "parser.yy"
    66666667    {
    66676668                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    66726673
    66736674/* Line 1806 of yacc.c  */
    6674 #line 1140 "parser.yy"
     6675#line 1143 "parser.yy"
    66756676    {
    66766677                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    66816682
    66826683/* Line 1806 of yacc.c  */
    6683 #line 1147 "parser.yy"
     6684#line 1150 "parser.yy"
    66846685    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    66856686    break;
     
    66886689
    66896690/* Line 1806 of yacc.c  */
    6690 #line 1151 "parser.yy"
     6691#line 1154 "parser.yy"
    66916692    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    66926693    break;
     
    66956696
    66966697/* Line 1806 of yacc.c  */
    6697 #line 1156 "parser.yy"
     6698#line 1159 "parser.yy"
    66986699    {
    66996700                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67056706
    67066707/* Line 1806 of yacc.c  */
    6707 #line 1161 "parser.yy"
     6708#line 1164 "parser.yy"
    67086709    {
    67096710                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67156716
    67166717/* Line 1806 of yacc.c  */
    6717 #line 1166 "parser.yy"
     6718#line 1169 "parser.yy"
    67186719    {
    67196720                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    67256726
    67266727/* Line 1806 of yacc.c  */
    6727 #line 1177 "parser.yy"
     6728#line 1180 "parser.yy"
    67286729    {
    67296730                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67356736
    67366737/* Line 1806 of yacc.c  */
    6737 #line 1182 "parser.yy"
     6738#line 1185 "parser.yy"
    67386739    {
    67396740                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67456746
    67466747/* Line 1806 of yacc.c  */
    6747 #line 1187 "parser.yy"
     6748#line 1190 "parser.yy"
    67486749    {
    67496750                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67556756
    67566757/* Line 1806 of yacc.c  */
    6757 #line 1192 "parser.yy"
     6758#line 1195 "parser.yy"
    67586759    {
    67596760                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67656766
    67666767/* Line 1806 of yacc.c  */
    6767 #line 1197 "parser.yy"
     6768#line 1200 "parser.yy"
    67686769    {
    67696770                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67756776
    67766777/* Line 1806 of yacc.c  */
    6777 #line 1206 "parser.yy"
     6778#line 1209 "parser.yy"
    67786779    {
    67796780                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    67856786
    67866787/* Line 1806 of yacc.c  */
    6787 #line 1211 "parser.yy"
     6788#line 1214 "parser.yy"
    67886789    {
    67896790                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    67956796
    67966797/* Line 1806 of yacc.c  */
    6797 #line 1228 "parser.yy"
     6798#line 1231 "parser.yy"
    67986799    {
    67996800                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    68056806
    68066807/* Line 1806 of yacc.c  */
    6807 #line 1233 "parser.yy"
     6808#line 1236 "parser.yy"
    68086809    {
    68096810                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    68156816
    68166817/* Line 1806 of yacc.c  */
    6817 #line 1255 "parser.yy"
     6818#line 1258 "parser.yy"
    68186819    { (yyval.decl) = 0; }
    68196820    break;
     
    68226823
    68236824/* Line 1806 of yacc.c  */
    6824 #line 1267 "parser.yy"
     6825#line 1270 "parser.yy"
    68256826    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68266827    break;
     
    68296830
    68306831/* Line 1806 of yacc.c  */
    6831 #line 1278 "parser.yy"
     6832#line 1281 "parser.yy"
    68326833    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    68336834    break;
     
    68366837
    68376838/* Line 1806 of yacc.c  */
    6838 #line 1280 "parser.yy"
     6839#line 1283 "parser.yy"
    68396840    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    68406841    break;
     
    68436844
    68446845/* Line 1806 of yacc.c  */
    6845 #line 1282 "parser.yy"
     6846#line 1285 "parser.yy"
    68466847    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    68476848    break;
     
    68506851
    68516852/* Line 1806 of yacc.c  */
    6852 #line 1284 "parser.yy"
     6853#line 1287 "parser.yy"
    68536854    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    68546855    break;
     
    68576858
    68586859/* Line 1806 of yacc.c  */
    6859 #line 1286 "parser.yy"
     6860#line 1289 "parser.yy"
    68606861    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    68616862    break;
     
    68646865
    68656866/* Line 1806 of yacc.c  */
    6866 #line 1288 "parser.yy"
     6867#line 1291 "parser.yy"
    68676868    {
    68686869                        typedefTable.enterScope();
     
    68736874
    68746875/* Line 1806 of yacc.c  */
    6875 #line 1292 "parser.yy"
     6876#line 1295 "parser.yy"
    68766877    {
    68776878                        typedefTable.leaveScope();
     
    68836884
    68846885/* Line 1806 of yacc.c  */
    6885 #line 1301 "parser.yy"
     6886#line 1304 "parser.yy"
    68866887    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68876888    break;
     
    68906891
    68916892/* Line 1806 of yacc.c  */
    6892 #line 1303 "parser.yy"
     6893#line 1306 "parser.yy"
    68936894    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68946895    break;
     
    68976898
    68986899/* Line 1806 of yacc.c  */
    6899 #line 1314 "parser.yy"
     6900#line 1317 "parser.yy"
    69006901    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69016902    break;
     
    69046905
    69056906/* Line 1806 of yacc.c  */
    6906 #line 1323 "parser.yy"
     6907#line 1326 "parser.yy"
    69076908    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    69086909    break;
     
    69116912
    69126913/* Line 1806 of yacc.c  */
    6913 #line 1325 "parser.yy"
     6914#line 1328 "parser.yy"
    69146915    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    69156916    break;
     
    69186919
    69196920/* Line 1806 of yacc.c  */
    6920 #line 1327 "parser.yy"
     6921#line 1330 "parser.yy"
    69216922    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    69226923    break;
     
    69256926
    69266927/* Line 1806 of yacc.c  */
    6927 #line 1329 "parser.yy"
     6928#line 1332 "parser.yy"
    69286929    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    69296930    break;
     
    69326933
    69336934/* Line 1806 of yacc.c  */
    6934 #line 1331 "parser.yy"
     6935#line 1334 "parser.yy"
    69356936    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    69366937    break;
     
    69396940
    69406941/* Line 1806 of yacc.c  */
    6941 #line 1333 "parser.yy"
     6942#line 1336 "parser.yy"
    69426943    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    69436944    break;
     
    69466947
    69476948/* Line 1806 of yacc.c  */
    6948 #line 1335 "parser.yy"
     6949#line 1338 "parser.yy"
    69496950    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    69506951    break;
     
    69536954
    69546955/* Line 1806 of yacc.c  */
    6955 #line 1337 "parser.yy"
     6956#line 1340 "parser.yy"
    69566957    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    69576958    break;
     
    69606961
    69616962/* Line 1806 of yacc.c  */
    6962 #line 1342 "parser.yy"
     6963#line 1345 "parser.yy"
    69636964    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    69646965    break;
     
    69676968
    69686969/* Line 1806 of yacc.c  */
    6969 #line 1344 "parser.yy"
     6970#line 1347 "parser.yy"
    69706971    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    69716972    break;
     
    69746975
    69756976/* Line 1806 of yacc.c  */
    6976 #line 1346 "parser.yy"
     6977#line 1349 "parser.yy"
    69776978    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    69786979    break;
     
    69816982
    69826983/* Line 1806 of yacc.c  */
    6983 #line 1348 "parser.yy"
     6984#line 1351 "parser.yy"
    69846985    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    69856986    break;
     
    69886989
    69896990/* Line 1806 of yacc.c  */
    6990 #line 1350 "parser.yy"
     6991#line 1353 "parser.yy"
    69916992    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    69926993    break;
     
    69956996
    69966997/* Line 1806 of yacc.c  */
    6997 #line 1352 "parser.yy"
     6998#line 1355 "parser.yy"
    69986999    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    69997000    break;
     
    70027003
    70037004/* Line 1806 of yacc.c  */
    7004 #line 1354 "parser.yy"
     7005#line 1357 "parser.yy"
    70057006    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    70067007    break;
     
    70097010
    70107011/* Line 1806 of yacc.c  */
    7011 #line 1356 "parser.yy"
     7012#line 1359 "parser.yy"
    70127013    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    70137014    break;
     
    70167017
    70177018/* Line 1806 of yacc.c  */
    7018 #line 1358 "parser.yy"
     7019#line 1361 "parser.yy"
    70197020    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    70207021    break;
     
    70237024
    70247025/* Line 1806 of yacc.c  */
    7025 #line 1360 "parser.yy"
     7026#line 1363 "parser.yy"
    70267027    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    70277028    break;
     
    70307031
    70317032/* Line 1806 of yacc.c  */
    7032 #line 1362 "parser.yy"
     7033#line 1365 "parser.yy"
    70337034    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    70347035    break;
     
    70377038
    70387039/* Line 1806 of yacc.c  */
    7039 #line 1364 "parser.yy"
     7040#line 1367 "parser.yy"
    70407041    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    70417042    break;
     
    70447045
    70457046/* Line 1806 of yacc.c  */
    7046 #line 1366 "parser.yy"
     7047#line 1369 "parser.yy"
    70477048    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    70487049    break;
     
    70517052
    70527053/* Line 1806 of yacc.c  */
    7053 #line 1373 "parser.yy"
     7054#line 1376 "parser.yy"
    70547055    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70557056    break;
     
    70587059
    70597060/* Line 1806 of yacc.c  */
    7060 #line 1375 "parser.yy"
     7061#line 1378 "parser.yy"
    70617062    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70627063    break;
     
    70657066
    70667067/* Line 1806 of yacc.c  */
    7067 #line 1377 "parser.yy"
     7068#line 1380 "parser.yy"
    70687069    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    70697070    break;
     
    70727073
    70737074/* Line 1806 of yacc.c  */
    7074 #line 1379 "parser.yy"
     7075#line 1382 "parser.yy"
    70757076    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    70767077    break;
     
    70797080
    70807081/* Line 1806 of yacc.c  */
    7081 #line 1385 "parser.yy"
     7082#line 1388 "parser.yy"
    70827083    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    70837084    break;
     
    70867087
    70877088/* Line 1806 of yacc.c  */
    7088 #line 1392 "parser.yy"
     7089#line 1395 "parser.yy"
    70897090    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70907091    break;
     
    70937094
    70947095/* Line 1806 of yacc.c  */
    7095 #line 1394 "parser.yy"
     7096#line 1397 "parser.yy"
    70967097    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70977098    break;
     
    71007101
    71017102/* Line 1806 of yacc.c  */
    7102 #line 1396 "parser.yy"
     7103#line 1399 "parser.yy"
    71037104    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    71047105    break;
     
    71077108
    71087109/* Line 1806 of yacc.c  */
    7109 #line 1401 "parser.yy"
     7110#line 1404 "parser.yy"
    71107111    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    71117112    break;
     
    71147115
    71157116/* Line 1806 of yacc.c  */
    7116 #line 1403 "parser.yy"
     7117#line 1406 "parser.yy"
    71177118    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    71187119    break;
     
    71217122
    71227123/* Line 1806 of yacc.c  */
    7123 #line 1405 "parser.yy"
     7124#line 1408 "parser.yy"
    71247125    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    71257126    break;
     
    71287129
    71297130/* Line 1806 of yacc.c  */
    7130 #line 1407 "parser.yy"
     7131#line 1410 "parser.yy"
    71317132    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    71327133    break;
     
    71357136
    71367137/* Line 1806 of yacc.c  */
    7137 #line 1413 "parser.yy"
     7138#line 1416 "parser.yy"
    71387139    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71397140    break;
     
    71427143
    71437144/* Line 1806 of yacc.c  */
    7144 #line 1415 "parser.yy"
     7145#line 1418 "parser.yy"
    71457146    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71467147    break;
     
    71497150
    71507151/* Line 1806 of yacc.c  */
    7151 #line 1417 "parser.yy"
     7152#line 1420 "parser.yy"
    71527153    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    71537154    break;
     
    71567157
    71577158/* Line 1806 of yacc.c  */
    7158 #line 1423 "parser.yy"
     7159#line 1426 "parser.yy"
    71597160    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71607161    break;
     
    71637164
    71647165/* Line 1806 of yacc.c  */
    7165 #line 1425 "parser.yy"
     7166#line 1428 "parser.yy"
    71667167    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71677168    break;
     
    71707171
    71717172/* Line 1806 of yacc.c  */
    7172 #line 1431 "parser.yy"
     7173#line 1434 "parser.yy"
    71737174    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71747175    break;
     
    71777178
    71787179/* Line 1806 of yacc.c  */
    7179 #line 1433 "parser.yy"
     7180#line 1436 "parser.yy"
    71807181    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71817182    break;
     
    71847185
    71857186/* Line 1806 of yacc.c  */
    7186 #line 1435 "parser.yy"
     7187#line 1438 "parser.yy"
    71877188    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    71887189    break;
     
    71917192
    71927193/* Line 1806 of yacc.c  */
    7193 #line 1440 "parser.yy"
     7194#line 1443 "parser.yy"
    71947195    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    71957196    break;
     
    71987199
    71997200/* Line 1806 of yacc.c  */
    7200 #line 1442 "parser.yy"
     7201#line 1445 "parser.yy"
    72017202    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    72027203    break;
     
    72057206
    72067207/* Line 1806 of yacc.c  */
    7207 #line 1444 "parser.yy"
     7208#line 1447 "parser.yy"
    72087209    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    72097210    break;
     
    72127213
    72137214/* Line 1806 of yacc.c  */
    7214 #line 1454 "parser.yy"
     7215#line 1457 "parser.yy"
    72157216    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
    72167217    break;
     
    72197220
    72207221/* Line 1806 of yacc.c  */
    7221 #line 1456 "parser.yy"
     7222#line 1459 "parser.yy"
    72227223    {
    72237224                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    72297230
    72307231/* Line 1806 of yacc.c  */
    7231 #line 1461 "parser.yy"
     7232#line 1464 "parser.yy"
    72327233    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    72337234    break;
     
    72367237
    72377238/* Line 1806 of yacc.c  */
    7238 #line 1463 "parser.yy"
     7239#line 1466 "parser.yy"
    72397240    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
    72407241    break;
     
    72437244
    72447245/* Line 1806 of yacc.c  */
    7245 #line 1465 "parser.yy"
     7246#line 1468 "parser.yy"
    72467247    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
    72477248    break;
     
    72507251
    72517252/* Line 1806 of yacc.c  */
    7252 #line 1467 "parser.yy"
     7253#line 1470 "parser.yy"
    72537254    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    72547255    break;
     
    72577258
    72587259/* Line 1806 of yacc.c  */
    7259 #line 1472 "parser.yy"
     7260#line 1475 "parser.yy"
    72607261    { (yyval.aggKey) = DeclarationNode::Struct; }
    72617262    break;
     
    72647265
    72657266/* Line 1806 of yacc.c  */
    7266 #line 1474 "parser.yy"
     7267#line 1477 "parser.yy"
    72677268    { (yyval.aggKey) = DeclarationNode::Union; }
    72687269    break;
     
    72717272
    72727273/* Line 1806 of yacc.c  */
    7273 #line 1479 "parser.yy"
     7274#line 1482 "parser.yy"
    72747275    { (yyval.decl) = 0; }
    72757276    break;
     
    72787279
    72797280/* Line 1806 of yacc.c  */
    7280 #line 1481 "parser.yy"
     7281#line 1484 "parser.yy"
    72817282    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    72827283    break;
     
    72857286
    72867287/* Line 1806 of yacc.c  */
    7287 #line 1487 "parser.yy"
     7288#line 1490 "parser.yy"
    72887289    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
    72897290    break;
     
    72927293
    72937294/* Line 1806 of yacc.c  */
    7294 #line 1490 "parser.yy"
     7295#line 1493 "parser.yy"
    72957296    {   // mark all fields in list
    72967297                        for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     
    73037304
    73047305/* Line 1806 of yacc.c  */
    7305 #line 1500 "parser.yy"
     7306#line 1503 "parser.yy"
    73067307    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    73077308    break;
     
    73107311
    73117312/* Line 1806 of yacc.c  */
    7312 #line 1502 "parser.yy"
     7313#line 1505 "parser.yy"
    73137314    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    73147315    break;
     
    73177318
    73187319/* Line 1806 of yacc.c  */
    7319 #line 1504 "parser.yy"
     7320#line 1507 "parser.yy"
    73207321    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    73217322    break;
     
    73247325
    73257326/* Line 1806 of yacc.c  */
    7326 #line 1509 "parser.yy"
     7327#line 1512 "parser.yy"
    73277328    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73287329    break;
     
    73317332
    73327333/* Line 1806 of yacc.c  */
    7333 #line 1511 "parser.yy"
     7334#line 1514 "parser.yy"
    73347335    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    73357336    break;
     
    73387339
    73397340/* Line 1806 of yacc.c  */
    7340 #line 1516 "parser.yy"
     7341#line 1519 "parser.yy"
    73417342    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    73427343    break;
     
    73457346
    73467347/* Line 1806 of yacc.c  */
    7347 #line 1518 "parser.yy"
     7348#line 1521 "parser.yy"
    73487349    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    73497350    break;
    73507351
    73517352  case 388:
    7352 
    7353 /* Line 1806 of yacc.c  */
    7354 #line 1521 "parser.yy"
    7355     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    7356     break;
    7357 
    7358   case 389:
    73597353
    73607354/* Line 1806 of yacc.c  */
     
    73637357    break;
    73647358
     7359  case 389:
     7360
     7361/* Line 1806 of yacc.c  */
     7362#line 1527 "parser.yy"
     7363    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     7364    break;
     7365
    73657366  case 391:
    73667367
    73677368/* Line 1806 of yacc.c  */
    7368 #line 1530 "parser.yy"
     7369#line 1533 "parser.yy"
    73697370    { (yyval.en) = 0; }
    73707371    break;
     
    73737374
    73747375/* Line 1806 of yacc.c  */
    7375 #line 1532 "parser.yy"
     7376#line 1535 "parser.yy"
    73767377    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    73777378    break;
     
    73807381
    73817382/* Line 1806 of yacc.c  */
    7382 #line 1537 "parser.yy"
     7383#line 1540 "parser.yy"
    73837384    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    73847385    break;
     
    73877388
    73887389/* Line 1806 of yacc.c  */
    7389 #line 1546 "parser.yy"
     7390#line 1549 "parser.yy"
    73907391    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    73917392    break;
     
    73947395
    73957396/* Line 1806 of yacc.c  */
    7396 #line 1548 "parser.yy"
     7397#line 1551 "parser.yy"
    73977398    {
    73987399                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    74047405
    74057406/* Line 1806 of yacc.c  */
    7406 #line 1553 "parser.yy"
     7407#line 1556 "parser.yy"
    74077408    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    74087409    break;
     
    74117412
    74127413/* Line 1806 of yacc.c  */
    7413 #line 1555 "parser.yy"
     7414#line 1558 "parser.yy"
    74147415    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
    74157416    break;
     
    74187419
    74197420/* Line 1806 of yacc.c  */
    7420 #line 1560 "parser.yy"
     7421#line 1563 "parser.yy"
    74217422    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    74227423    break;
     
    74257426
    74267427/* Line 1806 of yacc.c  */
    7427 #line 1562 "parser.yy"
     7428#line 1565 "parser.yy"
    74287429    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    74297430    break;
     
    74327433
    74337434/* Line 1806 of yacc.c  */
    7434 #line 1567 "parser.yy"
     7435#line 1570 "parser.yy"
    74357436    { (yyval.en) = 0; }
    74367437    break;
     
    74397440
    74407441/* Line 1806 of yacc.c  */
    7441 #line 1569 "parser.yy"
     7442#line 1572 "parser.yy"
    74427443    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    74437444    break;
     
    74467447
    74477448/* Line 1806 of yacc.c  */
    7448 #line 1576 "parser.yy"
     7449#line 1579 "parser.yy"
    74497450    { (yyval.decl) = 0; }
    74507451    break;
     
    74537454
    74547455/* Line 1806 of yacc.c  */
    7455 #line 1584 "parser.yy"
     7456#line 1587 "parser.yy"
    74567457    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74577458    break;
     
    74607461
    74617462/* Line 1806 of yacc.c  */
    7462 #line 1586 "parser.yy"
     7463#line 1589 "parser.yy"
    74637464    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74647465    break;
     
    74677468
    74687469/* Line 1806 of yacc.c  */
    7469 #line 1588 "parser.yy"
     7470#line 1591 "parser.yy"
    74707471    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74717472    break;
     
    74747475
    74757476/* Line 1806 of yacc.c  */
    7476 #line 1596 "parser.yy"
     7477#line 1599 "parser.yy"
    74777478    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74787479    break;
     
    74817482
    74827483/* Line 1806 of yacc.c  */
    7483 #line 1598 "parser.yy"
     7484#line 1601 "parser.yy"
    74847485    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74857486    break;
     
    74887489
    74897490/* Line 1806 of yacc.c  */
    7490 #line 1600 "parser.yy"
     7491#line 1603 "parser.yy"
    74917492    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    74927493    break;
     
    74957496
    74967497/* Line 1806 of yacc.c  */
    7497 #line 1606 "parser.yy"
     7498#line 1609 "parser.yy"
    74987499    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74997500    break;
     
    75027503
    75037504/* Line 1806 of yacc.c  */
    7504 #line 1611 "parser.yy"
     7505#line 1614 "parser.yy"
    75057506    { (yyval.decl) = 0; }
    75067507    break;
     
    75097510
    75107511/* Line 1806 of yacc.c  */
    7511 #line 1618 "parser.yy"
     7512#line 1621 "parser.yy"
    75127513    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    75137514    break;
     
    75167517
    75177518/* Line 1806 of yacc.c  */
    7518 #line 1625 "parser.yy"
     7519#line 1628 "parser.yy"
    75197520    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    75207521    break;
     
    75237524
    75247525/* Line 1806 of yacc.c  */
    7525 #line 1627 "parser.yy"
     7526#line 1630 "parser.yy"
    75267527    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    75277528    break;
    75287529
    75297530  case 425:
    7530 
    7531 /* Line 1806 of yacc.c  */
    7532 #line 1636 "parser.yy"
    7533     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7534     break;
    7535 
    7536   case 426:
    75377531
    75387532/* Line 1806 of yacc.c  */
     
    75417535    break;
    75427536
     7537  case 426:
     7538
     7539/* Line 1806 of yacc.c  */
     7540#line 1642 "parser.yy"
     7541    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     7542    break;
     7543
    75437544  case 427:
    75447545
    75457546/* Line 1806 of yacc.c  */
    7546 #line 1641 "parser.yy"
     7547#line 1644 "parser.yy"
    75477548    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    75487549    break;
     
    75517552
    75527553/* Line 1806 of yacc.c  */
    7553 #line 1651 "parser.yy"
     7554#line 1654 "parser.yy"
    75547555    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75557556    break;
     
    75587559
    75597560/* Line 1806 of yacc.c  */
    7560 #line 1657 "parser.yy"
     7561#line 1660 "parser.yy"
    75617562    {
    75627563                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75687569
    75697570/* Line 1806 of yacc.c  */
    7570 #line 1662 "parser.yy"
     7571#line 1665 "parser.yy"
    75717572    {
    75727573                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75787579
    75797580/* Line 1806 of yacc.c  */
    7580 #line 1671 "parser.yy"
     7581#line 1674 "parser.yy"
    75817582    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    75827583    break;
     
    75857586
    75867587/* Line 1806 of yacc.c  */
    7587 #line 1680 "parser.yy"
     7588#line 1683 "parser.yy"
    75887589    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    75897590    break;
     
    75927593
    75937594/* Line 1806 of yacc.c  */
    7594 #line 1682 "parser.yy"
     7595#line 1685 "parser.yy"
    75957596    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    75967597    break;
     
    75997600
    76007601/* Line 1806 of yacc.c  */
    7601 #line 1707 "parser.yy"
     7602#line 1710 "parser.yy"
    76027603    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    76037604    break;
     
    76067607
    76077608/* Line 1806 of yacc.c  */
    7608 #line 1715 "parser.yy"
     7609#line 1718 "parser.yy"
    76097610    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    76107611    break;
     
    76137614
    76147615/* Line 1806 of yacc.c  */
    7615 #line 1720 "parser.yy"
     7616#line 1723 "parser.yy"
    76167617    { (yyval.in) = 0; }
    76177618    break;
     
    76207621
    76217622/* Line 1806 of yacc.c  */
    7622 #line 1722 "parser.yy"
     7623#line 1725 "parser.yy"
    76237624    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    76247625    break;
     
    76277628
    76287629/* Line 1806 of yacc.c  */
    7629 #line 1724 "parser.yy"
     7630#line 1727 "parser.yy"
    76307631    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
    76317632    break;
     
    76347635
    76357636/* Line 1806 of yacc.c  */
    7636 #line 1728 "parser.yy"
     7637#line 1731 "parser.yy"
    76377638    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    76387639    break;
     
    76417642
    76427643/* Line 1806 of yacc.c  */
    7643 #line 1729 "parser.yy"
     7644#line 1732 "parser.yy"
    76447645    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    76457646    break;
     
    76487649
    76497650/* Line 1806 of yacc.c  */
    7650 #line 1734 "parser.yy"
     7651#line 1737 "parser.yy"
    76517652    { (yyval.in) = 0; }
    76527653    break;
     
    76557656
    76567657/* Line 1806 of yacc.c  */
    7657 #line 1736 "parser.yy"
     7658#line 1739 "parser.yy"
    76587659    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    76597660    break;
     
    76627663
    76637664/* Line 1806 of yacc.c  */
    7664 #line 1737 "parser.yy"
     7665#line 1740 "parser.yy"
    76657666    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    76667667    break;
     
    76697670
    76707671/* Line 1806 of yacc.c  */
    7671 #line 1739 "parser.yy"
     7672#line 1742 "parser.yy"
    76727673    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    76737674    break;
     
    76767677
    76777678/* Line 1806 of yacc.c  */
    7678 #line 1755 "parser.yy"
     7679#line 1758 "parser.yy"
    76797680    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    76807681    break;
     
    76837684
    76847685/* Line 1806 of yacc.c  */
    7685 #line 1761 "parser.yy"
     7686#line 1764 "parser.yy"
    76867687    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    76877688    break;
     
    76907691
    76917692/* Line 1806 of yacc.c  */
    7692 #line 1769 "parser.yy"
     7693#line 1772 "parser.yy"
    76937694    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    76947695    break;
     
    76977698
    76987699/* Line 1806 of yacc.c  */
    7699 #line 1771 "parser.yy"
     7700#line 1774 "parser.yy"
    77007701    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    77017702    break;
     
    77047705
    77057706/* Line 1806 of yacc.c  */
    7706 #line 1774 "parser.yy"
     7707#line 1777 "parser.yy"
    77077708    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    77087709    break;
     
    77117712
    77127713/* Line 1806 of yacc.c  */
    7713 #line 1776 "parser.yy"
     7714#line 1779 "parser.yy"
    77147715    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    77157716    break;
     
    77187719
    77197720/* Line 1806 of yacc.c  */
    7720 #line 1778 "parser.yy"
     7721#line 1781 "parser.yy"
    77217722    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    77227723    break;
     
    77257726
    77267727/* Line 1806 of yacc.c  */
    7727 #line 1780 "parser.yy"
     7728#line 1783 "parser.yy"
    77287729    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    77297730    break;
     
    77327733
    77337734/* Line 1806 of yacc.c  */
    7734 #line 1804 "parser.yy"
     7735#line 1807 "parser.yy"
    77357736    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77367737    break;
     
    77397740
    77407741/* Line 1806 of yacc.c  */
    7741 #line 1806 "parser.yy"
     7742#line 1809 "parser.yy"
    77427743    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77437744    break;
     
    77467747
    77477748/* Line 1806 of yacc.c  */
    7748 #line 1808 "parser.yy"
     7749#line 1811 "parser.yy"
    77497750    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    77507751    break;
     
    77537754
    77547755/* Line 1806 of yacc.c  */
    7755 #line 1814 "parser.yy"
     7756#line 1817 "parser.yy"
    77567757    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77577758    break;
     
    77607761
    77617762/* Line 1806 of yacc.c  */
    7762 #line 1816 "parser.yy"
     7763#line 1819 "parser.yy"
    77637764    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77647765    break;
     
    77677768
    77687769/* Line 1806 of yacc.c  */
    7769 #line 1821 "parser.yy"
     7770#line 1824 "parser.yy"
    77707771    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    77717772    break;
     
    77747775
    77757776/* Line 1806 of yacc.c  */
    7776 #line 1827 "parser.yy"
     7777#line 1830 "parser.yy"
    77777778    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    77787779    break;
     
    77817782
    77827783/* Line 1806 of yacc.c  */
    7783 #line 1832 "parser.yy"
     7784#line 1835 "parser.yy"
    77847785    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    77857786    break;
     
    77887789
    77897790/* Line 1806 of yacc.c  */
    7790 #line 1834 "parser.yy"
     7791#line 1837 "parser.yy"
    77917792    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    77927793    break;
     
    77957796
    77967797/* Line 1806 of yacc.c  */
    7797 #line 1840 "parser.yy"
     7798#line 1843 "parser.yy"
    77987799    { (yyval.tclass) = DeclarationNode::Type; }
    77997800    break;
     
    78027803
    78037804/* Line 1806 of yacc.c  */
    7804 #line 1842 "parser.yy"
     7805#line 1845 "parser.yy"
    78057806    { (yyval.tclass) = DeclarationNode::Ftype; }
    78067807    break;
     
    78097810
    78107811/* Line 1806 of yacc.c  */
    7811 #line 1844 "parser.yy"
     7812#line 1847 "parser.yy"
    78127813    { (yyval.tclass) = DeclarationNode::Dtype; }
    78137814    break;
     
    78167817
    78177818/* Line 1806 of yacc.c  */
    7818 #line 1849 "parser.yy"
     7819#line 1852 "parser.yy"
    78197820    { (yyval.decl) = 0; }
    78207821    break;
     
    78237824
    78247825/* Line 1806 of yacc.c  */
    7825 #line 1851 "parser.yy"
     7826#line 1854 "parser.yy"
    78267827    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    78277828    break;
     
    78307831
    78317832/* Line 1806 of yacc.c  */
    7832 #line 1856 "parser.yy"
     7833#line 1859 "parser.yy"
    78337834    {
    78347835                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    78407841
    78417842/* Line 1806 of yacc.c  */
    7842 #line 1861 "parser.yy"
     7843#line 1864 "parser.yy"
    78437844    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    78447845    break;
     
    78477848
    78487849/* Line 1806 of yacc.c  */
    7849 #line 1863 "parser.yy"
     7850#line 1866 "parser.yy"
    78507851    { (yyval.decl) = 0; }
    78517852    break;
     
    78547855
    78557856/* Line 1806 of yacc.c  */
    7856 #line 1868 "parser.yy"
     7857#line 1871 "parser.yy"
    78577858    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    78587859    break;
     
    78617862
    78627863/* Line 1806 of yacc.c  */
    7863 #line 1871 "parser.yy"
     7864#line 1874 "parser.yy"
    78647865    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    78657866    break;
     
    78687869
    78697870/* Line 1806 of yacc.c  */
    7870 #line 1873 "parser.yy"
     7871#line 1876 "parser.yy"
    78717872    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    78727873    break;
     
    78757876
    78767877/* Line 1806 of yacc.c  */
    7877 #line 1878 "parser.yy"
     7878#line 1881 "parser.yy"
    78787879    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78797880    break;
     
    78827883
    78837884/* Line 1806 of yacc.c  */
    7884 #line 1880 "parser.yy"
     7885#line 1883 "parser.yy"
    78857886    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    78867887    break;
     
    78897890
    78907891/* Line 1806 of yacc.c  */
    7891 #line 1882 "parser.yy"
     7892#line 1885 "parser.yy"
    78927893    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    78937894    break;
     
    78967897
    78977898/* Line 1806 of yacc.c  */
    7898 #line 1887 "parser.yy"
     7899#line 1890 "parser.yy"
    78997900    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    79007901    break;
     
    79037904
    79047905/* Line 1806 of yacc.c  */
    7905 #line 1889 "parser.yy"
     7906#line 1892 "parser.yy"
    79067907    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    79077908    break;
     
    79107911
    79117912/* Line 1806 of yacc.c  */
    7912 #line 1894 "parser.yy"
     7913#line 1897 "parser.yy"
    79137914    {
    79147915                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    79207921
    79217922/* Line 1806 of yacc.c  */
    7922 #line 1899 "parser.yy"
     7923#line 1902 "parser.yy"
    79237924    {
    79247925                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    79307931
    79317932/* Line 1806 of yacc.c  */
    7932 #line 1907 "parser.yy"
     7933#line 1910 "parser.yy"
    79337934    {
    79347935                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    79407941
    79417942/* Line 1806 of yacc.c  */
    7942 #line 1912 "parser.yy"
     7943#line 1915 "parser.yy"
    79437944    {
    79447945                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    79507951
    79517952/* Line 1806 of yacc.c  */
    7952 #line 1917 "parser.yy"
     7953#line 1920 "parser.yy"
    79537954    {
    79547955                        typedefTable.leaveTrait();
     
    79617962
    79627963/* Line 1806 of yacc.c  */
    7963 #line 1927 "parser.yy"
     7964#line 1930 "parser.yy"
    79647965    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    79657966    break;
     
    79687969
    79697970/* Line 1806 of yacc.c  */
    7970 #line 1937 "parser.yy"
     7971#line 1940 "parser.yy"
    79717972    {
    79727973                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79787979
    79797980/* Line 1806 of yacc.c  */
    7980 #line 1942 "parser.yy"
     7981#line 1945 "parser.yy"
    79817982    {
    79827983                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79887989
    79897990/* Line 1806 of yacc.c  */
    7990 #line 1947 "parser.yy"
     7991#line 1950 "parser.yy"
    79917992    {
    79927993                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    79987999
    79998000/* Line 1806 of yacc.c  */
    8000 #line 1955 "parser.yy"
     8001#line 1958 "parser.yy"
    80018002    {
    80028003                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    80088009
    80098010/* Line 1806 of yacc.c  */
    8010 #line 1960 "parser.yy"
     8011#line 1963 "parser.yy"
    80118012    {
    80128013                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    80188019
    80198020/* Line 1806 of yacc.c  */
    8020 #line 1970 "parser.yy"
     8021#line 1973 "parser.yy"
    80218022    {}
    80228023    break;
     
    80258026
    80268027/* Line 1806 of yacc.c  */
    8027 #line 1972 "parser.yy"
     8028#line 1975 "parser.yy"
    80288029    {
    80298030                        if ( theTree ) {
     
    80388039
    80398040/* Line 1806 of yacc.c  */
    8040 #line 1984 "parser.yy"
     8041#line 1987 "parser.yy"
    80418042    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    80428043    break;
     
    80458046
    80468047/* Line 1806 of yacc.c  */
    8047 #line 1989 "parser.yy"
     8048#line 1992 "parser.yy"
    80488049    { (yyval.decl) = 0; }
    80498050    break;
     
    80528053
    80538054/* Line 1806 of yacc.c  */
    8054 #line 1997 "parser.yy"
     8055#line 2000 "parser.yy"
    80558056    {}
    80568057    break;
     
    80598060
    80608061/* Line 1806 of yacc.c  */
    8061 #line 1999 "parser.yy"
     8062#line 2002 "parser.yy"
    80628063    {
    80638064                        linkageStack.push( linkage );
     
    80698070
    80708071/* Line 1806 of yacc.c  */
    8071 #line 2004 "parser.yy"
     8072#line 2007 "parser.yy"
    80728073    {
    80738074                        linkage = linkageStack.top();
     
    80808081
    80818082/* Line 1806 of yacc.c  */
    8082 #line 2010 "parser.yy"
     8083#line 2013 "parser.yy"
    80838084    {   // mark all fields in list
    80848085                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     
    80918092
    80928093/* Line 1806 of yacc.c  */
    8093 #line 2025 "parser.yy"
     8094#line 2028 "parser.yy"
    80948095    {
    80958096                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81028103
    81038104/* Line 1806 of yacc.c  */
    8104 #line 2031 "parser.yy"
     8105#line 2034 "parser.yy"
    81058106    {
    81068107                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81138114
    81148115/* Line 1806 of yacc.c  */
    8115 #line 2040 "parser.yy"
     8116#line 2043 "parser.yy"
    81168117    {
    81178118                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81248125
    81258126/* Line 1806 of yacc.c  */
    8126 #line 2046 "parser.yy"
     8127#line 2049 "parser.yy"
    81278128    {
    81288129                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81358136
    81368137/* Line 1806 of yacc.c  */
    8137 #line 2052 "parser.yy"
     8138#line 2055 "parser.yy"
    81388139    {
    81398140                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81468147
    81478148/* Line 1806 of yacc.c  */
    8148 #line 2058 "parser.yy"
     8149#line 2061 "parser.yy"
    81498150    {
    81508151                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81578158
    81588159/* Line 1806 of yacc.c  */
    8159 #line 2064 "parser.yy"
     8160#line 2067 "parser.yy"
    81608161    {
    81618162                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81688169
    81698170/* Line 1806 of yacc.c  */
    8170 #line 2072 "parser.yy"
     8171#line 2075 "parser.yy"
    81718172    {
    81728173                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81798180
    81808181/* Line 1806 of yacc.c  */
    8181 #line 2078 "parser.yy"
     8182#line 2081 "parser.yy"
    81828183    {
    81838184                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81908191
    81918192/* Line 1806 of yacc.c  */
    8192 #line 2086 "parser.yy"
     8193#line 2089 "parser.yy"
    81938194    {
    81948195                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    82018202
    82028203/* Line 1806 of yacc.c  */
    8203 #line 2092 "parser.yy"
     8204#line 2095 "parser.yy"
    82048205    {
    82058206                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    82128213
    82138214/* Line 1806 of yacc.c  */
    8214 #line 2107 "parser.yy"
     8215#line 2110 "parser.yy"
    82158216    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    82168217    break;
     
    82198220
    82208221/* Line 1806 of yacc.c  */
    8221 #line 2117 "parser.yy"
     8222#line 2120 "parser.yy"
    82228223    { (yyval.decl) = 0; }
    82238224    break;
     
    82268227
    82278228/* Line 1806 of yacc.c  */
    8228 #line 2124 "parser.yy"
     8229#line 2127 "parser.yy"
    82298230    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    82308231    break;
     
    82338234
    82348235/* Line 1806 of yacc.c  */
    8235 #line 2130 "parser.yy"
     8236#line 2133 "parser.yy"
    82368237    { (yyval.decl) = 0; }
    82378238    break;
    82388239
    82398240  case 560:
    8240 
    8241 /* Line 1806 of yacc.c  */
    8242 #line 2145 "parser.yy"
    8243     {}
    8244     break;
    8245 
    8246   case 561:
    8247 
    8248 /* Line 1806 of yacc.c  */
    8249 #line 2146 "parser.yy"
    8250     {}
    8251     break;
    8252 
    8253   case 562:
    8254 
    8255 /* Line 1806 of yacc.c  */
    8256 #line 2147 "parser.yy"
    8257     {}
    8258     break;
    8259 
    8260   case 563:
    82618241
    82628242/* Line 1806 of yacc.c  */
     
    82658245    break;
    82668246
     8247  case 561:
     8248
     8249/* Line 1806 of yacc.c  */
     8250#line 2149 "parser.yy"
     8251    {}
     8252    break;
     8253
     8254  case 562:
     8255
     8256/* Line 1806 of yacc.c  */
     8257#line 2150 "parser.yy"
     8258    {}
     8259    break;
     8260
     8261  case 563:
     8262
     8263/* Line 1806 of yacc.c  */
     8264#line 2151 "parser.yy"
     8265    {}
     8266    break;
     8267
    82678268  case 564:
    8268 
    8269 /* Line 1806 of yacc.c  */
    8270 #line 2183 "parser.yy"
    8271     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8272     break;
    8273 
    8274   case 566:
    82758269
    82768270/* Line 1806 of yacc.c  */
     
    82798273    break;
    82808274
     8275  case 566:
     8276
     8277/* Line 1806 of yacc.c  */
     8278#line 2189 "parser.yy"
     8279    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8280    break;
     8281
    82818282  case 567:
    82828283
    82838284/* Line 1806 of yacc.c  */
    8284 #line 2188 "parser.yy"
     8285#line 2191 "parser.yy"
    82858286    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82868287    break;
     
    82898290
    82908291/* Line 1806 of yacc.c  */
    8291 #line 2193 "parser.yy"
     8292#line 2196 "parser.yy"
    82928293    {
    82938294                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    82998300
    83008301/* Line 1806 of yacc.c  */
    8301 #line 2198 "parser.yy"
     8302#line 2201 "parser.yy"
    83028303    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83038304    break;
     
    83068307
    83078308/* Line 1806 of yacc.c  */
    8308 #line 2203 "parser.yy"
     8309#line 2206 "parser.yy"
    83098310    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83108311    break;
     
    83138314
    83148315/* Line 1806 of yacc.c  */
    8315 #line 2205 "parser.yy"
     8316#line 2208 "parser.yy"
    83168317    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83178318    break;
     
    83208321
    83218322/* Line 1806 of yacc.c  */
    8322 #line 2207 "parser.yy"
     8323#line 2210 "parser.yy"
    83238324    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83248325    break;
     
    83278328
    83288329/* Line 1806 of yacc.c  */
    8329 #line 2212 "parser.yy"
     8330#line 2215 "parser.yy"
    83308331    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83318332    break;
     
    83348335
    83358336/* Line 1806 of yacc.c  */
    8336 #line 2214 "parser.yy"
     8337#line 2217 "parser.yy"
    83378338    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83388339    break;
     
    83418342
    83428343/* Line 1806 of yacc.c  */
    8343 #line 2216 "parser.yy"
     8344#line 2219 "parser.yy"
    83448345    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83458346    break;
     
    83488349
    83498350/* Line 1806 of yacc.c  */
    8350 #line 2218 "parser.yy"
     8351#line 2221 "parser.yy"
    83518352    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83528353    break;
     
    83558356
    83568357/* Line 1806 of yacc.c  */
    8357 #line 2223 "parser.yy"
     8358#line 2226 "parser.yy"
    83588359    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83598360    break;
     
    83628363
    83638364/* Line 1806 of yacc.c  */
    8364 #line 2225 "parser.yy"
     8365#line 2228 "parser.yy"
    83658366    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83668367    break;
    83678368
    83688369  case 579:
    8369 
    8370 /* Line 1806 of yacc.c  */
    8371 #line 2234 "parser.yy"
    8372     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8373     break;
    8374 
    8375   case 581:
    83768370
    83778371/* Line 1806 of yacc.c  */
     
    83808374    break;
    83818375
     8376  case 581:
     8377
     8378/* Line 1806 of yacc.c  */
     8379#line 2240 "parser.yy"
     8380    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8381    break;
     8382
    83828383  case 582:
    83838384
    83848385/* Line 1806 of yacc.c  */
    8385 #line 2242 "parser.yy"
     8386#line 2245 "parser.yy"
    83868387    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83878388    break;
     
    83908391
    83918392/* Line 1806 of yacc.c  */
    8392 #line 2244 "parser.yy"
     8393#line 2247 "parser.yy"
    83938394    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83948395    break;
     
    83978398
    83988399/* Line 1806 of yacc.c  */
    8399 #line 2246 "parser.yy"
     8400#line 2249 "parser.yy"
    84008401    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84018402    break;
     
    84048405
    84058406/* Line 1806 of yacc.c  */
    8406 #line 2251 "parser.yy"
     8407#line 2254 "parser.yy"
    84078408    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84088409    break;
     
    84118412
    84128413/* Line 1806 of yacc.c  */
    8413 #line 2253 "parser.yy"
     8414#line 2256 "parser.yy"
    84148415    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84158416    break;
     
    84188419
    84198420/* Line 1806 of yacc.c  */
    8420 #line 2255 "parser.yy"
     8421#line 2258 "parser.yy"
    84218422    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84228423    break;
     
    84258426
    84268427/* Line 1806 of yacc.c  */
    8427 #line 2260 "parser.yy"
     8428#line 2263 "parser.yy"
    84288429    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84298430    break;
     
    84328433
    84338434/* Line 1806 of yacc.c  */
    8434 #line 2262 "parser.yy"
     8435#line 2265 "parser.yy"
    84358436    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84368437    break;
     
    84398440
    84408441/* Line 1806 of yacc.c  */
    8441 #line 2264 "parser.yy"
     8442#line 2267 "parser.yy"
    84428443    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84438444    break;
     
    84468447
    84478448/* Line 1806 of yacc.c  */
    8448 #line 2279 "parser.yy"
     8449#line 2282 "parser.yy"
    84498450    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    84508451    break;
     
    84538454
    84548455/* Line 1806 of yacc.c  */
    8455 #line 2281 "parser.yy"
     8456#line 2284 "parser.yy"
    84568457    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    84578458    break;
     
    84608461
    84618462/* Line 1806 of yacc.c  */
    8462 #line 2283 "parser.yy"
     8463#line 2286 "parser.yy"
    84638464    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84648465    break;
     
    84678468
    84688469/* Line 1806 of yacc.c  */
    8469 #line 2288 "parser.yy"
     8470#line 2291 "parser.yy"
    84708471    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84718472    break;
     
    84748475
    84758476/* Line 1806 of yacc.c  */
    8476 #line 2290 "parser.yy"
     8477#line 2293 "parser.yy"
    84778478    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84788479    break;
     
    84818482
    84828483/* Line 1806 of yacc.c  */
    8483 #line 2292 "parser.yy"
     8484#line 2295 "parser.yy"
    84848485    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84858486    break;
     
    84888489
    84898490/* Line 1806 of yacc.c  */
    8490 #line 2297 "parser.yy"
     8491#line 2300 "parser.yy"
    84918492    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84928493    break;
     
    84958496
    84968497/* Line 1806 of yacc.c  */
    8497 #line 2299 "parser.yy"
     8498#line 2302 "parser.yy"
    84988499    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84998500    break;
     
    85028503
    85038504/* Line 1806 of yacc.c  */
    8504 #line 2301 "parser.yy"
     8505#line 2304 "parser.yy"
    85058506    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85068507    break;
    85078508
    85088509  case 603:
    8509 
    8510 /* Line 1806 of yacc.c  */
    8511 #line 2316 "parser.yy"
    8512     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8513     break;
    8514 
    8515   case 605:
    85168510
    85178511/* Line 1806 of yacc.c  */
     
    85208514    break;
    85218515
     8516  case 605:
     8517
     8518/* Line 1806 of yacc.c  */
     8519#line 2322 "parser.yy"
     8520    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8521    break;
     8522
    85228523  case 606:
    85238524
    85248525/* Line 1806 of yacc.c  */
    8525 #line 2321 "parser.yy"
     8526#line 2324 "parser.yy"
    85268527    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85278528    break;
     
    85308531
    85318532/* Line 1806 of yacc.c  */
    8532 #line 2327 "parser.yy"
     8533#line 2330 "parser.yy"
    85338534    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85348535    break;
     
    85378538
    85388539/* Line 1806 of yacc.c  */
    8539 #line 2332 "parser.yy"
     8540#line 2335 "parser.yy"
    85408541    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85418542    break;
     
    85448545
    85458546/* Line 1806 of yacc.c  */
    8546 #line 2334 "parser.yy"
     8547#line 2337 "parser.yy"
    85478548    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85488549    break;
     
    85518552
    85528553/* Line 1806 of yacc.c  */
    8553 #line 2336 "parser.yy"
     8554#line 2339 "parser.yy"
    85548555    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85558556    break;
     
    85588559
    85598560/* Line 1806 of yacc.c  */
    8560 #line 2341 "parser.yy"
     8561#line 2344 "parser.yy"
    85618562    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    85628563    break;
     
    85658566
    85668567/* Line 1806 of yacc.c  */
    8567 #line 2343 "parser.yy"
     8568#line 2346 "parser.yy"
    85688569    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85698570    break;
     
    85728573
    85738574/* Line 1806 of yacc.c  */
    8574 #line 2345 "parser.yy"
     8575#line 2348 "parser.yy"
    85758576    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85768577    break;
     
    85798580
    85808581/* Line 1806 of yacc.c  */
    8581 #line 2347 "parser.yy"
     8582#line 2350 "parser.yy"
    85828583    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85838584    break;
     
    85868587
    85878588/* Line 1806 of yacc.c  */
    8588 #line 2352 "parser.yy"
     8589#line 2355 "parser.yy"
    85898590    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85908591    break;
     
    85938594
    85948595/* Line 1806 of yacc.c  */
    8595 #line 2354 "parser.yy"
     8596#line 2357 "parser.yy"
    85968597    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85978598    break;
     
    86008601
    86018602/* Line 1806 of yacc.c  */
    8602 #line 2356 "parser.yy"
     8603#line 2359 "parser.yy"
    86038604    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86048605    break;
    86058606
    86068607  case 619:
    8607 
    8608 /* Line 1806 of yacc.c  */
    8609 #line 2366 "parser.yy"
    8610     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8611     break;
    8612 
    8613   case 621:
    86148608
    86158609/* Line 1806 of yacc.c  */
     
    86188612    break;
    86198613
     8614  case 621:
     8615
     8616/* Line 1806 of yacc.c  */
     8617#line 2372 "parser.yy"
     8618    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8619    break;
     8620
    86208621  case 622:
    86218622
    86228623/* Line 1806 of yacc.c  */
    8623 #line 2371 "parser.yy"
     8624#line 2374 "parser.yy"
    86248625    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86258626    break;
     
    86288629
    86298630/* Line 1806 of yacc.c  */
    8630 #line 2376 "parser.yy"
     8631#line 2379 "parser.yy"
    86318632    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86328633    break;
     
    86358636
    86368637/* Line 1806 of yacc.c  */
    8637 #line 2378 "parser.yy"
     8638#line 2381 "parser.yy"
    86388639    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86398640    break;
     
    86428643
    86438644/* Line 1806 of yacc.c  */
    8644 #line 2380 "parser.yy"
     8645#line 2383 "parser.yy"
    86458646    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86468647    break;
     
    86498650
    86508651/* Line 1806 of yacc.c  */
    8651 #line 2385 "parser.yy"
     8652#line 2388 "parser.yy"
    86528653    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    86538654    break;
     
    86568657
    86578658/* Line 1806 of yacc.c  */
    8658 #line 2387 "parser.yy"
     8659#line 2390 "parser.yy"
    86598660    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86608661    break;
     
    86638664
    86648665/* Line 1806 of yacc.c  */
    8665 #line 2389 "parser.yy"
     8666#line 2392 "parser.yy"
    86668667    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86678668    break;
     
    86708671
    86718672/* Line 1806 of yacc.c  */
    8672 #line 2391 "parser.yy"
     8673#line 2394 "parser.yy"
    86738674    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86748675    break;
     
    86778678
    86788679/* Line 1806 of yacc.c  */
    8679 #line 2396 "parser.yy"
     8680#line 2399 "parser.yy"
    86808681    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    86818682    break;
     
    86848685
    86858686/* Line 1806 of yacc.c  */
    8686 #line 2398 "parser.yy"
     8687#line 2401 "parser.yy"
    86878688    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86888689    break;
     
    86918692
    86928693/* Line 1806 of yacc.c  */
    8693 #line 2400 "parser.yy"
     8694#line 2403 "parser.yy"
    86948695    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86958696    break;
    86968697
    86978698  case 633:
    8698 
    8699 /* Line 1806 of yacc.c  */
    8700 #line 2431 "parser.yy"
    8701     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8702     break;
    8703 
    8704   case 635:
    87058699
    87068700/* Line 1806 of yacc.c  */
     
    87098703    break;
    87108704
     8705  case 635:
     8706
     8707/* Line 1806 of yacc.c  */
     8708#line 2437 "parser.yy"
     8709    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8710    break;
     8711
    87118712  case 636:
    87128713
    87138714/* Line 1806 of yacc.c  */
    8714 #line 2436 "parser.yy"
     8715#line 2439 "parser.yy"
    87158716    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87168717    break;
     
    87198720
    87208721/* Line 1806 of yacc.c  */
    8721 #line 2441 "parser.yy"
     8722#line 2444 "parser.yy"
    87228723    {
    87238724                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87298730
    87308731/* Line 1806 of yacc.c  */
    8731 #line 2446 "parser.yy"
     8732#line 2449 "parser.yy"
    87328733    {
    87338734                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87398740
    87408741/* Line 1806 of yacc.c  */
    8741 #line 2454 "parser.yy"
     8742#line 2457 "parser.yy"
    87428743    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87438744    break;
     
    87468747
    87478748/* Line 1806 of yacc.c  */
    8748 #line 2456 "parser.yy"
     8749#line 2459 "parser.yy"
    87498750    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87508751    break;
     
    87538754
    87548755/* Line 1806 of yacc.c  */
    8755 #line 2458 "parser.yy"
     8756#line 2461 "parser.yy"
    87568757    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87578758    break;
     
    87608761
    87618762/* Line 1806 of yacc.c  */
    8762 #line 2463 "parser.yy"
     8763#line 2466 "parser.yy"
    87638764    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87648765    break;
     
    87678768
    87688769/* Line 1806 of yacc.c  */
    8769 #line 2465 "parser.yy"
     8770#line 2468 "parser.yy"
    87708771    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87718772    break;
     
    87748775
    87758776/* Line 1806 of yacc.c  */
    8776 #line 2470 "parser.yy"
     8777#line 2473 "parser.yy"
    87778778    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    87788779    break;
     
    87818782
    87828783/* Line 1806 of yacc.c  */
    8783 #line 2472 "parser.yy"
     8784#line 2475 "parser.yy"
    87848785    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87858786    break;
     
    87888789
    87898790/* Line 1806 of yacc.c  */
    8790 #line 2487 "parser.yy"
     8791#line 2490 "parser.yy"
    87918792    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87928793    break;
     
    87958796
    87968797/* Line 1806 of yacc.c  */
    8797 #line 2489 "parser.yy"
     8798#line 2492 "parser.yy"
    87988799    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87998800    break;
     
    88028803
    88038804/* Line 1806 of yacc.c  */
    8804 #line 2494 "parser.yy"
     8805#line 2497 "parser.yy"
    88058806    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    88068807    break;
     
    88098810
    88108811/* Line 1806 of yacc.c  */
    8811 #line 2496 "parser.yy"
     8812#line 2499 "parser.yy"
    88128813    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    88138814    break;
     
    88168817
    88178818/* Line 1806 of yacc.c  */
    8818 #line 2498 "parser.yy"
     8819#line 2501 "parser.yy"
    88198820    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88208821    break;
     
    88238824
    88248825/* Line 1806 of yacc.c  */
    8825 #line 2500 "parser.yy"
     8826#line 2503 "parser.yy"
    88268827    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88278828    break;
     
    88308831
    88318832/* Line 1806 of yacc.c  */
    8832 #line 2502 "parser.yy"
     8833#line 2505 "parser.yy"
    88338834    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88348835    break;
     
    88378838
    88388839/* Line 1806 of yacc.c  */
    8839 #line 2508 "parser.yy"
     8840#line 2511 "parser.yy"
    88408841    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88418842    break;
     
    88448845
    88458846/* Line 1806 of yacc.c  */
    8846 #line 2510 "parser.yy"
     8847#line 2513 "parser.yy"
    88478848    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88488849    break;
     
    88518852
    88528853/* Line 1806 of yacc.c  */
    8853 #line 2512 "parser.yy"
     8854#line 2515 "parser.yy"
    88548855    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88558856    break;
     
    88588859
    88598860/* Line 1806 of yacc.c  */
    8860 #line 2517 "parser.yy"
     8861#line 2520 "parser.yy"
    88618862    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    88628863    break;
     
    88658866
    88668867/* Line 1806 of yacc.c  */
    8867 #line 2519 "parser.yy"
     8868#line 2522 "parser.yy"
    88688869    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    88698870    break;
     
    88728873
    88738874/* Line 1806 of yacc.c  */
    8874 #line 2521 "parser.yy"
     8875#line 2524 "parser.yy"
    88758876    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88768877    break;
     
    88798880
    88808881/* Line 1806 of yacc.c  */
    8881 #line 2527 "parser.yy"
     8882#line 2530 "parser.yy"
    88828883    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    88838884    break;
     
    88868887
    88878888/* Line 1806 of yacc.c  */
    8888 #line 2529 "parser.yy"
     8889#line 2532 "parser.yy"
    88898890    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    88908891    break;
     
    88938894
    88948895/* Line 1806 of yacc.c  */
    8895 #line 2535 "parser.yy"
     8896#line 2538 "parser.yy"
    88968897    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    88978898    break;
     
    89008901
    89018902/* Line 1806 of yacc.c  */
    8902 #line 2537 "parser.yy"
     8903#line 2540 "parser.yy"
    89038904    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    89048905    break;
     
    89078908
    89088909/* Line 1806 of yacc.c  */
    8909 #line 2539 "parser.yy"
     8910#line 2542 "parser.yy"
    89108911    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    89118912    break;
     
    89148915
    89158916/* Line 1806 of yacc.c  */
    8916 #line 2541 "parser.yy"
     8917#line 2544 "parser.yy"
    89178918    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    89188919    break;
     
    89218922
    89228923/* Line 1806 of yacc.c  */
    8923 #line 2556 "parser.yy"
     8924#line 2559 "parser.yy"
    89248925    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    89258926    break;
     
    89288929
    89298930/* Line 1806 of yacc.c  */
    8930 #line 2558 "parser.yy"
     8931#line 2561 "parser.yy"
    89318932    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    89328933    break;
     
    89358936
    89368937/* Line 1806 of yacc.c  */
    8937 #line 2563 "parser.yy"
     8938#line 2566 "parser.yy"
    89388939    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    89398940    break;
     
    89428943
    89438944/* Line 1806 of yacc.c  */
    8944 #line 2565 "parser.yy"
     8945#line 2568 "parser.yy"
    89458946    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    89468947    break;
     
    89498950
    89508951/* Line 1806 of yacc.c  */
    8951 #line 2567 "parser.yy"
     8952#line 2570 "parser.yy"
    89528953    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    89538954    break;
     
    89568957
    89578958/* Line 1806 of yacc.c  */
    8958 #line 2569 "parser.yy"
     8959#line 2572 "parser.yy"
    89598960    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    89608961    break;
     
    89638964
    89648965/* Line 1806 of yacc.c  */
    8965 #line 2571 "parser.yy"
     8966#line 2574 "parser.yy"
    89668967    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89678968    break;
     
    89708971
    89718972/* Line 1806 of yacc.c  */
    8972 #line 2577 "parser.yy"
     8973#line 2580 "parser.yy"
    89738974    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    89748975    break;
     
    89778978
    89788979/* Line 1806 of yacc.c  */
    8979 #line 2579 "parser.yy"
     8980#line 2582 "parser.yy"
    89808981    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    89818982    break;
     
    89848985
    89858986/* Line 1806 of yacc.c  */
    8986 #line 2581 "parser.yy"
     8987#line 2584 "parser.yy"
    89878988    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89888989    break;
     
    89918992
    89928993/* Line 1806 of yacc.c  */
    8993 #line 2586 "parser.yy"
     8994#line 2589 "parser.yy"
    89948995    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    89958996    break;
     
    89988999
    89999000/* Line 1806 of yacc.c  */
    9000 #line 2588 "parser.yy"
     9001#line 2591 "parser.yy"
    90019002    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    90029003    break;
     
    90059006
    90069007/* Line 1806 of yacc.c  */
    9007 #line 2590 "parser.yy"
     9008#line 2593 "parser.yy"
    90089009    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    90099010    break;
     
    90129013
    90139014/* Line 1806 of yacc.c  */
    9014 #line 2597 "parser.yy"
     9015#line 2600 "parser.yy"
    90159016    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    90169017    break;
     
    90199020
    90209021/* Line 1806 of yacc.c  */
    9021 #line 2608 "parser.yy"
     9022#line 2611 "parser.yy"
    90229023    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    90239024    break;
     
    90269027
    90279028/* Line 1806 of yacc.c  */
    9028 #line 2611 "parser.yy"
     9029#line 2614 "parser.yy"
    90299030    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    90309031    break;
     
    90339034
    90349035/* Line 1806 of yacc.c  */
    9035 #line 2613 "parser.yy"
     9036#line 2616 "parser.yy"
    90369037    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    90379038    break;
     
    90409041
    90419042/* Line 1806 of yacc.c  */
    9042 #line 2616 "parser.yy"
     9043#line 2619 "parser.yy"
    90439044    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    90449045    break;
     
    90479048
    90489049/* Line 1806 of yacc.c  */
    9049 #line 2618 "parser.yy"
     9050#line 2621 "parser.yy"
    90509051    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    90519052    break;
     
    90549055
    90559056/* Line 1806 of yacc.c  */
    9056 #line 2620 "parser.yy"
     9057#line 2623 "parser.yy"
    90579058    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    90589059    break;
     
    90619062
    90629063/* Line 1806 of yacc.c  */
    9063 #line 2634 "parser.yy"
     9064#line 2637 "parser.yy"
    90649065    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    90659066    break;
     
    90689069
    90699070/* Line 1806 of yacc.c  */
    9070 #line 2636 "parser.yy"
     9071#line 2639 "parser.yy"
    90719072    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    90729073    break;
     
    90759076
    90769077/* Line 1806 of yacc.c  */
    9077 #line 2641 "parser.yy"
     9078#line 2644 "parser.yy"
    90789079    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    90799080    break;
     
    90829083
    90839084/* Line 1806 of yacc.c  */
    9084 #line 2643 "parser.yy"
     9085#line 2646 "parser.yy"
    90859086    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    90869087    break;
     
    90899090
    90909091/* Line 1806 of yacc.c  */
    9091 #line 2645 "parser.yy"
     9092#line 2648 "parser.yy"
    90929093    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    90939094    break;
     
    90969097
    90979098/* Line 1806 of yacc.c  */
    9098 #line 2647 "parser.yy"
     9099#line 2650 "parser.yy"
    90999100    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    91009101    break;
     
    91039104
    91049105/* Line 1806 of yacc.c  */
    9105 #line 2649 "parser.yy"
     9106#line 2652 "parser.yy"
    91069107    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    91079108    break;
     
    91109111
    91119112/* Line 1806 of yacc.c  */
    9112 #line 2655 "parser.yy"
     9113#line 2658 "parser.yy"
    91139114    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    91149115    break;
     
    91179118
    91189119/* Line 1806 of yacc.c  */
    9119 #line 2657 "parser.yy"
     9120#line 2660 "parser.yy"
    91209121    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    91219122    break;
     
    91249125
    91259126/* Line 1806 of yacc.c  */
    9126 #line 2659 "parser.yy"
     9127#line 2662 "parser.yy"
    91279128    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    91289129    break;
     
    91319132
    91329133/* Line 1806 of yacc.c  */
    9133 #line 2664 "parser.yy"
     9134#line 2667 "parser.yy"
    91349135    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    91359136    break;
     
    91389139
    91399140/* Line 1806 of yacc.c  */
    9140 #line 2666 "parser.yy"
     9141#line 2669 "parser.yy"
    91419142    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    91429143    break;
     
    91459146
    91469147/* Line 1806 of yacc.c  */
    9147 #line 2676 "parser.yy"
     9148#line 2679 "parser.yy"
    91489149    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    91499150    break;
     
    91529153
    91539154/* Line 1806 of yacc.c  */
    9154 #line 2686 "parser.yy"
     9155#line 2689 "parser.yy"
    91559156    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91569157    break;
     
    91599160
    91609161/* Line 1806 of yacc.c  */
    9161 #line 2688 "parser.yy"
     9162#line 2691 "parser.yy"
    91629163    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91639164    break;
     
    91669167
    91679168/* Line 1806 of yacc.c  */
    9168 #line 2690 "parser.yy"
     9169#line 2693 "parser.yy"
    91699170    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91709171    break;
     
    91739174
    91749175/* Line 1806 of yacc.c  */
    9175 #line 2692 "parser.yy"
     9176#line 2695 "parser.yy"
    91769177    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91779178    break;
     
    91809181
    91819182/* Line 1806 of yacc.c  */
    9182 #line 2694 "parser.yy"
     9183#line 2697 "parser.yy"
    91839184    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91849185    break;
     
    91879188
    91889189/* Line 1806 of yacc.c  */
    9189 #line 2696 "parser.yy"
     9190#line 2699 "parser.yy"
    91909191    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91919192    break;
     
    91949195
    91959196/* Line 1806 of yacc.c  */
    9196 #line 2703 "parser.yy"
     9197#line 2706 "parser.yy"
    91979198    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91989199    break;
     
    92019202
    92029203/* Line 1806 of yacc.c  */
    9203 #line 2705 "parser.yy"
     9204#line 2708 "parser.yy"
    92049205    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92059206    break;
     
    92089209
    92099210/* Line 1806 of yacc.c  */
    9210 #line 2707 "parser.yy"
     9211#line 2710 "parser.yy"
    92119212    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92129213    break;
     
    92159216
    92169217/* Line 1806 of yacc.c  */
    9217 #line 2709 "parser.yy"
     9218#line 2712 "parser.yy"
    92189219    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    92199220    break;
     
    92229223
    92239224/* Line 1806 of yacc.c  */
    9224 #line 2711 "parser.yy"
     9225#line 2714 "parser.yy"
    92259226    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92269227    break;
     
    92299230
    92309231/* Line 1806 of yacc.c  */
    9231 #line 2713 "parser.yy"
     9232#line 2716 "parser.yy"
    92329233    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92339234    break;
     
    92369237
    92379238/* Line 1806 of yacc.c  */
    9238 #line 2715 "parser.yy"
     9239#line 2718 "parser.yy"
    92399240    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92409241    break;
     
    92439244
    92449245/* Line 1806 of yacc.c  */
    9245 #line 2717 "parser.yy"
     9246#line 2720 "parser.yy"
    92469247    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92479248    break;
     
    92509251
    92519252/* Line 1806 of yacc.c  */
    9252 #line 2719 "parser.yy"
     9253#line 2722 "parser.yy"
    92539254    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    92549255    break;
     
    92579258
    92589259/* Line 1806 of yacc.c  */
    9259 #line 2721 "parser.yy"
     9260#line 2724 "parser.yy"
    92609261    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92619262    break;
     
    92649265
    92659266/* Line 1806 of yacc.c  */
    9266 #line 2726 "parser.yy"
     9267#line 2729 "parser.yy"
    92679268    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    92689269    break;
     
    92719272
    92729273/* Line 1806 of yacc.c  */
    9273 #line 2728 "parser.yy"
     9274#line 2731 "parser.yy"
    92749275    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    92759276    break;
     
    92789279
    92799280/* Line 1806 of yacc.c  */
    9280 #line 2733 "parser.yy"
     9281#line 2736 "parser.yy"
    92819282    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    92829283    break;
     
    92859286
    92869287/* Line 1806 of yacc.c  */
    9287 #line 2735 "parser.yy"
     9288#line 2738 "parser.yy"
    92889289    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    92899290    break;
     
    92929293
    92939294/* Line 1806 of yacc.c  */
    9294 #line 2762 "parser.yy"
     9295#line 2765 "parser.yy"
    92959296    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    92969297    break;
     
    92999300
    93009301/* Line 1806 of yacc.c  */
    9301 #line 2773 "parser.yy"
     9302#line 2776 "parser.yy"
    93029303    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    93039304    break;
     
    93069307
    93079308/* Line 1806 of yacc.c  */
    9308 #line 2775 "parser.yy"
     9309#line 2778 "parser.yy"
    93099310    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    93109311    break;
     
    93139314
    93149315/* Line 1806 of yacc.c  */
    9315 #line 2777 "parser.yy"
     9316#line 2780 "parser.yy"
    93169317    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    93179318    break;
     
    93209321
    93219322/* Line 1806 of yacc.c  */
    9322 #line 2779 "parser.yy"
     9323#line 2782 "parser.yy"
    93239324    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    93249325    break;
     
    93279328
    93289329/* Line 1806 of yacc.c  */
    9329 #line 2781 "parser.yy"
     9330#line 2784 "parser.yy"
    93309331    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    93319332    break;
     
    93349335
    93359336/* Line 1806 of yacc.c  */
    9336 #line 2783 "parser.yy"
     9337#line 2786 "parser.yy"
    93379338    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    93389339    break;
     
    93419342
    93429343/* Line 1806 of yacc.c  */
    9343 #line 2790 "parser.yy"
     9344#line 2793 "parser.yy"
    93449345    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93459346    break;
     
    93489349
    93499350/* Line 1806 of yacc.c  */
    9350 #line 2792 "parser.yy"
     9351#line 2795 "parser.yy"
    93519352    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93529353    break;
     
    93559356
    93569357/* Line 1806 of yacc.c  */
    9357 #line 2794 "parser.yy"
     9358#line 2797 "parser.yy"
    93589359    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    93599360    break;
     
    93629363
    93639364/* Line 1806 of yacc.c  */
    9364 #line 2796 "parser.yy"
     9365#line 2799 "parser.yy"
    93659366    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93669367    break;
     
    93699370
    93709371/* Line 1806 of yacc.c  */
    9371 #line 2798 "parser.yy"
     9372#line 2801 "parser.yy"
    93729373    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93739374    break;
     
    93769377
    93779378/* Line 1806 of yacc.c  */
    9378 #line 2800 "parser.yy"
     9379#line 2803 "parser.yy"
    93799380    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    93809381    break;
     
    93839384
    93849385/* Line 1806 of yacc.c  */
    9385 #line 2805 "parser.yy"
     9386#line 2808 "parser.yy"
    93869387    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    93879388    break;
     
    93909391
    93919392/* Line 1806 of yacc.c  */
    9392 #line 2810 "parser.yy"
     9393#line 2813 "parser.yy"
    93939394    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    93949395    break;
     
    93979398
    93989399/* Line 1806 of yacc.c  */
    9399 #line 2812 "parser.yy"
     9400#line 2815 "parser.yy"
    94009401    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    94019402    break;
     
    94049405
    94059406/* Line 1806 of yacc.c  */
    9406 #line 2814 "parser.yy"
     9407#line 2817 "parser.yy"
    94079408    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    94089409    break;
     
    94119412
    94129413/* Line 1806 of yacc.c  */
    9413 #line 2838 "parser.yy"
     9414#line 2841 "parser.yy"
    94149415    { (yyval.en) = 0; }
    94159416    break;
     
    94189419
    94199420/* Line 1806 of yacc.c  */
    9420 #line 2840 "parser.yy"
     9421#line 2843 "parser.yy"
    94219422    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    94229423    break;
     
    94259426
    94269427/* Line 1806 of yacc.c  */
    9427 #line 9428 "Parser/parser.cc"
     9428#line 9429 "Parser/parser.cc"
    94289429      default: break;
    94299430    }
     
    96569657
    96579658/* Line 2067 of yacc.c  */
    9658 #line 2843 "parser.yy"
     9659#line 2846 "parser.yy"
    96599660
    96609661// ----end of grammar----
  • src/Parser/parser.h

    r76e8c55 r064e3ff  
    274274        LabelNode *label;
    275275        InitializerNode *in;
     276        OperatorNode::Type op;
    276277        bool flag;
    277278
     
    279280
    280281/* Line 2068 of yacc.c  */
    281 #line 282 "Parser/parser.h"
     282#line 283 "Parser/parser.h"
    282283} YYSTYPE;
    283284# define YYSTYPE_IS_TRIVIAL 1
  • src/Parser/parser.yy

    r76e8c55 r064e3ff  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug  4 11:28:18 2016
    13 // Update Count     : 1672
     12// Last Modified On : Thu Aug  4 16:56:28 2016
     13// Update Count     : 1694
    1414//
    1515
     
    119119        LabelNode *label;
    120120        InitializerNode *in;
     121        OperatorNode::Type op;
    121122        bool flag;
    122123}
     
    129130%type<constant> constant
    130131%type<en> tuple                                                 tuple_expression_list
    131 %type<en> ptrref_operator                               unary_operator                          assignment_operator
     132%type<op> ptrref_operator
     133%type<en> unary_operator                                assignment_operator
    132134%type<en> primary_expression                    postfix_expression                      unary_expression
    133135%type<en> cast_expression                               multiplicative_expression       additive_expression                     shift_expression
     
    360362                //   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
    361363        | postfix_expression '.' no_attr_identifier
    362                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), $1, new VarRefNode( $3 )); }
     364                { $$ = new CompositeExprNode2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
    363365        | postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
    364366        | postfix_expression ARROW no_attr_identifier
    365                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), $1, new VarRefNode( $3 )); }
     367                { $$ = new CompositeExprNode2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
    366368        | postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
    367369        | postfix_expression ICR
     
    410412                //   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
    411413        | no_attr_identifier '.' field
    412                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $3 ); }
     414                { $$ = new CompositeExprNode2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
    413415        | no_attr_identifier '.' '[' push field_list pop ']'
    414                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $5 ); }
     416                { $$ = new CompositeExprNode2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
    415417        | no_attr_identifier ARROW field
    416                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $3 ); }
     418                { $$ = new CompositeExprNode2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
    417419        | no_attr_identifier ARROW '[' push field_list pop ']'
    418                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $5 ); }
     420                { $$ = new CompositeExprNode2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
    419421        ;
    420422
     
    430432                { $$ = $2->set_extension( true ); }
    431433        | ptrref_operator cast_expression                                       // CFA
    432                 { $$ = new CompositeExprNode( $1, $2 ); }
     434        { $$ = $1 == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( $2 ) ) : (ExpressionNode*)new CompositeExprNode( new OperatorNode ( $1 ), $2 ); }
    433435                // '*' ('&') is separated from unary_operator because of shift/reduce conflict in:
    434436                //              { * X; }         // dereference X
     
    441443                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); }
    442444        | SIZEOF unary_expression
    443                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2 ); }
     445                { $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); }
    444446        | SIZEOF '(' type_name_no_function ')'
    445                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
     447                { $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); }
    446448        | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
    447                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
     449                { $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
    448450        | ATTR_IDENTIFIER
    449451                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
     
    453455                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); }
    454456        | ALIGNOF unary_expression                                                      // GCC, variable alignment
    455                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), $2 ); }
     457                { $$ = new CompositeExprNode2( build_alignOf( $2 ) ); }
    456458        | ALIGNOF '(' type_name_no_function ')'                         // GCC, type alignment
    457                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 ) ); }
     459                { $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); }
    458460//      | ANDAND IDENTIFIER                                                                     // GCC, address of label
    459461//              { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
     
    461463
    462464ptrref_operator:
    463         '*'                                                                                     { $$ = new OperatorNode( OperatorNode::PointTo ); }
    464         | '&'                                                                           { $$ = new OperatorNode( OperatorNode::AddressOf ); }
     465        '*'                                                                                     { $$ = OperatorNode::PointTo; }
     466        | '&'                                                                           { $$ = OperatorNode::AddressOf; }
    465467                // GCC, address of label must be handled by semantic check for ref,ref,label
    466         | ANDAND                                                                        { $$ = new OperatorNode( OperatorNode::And ); }
     468        | ANDAND                                                                        { $$ = OperatorNode::And; }
    467469        ;
    468470
     
    477479        unary_expression
    478480        | '(' type_name_no_function ')' cast_expression
    479                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
     481                { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
    480482        | '(' type_name_no_function ')' tuple
    481                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
     483                { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
    482484        ;
    483485
     
    742744case_value_list:                                                                                // CFA
    743745        case_value                                                                      { $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
     746                // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
    744747        | case_value_list ',' case_value                        { $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); }
    745748        ;
Note: See TracChangeset for help on using the changeset viewer.