Changes in / [b29f8f3:1e8f143]


Ignore:
Location:
src
Files:
31 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 15 14:47:42 2015
    13 // Update Count     : 177
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Jun 26 16:52:58 2015
     13// Update Count     : 144
    1414//
    1515
     
    3838        int CodeGenerator::tabsize = 4;
    3939
    40         // the kinds of statements that would ideally be followed by whitespace
     40        // the kinds of statements that would ideally be separated by more whitespace
    4141        bool wantSpacing( Statement * stmt) {
    4242                return dynamic_cast< IfStmt * >( stmt ) || dynamic_cast< CompoundStmt * >( stmt ) ||
     
    588588
    589589        void CodeGenerator::visit( ForStmt *forStmt ) {
    590                 // initialization is always hoisted, so don't
    591                 // bother doing anything with that
    592                 output << "for (;";
    593 
     590                output << "for (";
     591
     592                if ( forStmt->get_initialization() != 0 )
     593                        forStmt->get_initialization()->accept( *this );
     594                else
     595                        output << ";";
     596               
    594597                if ( forStmt->get_condition() != 0 )
    595598                        forStmt->get_condition()->accept( *this );
  • src/CodeGen/GenType.cc

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul  9 16:43:52 2015
    13 // Update Count     : 13
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Jul 08 16:08:24 2015
     13// Update Count     : 10
    1414//
    1515
     
    9393                        os << "_Atomic ";
    9494                } // if
    95                 if ( qualifiers.isAttribute ) {
    96                         os << "__attribute(( )) ";
    97                 } // if
    9895                if ( dimension != 0 ) {
    9996                        CodeGenerator cg( os );
    10097                        dimension->accept( cg );
    10198                } else if ( isVarLen ) {
    102                         // no dimension expression on a VLA means it came in with the * token
     99                        // no dimension expression on a VLA
     100                        // means it came in with the * token
    103101                        os << "*";
    104102                } // if
     
    204202                        typeString = "_Atomic " + typeString;
    205203                } // if
    206                 if ( type->get_isAttribute() ) {
    207                         typeString = "__attribute(( )) " + typeString;
    208                 } // if
    209204        }
    210205} // namespace CodeGen
  • src/ControlStruct/ForExprMutator.cc

    rb29f8f3 r1e8f143  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Jul 14 12:14:44 2015
    13 // Update Count     : 10
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue May 19 15:31:47 2015
     13// Update Count     : 2
    1414//
    1515
     
    2222                // recurse down all nest for loops to hoist any initializer declarations to make them C89 (rather than C99)
    2323                forStmt->set_body( forStmt->get_body()->acceptMutator( *this ) );
     24                if ( DeclStmt *decl = dynamic_cast< DeclStmt * > ( forStmt->get_initialization() ) ) {
     25                        // create compound statement, move initializer declaration outside, leave _for_ as-is
     26                        CompoundStmt *block = new CompoundStmt( std::list< Label >() );
     27                        std::list<Statement *> &stmts = block->get_kids();
    2428
    25                 std::list<Statement *> &init = forStmt->get_initialization();
    26                 if ( init.size() == 0 ) {
    27                         return forStmt;
     29                        stmts.push_back( decl );
     30                        forStmt->set_initialization( 0 );
     31                        stmts.push_back( forStmt );
     32
     33                        return block;
    2834                } // if
    29 
    30                 // create compound statement, move initializers outside, leave _for_ as-is
    31                 CompoundStmt *block = new CompoundStmt( std::list< Label >() );
    32                 std::list<Statement *> &stmts = block->get_kids();
    33                 for ( std::list<Statement *>::iterator it = init.begin(); it != init.end(); ++it ) {
    34                         stmts.push_back( *it );
    35                 }       // for
    36 
    37                 // add for to the new block
    38                 stmts.push_back( forStmt );
    39                 forStmt->set_initialization( std::list<Statement *>() );
    40                 return block;
    4135
    4236                return forStmt;
  • src/ControlStruct/MLEMutator.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Jul 20 13:58:35 2015
    13 // Update Count     : 176
    14 //
    15 
    16 // NOTE: There are two known subtle differences from the code that uC++
    17 // generates for the same input
    18 // -CFA puts the break label inside at the end of a switch, uC++ puts it after
    19 // -CFA puts the break label after a block, uC++ puts it inside at the end
    20 // we don't yet know if these differences are important, but if they are then
    21 // the fix would go in this file, since this is where these labels are generated.
     12// Last Modified On : Sat Jun 27 10:56:14 2015
     13// Update Count     : 174
     14//
    2215
    2316#include <cassert>
  • src/ControlStruct/Mutate.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 15 14:50:04 2015
    13 // Update Count     : 7
     12// Last Modified On : Wed Jun 03 23:08:43 2015
     13// Update Count     : 5
    1414//
    1515
     
    3636namespace ControlStruct {
    3737        void mutate( std::list< Declaration * > translationUnit ) {
    38                 // hoist initialization out of for statements
    39                 ForExprMutator formut;
     38                // ForExprMutator formut;
    4039
    4140                // normalizes label definitions and generates multi-level
     
    5251                // LabelTypeChecker lbl;
    5352
    54                 mutateAll( translationUnit, formut );
     53                // mutateAll( translationUnit, formut );
    5554                acceptAll( translationUnit, lfix );
    5655                mutateAll( translationUnit, chmut );
  • src/GenPoly/PolyMutator.cc

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 15 14:50:58 2015
    13 // Update Count     : 3
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue May 19 07:45:50 2015
     13// Update Count     : 1
    1414//
    1515
     
    9292        Statement * PolyMutator::mutate(ForStmt *forStmt) {
    9393                forStmt->set_body(  mutateStatement( forStmt->get_body() ) );
    94                 mutateAll( forStmt->get_initialization(), *this );
     94                forStmt->set_initialization(  maybeMutate( forStmt->get_initialization(), *this ) );
    9595                forStmt->set_condition(  mutateExpression( forStmt->get_condition() ) );
    9696                forStmt->set_increment(  mutateExpression( forStmt->get_increment() ) );
  • src/Parser/DeclarationNode.cc

    rb29f8f3 r1e8f143  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 12:34:05 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 14 14:46:32 2015
    13 // Update Count     : 126
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Jul 08 16:40:37 2015
     13// Update Count     : 121
    1414//
    1515
     
    472472                if ( o->get_link() ) {
    473473                        set_link( o->get_link()->clone() );
    474                 } // if
     474                }
     475
    475476        } // if
    476477        delete o;
  • src/Parser/ParseNode.h

    rb29f8f3 r1e8f143  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 14 14:58:25 2015
    13 // Update Count     : 91
     12// Last Modified On : Thu Jul  2 17:57:05 2015
     13// Update Count     : 84
    1414//
    1515
     
    265265class DeclarationNode : public ParseNode {
    266266  public:
    267         enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic };
     267        enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, Attribute };
    268268        enum StorageClass { Extern, Static, Auto, Register, Inline, Fortran, Noreturn, Threadlocal, NoStorageClass, };
    269269        enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
     
    352352        std::string name;
    353353        std::list< StorageClass > storageClasses;
    354         std::list< std::string > attributes;
    355354        ExpressionNode *bitfieldWidth;
    356355        InitializerNode *initializer;
     
    359358
    360359        static UniqueName anonymous;
    361 }; // DeclarationNode
     360};
    362361
    363362class StatementNode : public ParseNode {
     
    381380        static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
    382381
    383         StatementNode *set_block( StatementNode *b ) {  block = b; return this; }
    384         StatementNode *get_block() const { return block; }
    385 
    386         void set_control( ExpressionNode *c ) { control = c; }
    387         ExpressionNode *get_control() const { return control; }
    388 
    389         StatementNode::Type get_type() const { return type; }
     382        void set_control( ExpressionNode * );
     383        StatementNode * set_block( StatementNode * );
     384
     385        ExpressionNode *get_control() const ;
     386        StatementNode *get_block() const;
     387        StatementNode::Type get_type() const;
    390388
    391389        StatementNode *add_label( const std::string * );
    392         const std::list<std::string> &get_labels() const { return labels; }
     390        std::list<std::string> *get_labels() const;
    393391
    394392        void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
     
    411409        ExpressionNode *control;
    412410        StatementNode *block;
    413         std::list<std::string> labels;
     411        std::list<std::string> *labels;
    414412        std::string *target;                            // target label for jump statements
    415413        DeclarationNode *decl;
    416414
    417415        bool isCatchRest;
    418 }; // StatementNode
     416};
    419417
    420418class CompoundStmtNode : public StatementNode {
  • src/Parser/StatementNode.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Sat May 16 14:59:41 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 16 16:20:24 2015
    13 // Update Count     : 30
     12// Last Modified On : Sat Jun  6 23:25:41 2015
     13// Update Count     : 19
    1414//
    1515
     
    7272        delete control;
    7373        delete block;
     74        delete labels;
    7475        delete target;
    7576        delete decl;
     
    102103}
    103104
     105void StatementNode::set_control( ExpressionNode *c ) {
     106        control = c;
     107}
     108
     109StatementNode * StatementNode::set_block( StatementNode *b ) {
     110        block = b;
     111
     112        return this;
     113}
     114
     115ExpressionNode *StatementNode::get_control() const {
     116        return control;
     117}
     118
     119StatementNode *StatementNode::get_block() const {
     120        return block;
     121}
     122
     123StatementNode::Type StatementNode::get_type() const {
     124        return type;
     125}
     126
    104127StatementNode *StatementNode::add_label( const std::string *l ) {
    105128        if ( l != 0 ) {
    106                 labels.push_front( *l );
     129                if ( labels == 0 )
     130                        labels = new std::list<std::string>();
     131
     132                labels->push_front(*l );
    107133                delete l;
    108134        } // if
    109135        return this;
    110136}
     137
     138std::list<std::string> *StatementNode::get_labels() const { return labels; }
    111139
    112140StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
     
    142170
    143171void StatementNode::print( std::ostream &os, int indent ) const {
    144         if ( ! labels.empty()) {
    145                 std::list<std::string>::const_iterator i;
    146 
    147                 os << string( indent, ' ' );
    148                 for ( i = labels.begin(); i != labels.end(); i++ )
    149                         os << *i << ":";
    150                 os << endl;
     172        if ( labels != 0 ) {
     173                if ( ! labels->empty()) {
     174                        std::list<std::string>::const_iterator i;
     175
     176                        os << string( indent, ' ' );
     177                        for ( i = labels->begin(); i != labels->end(); i++ )
     178                                os << *i << ":";
     179                        os << endl;
     180                } // if
    151181        } // if
    152182
     
    195225        std::list<Label> labs;
    196226
    197         if ( ! labels.empty() ) {
     227        if ( labels != 0 ) {
    198228                std::back_insert_iterator< std::list<Label> > lab_it( labs );
    199                 copy( labels.begin(), labels.end(), lab_it );
     229                copy( labels->begin(), labels->end(), lab_it );
    200230        } // if
    201231
     
    241271                        assert( ctl != 0 );
    242272
    243                         std::list<Statement *> init;
    244                         if ( ctl->get_init() != 0 ) {
    245                                 buildList( ctl->get_init(), init );
    246                         } // if
     273                        Statement *stmt = 0;
     274                        if ( ctl->get_init() != 0 )
     275                                stmt = ctl->get_init()->build();
    247276
    248277                        Expression *cond = 0;
     
    254283                                incr = ctl->get_change()->build();
    255284
    256                         return new ForStmt( labs, init, cond, incr, branches.front() );
     285                        return new ForStmt( labs, stmt, cond, incr, branches.front() );
    257286                }
    258287          case Switch:
     
    348377Statement *CompoundStmtNode::build() const {
    349378        std::list<Label> labs;
    350         const std::list<std::string> &labels = get_labels();
    351 
    352         if ( ! labels.empty() ) {
     379        std::list<std::string> *labels = get_labels();
     380
     381        if ( labels != 0 ) {
    353382                std::back_insert_iterator< std::list<Label> > lab_it( labs );
    354                 copy( labels.begin(), labels.end(), lab_it );
     383                copy( labels->begin(), labels->end(), lab_it );
    355384        } // if
    356385
  • src/Parser/TypeData.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 14 14:57:23 2015
    13 // Update Count     : 32
     12// Last Modified On : Fri Jun 26 07:30:06 2015
     13// Update Count     : 26
    1414//
    1515
     
    397397                } // if
    398398                break;
    399           default:
    400                 os << "internal error: TypeData::print " << kind  << endl;
    401                 assert( false );
    402399        } // switch
    403400}
     
    477474                return buildVariable();
    478475        } else {
    479                 return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, isInline, isNoreturn );
     476                if ( isInline || isNoreturn ) {
     477                        throw SemanticError( "invalid inline or _Noreturn specification in declaration of ", this );
     478                } else {
     479                        return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init );
     480                } // if
    480481        } // if
    481482        return 0;
     
    535536                  case DeclarationNode::Atomic:
    536537                        q.isAtomic = true;
     538                        break;
     539                  case DeclarationNode::Attribute:
     540                        q.isAttribute = true;
    537541                        break;
    538542                } // switch
  • src/Parser/parser.cc

    rb29f8f3 r1e8f143  
    8080#include "lex.h"
    8181#include "ParseNode.h"
    82 #include "TypeData.h"
    8382#include "LinkageSpec.h"
    8483
     
    9089
    9190/* Line 268 of yacc.c  */
    92 #line 93 "Parser/parser.cc"
     91#line 92 "Parser/parser.cc"
    9392
    9493/* Enabling traces.  */
     
    325324
    326325/* Line 293 of yacc.c  */
    327 #line 108 "parser.yy"
     326#line 107 "parser.yy"
    328327
    329328        Token tok;
     
    340339
    341340/* Line 293 of yacc.c  */
    342 #line 343 "Parser/parser.cc"
     341#line 342 "Parser/parser.cc"
    343342} YYSTYPE;
    344343# define YYSTYPE_IS_TRIVIAL 1
     
    352351
    353352/* Line 343 of yacc.c  */
    354 #line 355 "Parser/parser.cc"
     353#line 354 "Parser/parser.cc"
    355354
    356355#ifdef short
     
    983982static const yytype_uint16 yyrline[] =
    984983{
    985        0,   282,   282,   288,   297,   298,   299,   303,   304,   305,
    986      309,   310,   314,   318,   319,   323,   324,   330,   332,   334,
    987      336,   338,   340,   345,   346,   352,   354,   356,   357,   359,
    988      360,   362,   365,   370,   371,   377,   378,   379,   384,   386,
    989      391,   392,   396,   398,   400,   402,   404,   409,   410,   412,
    990      414,   416,   418,   420,   426,   428,   430,   432,   434,   436,
    991      438,   440,   445,   446,   447,   448,   452,   453,   455,   460,
    992      461,   463,   465,   470,   471,   473,   478,   479,   481,   486,
    993      487,   489,   491,   493,   498,   499,   501,   506,   507,   512,
    994      513,   518,   519,   524,   525,   530,   531,   536,   537,   539,
    995      541,   546,   551,   552,   554,   556,   562,   563,   569,   571,
    996      573,   575,   580,   581,   586,   587,   588,   589,   590,   591,
    997      592,   593,   594,   595,   599,   600,   606,   607,   613,   614,
    998      615,   616,   617,   618,   619,   620,   624,   631,   633,   643,
    999      644,   649,   651,   653,   655,   659,   660,   665,   670,   673,
    1000      675,   677,   682,   684,   692,   693,   695,   699,   700,   705,
    1001      706,   711,   712,   716,   721,   722,   726,   728,   734,   735,
    1002      739,   741,   743,   745,   751,   752,   756,   757,   761,   763,
    1003      765,   770,   772,   777,   779,   783,   786,   790,   793,   797,
    1004      799,   801,   806,   808,   810,   819,   821,   823,   828,   830,
    1005      835,   848,   849,   854,   856,   861,   865,   867,   869,   871,
    1006      875,   877,   881,   882,   886,   890,   891,   897,   899,   903,
    1007      904,   909,   911,   915,   916,   920,   922,   926,   927,   931,
    1008      932,   936,   937,   952,   953,   954,   955,   956,   960,   965,
    1009      972,   982,   987,   992,  1000,  1005,  1010,  1015,  1020,  1028,
    1010     1050,  1055,  1062,  1064,  1071,  1076,  1081,  1092,  1097,  1102,
    1011     1107,  1112,  1121,  1126,  1134,  1135,  1136,  1137,  1143,  1148,
    1012     1156,  1157,  1158,  1159,  1163,  1164,  1165,  1166,  1171,  1172,
    1013     1181,  1182,  1187,  1188,  1193,  1195,  1197,  1199,  1201,  1204,
    1014     1203,  1215,  1216,  1218,  1228,  1229,  1234,  1238,  1240,  1242,
    1015     1244,  1246,  1248,  1250,  1252,  1257,  1259,  1261,  1263,  1265,
    1016     1267,  1269,  1271,  1273,  1275,  1277,  1279,  1285,  1286,  1288,
    1017     1290,  1292,  1297,  1298,  1304,  1305,  1307,  1309,  1314,  1316,
    1018     1318,  1320,  1325,  1326,  1328,  1330,  1335,  1336,  1338,  1343,
    1019     1344,  1346,  1348,  1353,  1355,  1357,  1362,  1363,  1367,  1369,
    1020     1371,  1373,  1375,  1380,  1382,  1387,  1389,  1394,  1395,  1397,
    1021     1398,  1403,  1404,  1406,  1408,  1413,  1415,  1421,  1422,  1424,
    1022     1427,  1430,  1435,  1436,  1441,  1446,  1450,  1452,  1454,  1459,
    1023     1461,  1467,  1468,  1476,  1477,  1481,  1482,  1483,  1485,  1487,
    1024     1494,  1495,  1497,  1499,  1504,  1505,  1511,  1512,  1516,  1517,
    1025     1522,  1523,  1524,  1526,  1534,  1535,  1537,  1540,  1542,  1546,
    1026     1547,  1548,  1550,  1552,  1556,  1561,  1569,  1570,  1579,  1581,
    1027     1586,  1587,  1588,  1592,  1593,  1594,  1598,  1599,  1600,  1604,
    1028     1605,  1606,  1611,  1612,  1613,  1614,  1620,  1621,  1626,  1627,
    1029     1631,  1632,  1633,  1634,  1649,  1650,  1655,  1656,  1662,  1664,
    1030     1667,  1669,  1671,  1694,  1695,  1697,  1699,  1704,  1705,  1707,
    1031     1712,  1717,  1718,  1724,  1723,  1727,  1731,  1733,  1735,  1741,
    1032     1742,  1747,  1752,  1754,  1759,  1761,  1762,  1764,  1769,  1771,
    1033     1773,  1778,  1780,  1785,  1790,  1798,  1804,  1803,  1817,  1818,
    1034     1823,  1824,  1828,  1833,  1838,  1846,  1851,  1862,  1863,  1874,
    1035     1875,  1881,  1882,  1886,  1887,  1888,  1891,  1890,  1901,  1906,
    1036     1911,  1917,  1926,  1932,  1938,  1944,  1950,  1958,  1964,  1972,
    1037     1978,  1987,  1988,  1989,  1993,  1997,  1999,  2004,  2005,  2009,
    1038     2010,  2015,  2021,  2022,  2025,  2027,  2028,  2032,  2033,  2034,
    1039     2035,  2069,  2071,  2072,  2074,  2079,  2084,  2089,  2091,  2093,
    1040     2098,  2100,  2102,  2104,  2109,  2111,  2121,  2123,  2124,  2129,
    1041     2131,  2133,  2138,  2140,  2142,  2147,  2149,  2151,  2160,  2161,
    1042     2162,  2166,  2168,  2170,  2175,  2177,  2179,  2184,  2186,  2188,
    1043     2203,  2205,  2206,  2208,  2213,  2214,  2219,  2221,  2223,  2228,
    1044     2230,  2232,  2234,  2239,  2241,  2243,  2253,  2255,  2256,  2258,
    1045     2263,  2265,  2267,  2272,  2274,  2276,  2278,  2283,  2285,  2287,
    1046     2318,  2320,  2321,  2323,  2328,  2333,  2341,  2343,  2345,  2350,
    1047     2352,  2357,  2359,  2373,  2374,  2376,  2381,  2383,  2385,  2387,
    1048     2389,  2394,  2395,  2397,  2399,  2404,  2406,  2408,  2414,  2416,
    1049     2418,  2422,  2424,  2426,  2428,  2442,  2443,  2445,  2450,  2452,
    1050     2454,  2456,  2458,  2463,  2464,  2466,  2468,  2473,  2475,  2477,
    1051     2483,  2484,  2486,  2495,  2498,  2500,  2503,  2505,  2507,  2520,
    1052     2521,  2523,  2528,  2530,  2532,  2534,  2536,  2541,  2542,  2544,
    1053     2546,  2551,  2553,  2561,  2562,  2563,  2568,  2569,  2573,  2575,
    1054     2577,  2579,  2581,  2583,  2590,  2592,  2594,  2596,  2598,  2600,
    1055     2602,  2604,  2606,  2608,  2613,  2615,  2617,  2622,  2648,  2649,
    1056     2651,  2655,  2656,  2660,  2662,  2664,  2666,  2668,  2670,  2677,
    1057     2679,  2681,  2683,  2685,  2687,  2692,  2697,  2699,  2701,  2719,
    1058     2721,  2726,  2727
     984       0,   279,   279,   285,   294,   295,   296,   300,   301,   302,
     985     306,   307,   311,   315,   316,   320,   321,   327,   329,   331,
     986     333,   335,   337,   342,   343,   349,   351,   353,   354,   356,
     987     357,   359,   362,   367,   368,   374,   375,   376,   381,   383,
     988     388,   389,   393,   395,   397,   399,   401,   406,   407,   409,
     989     411,   413,   415,   417,   423,   425,   427,   429,   431,   433,
     990     435,   437,   442,   443,   444,   445,   449,   450,   452,   457,
     991     458,   460,   462,   467,   468,   470,   475,   476,   478,   483,
     992     484,   486,   488,   490,   495,   496,   498,   503,   504,   509,
     993     510,   515,   516,   521,   522,   527,   528,   533,   534,   536,
     994     538,   543,   548,   549,   551,   553,   559,   560,   566,   568,
     995     570,   572,   577,   578,   583,   584,   585,   586,   587,   588,
     996     589,   590,   591,   592,   596,   597,   603,   604,   610,   611,
     997     612,   613,   614,   615,   616,   617,   621,   626,   628,   638,
     998     639,   644,   646,   648,   650,   654,   655,   660,   665,   668,
     999     670,   672,   677,   679,   687,   688,   690,   694,   695,   700,
     1000     701,   706,   707,   711,   716,   717,   721,   723,   729,   730,
     1001     734,   736,   738,   740,   746,   747,   751,   752,   756,   758,
     1002     760,   765,   767,   772,   774,   778,   781,   785,   788,   792,
     1003     794,   796,   801,   803,   805,   814,   816,   818,   823,   825,
     1004     830,   843,   844,   849,   851,   856,   860,   862,   864,   866,
     1005     870,   872,   876,   877,   881,   885,   886,   892,   894,   898,
     1006     899,   904,   906,   910,   911,   915,   917,   921,   922,   926,
     1007     927,   931,   932,   947,   948,   949,   950,   951,   955,   960,
     1008     967,   977,   982,   987,   995,  1000,  1005,  1010,  1015,  1023,
     1009    1045,  1050,  1057,  1059,  1066,  1071,  1076,  1087,  1092,  1097,
     1010    1102,  1107,  1116,  1121,  1129,  1130,  1131,  1132,  1138,  1143,
     1011    1151,  1152,  1153,  1154,  1158,  1159,  1160,  1161,  1166,  1167,
     1012    1176,  1177,  1182,  1183,  1188,  1190,  1192,  1194,  1196,  1199,
     1013    1198,  1210,  1211,  1213,  1223,  1224,  1229,  1233,  1235,  1237,
     1014    1239,  1241,  1243,  1245,  1247,  1252,  1254,  1256,  1258,  1260,
     1015    1262,  1264,  1266,  1268,  1270,  1272,  1274,  1280,  1281,  1283,
     1016    1285,  1287,  1292,  1293,  1299,  1300,  1302,  1304,  1309,  1311,
     1017    1313,  1315,  1320,  1321,  1323,  1325,  1330,  1331,  1333,  1338,
     1018    1339,  1341,  1343,  1348,  1350,  1352,  1357,  1358,  1362,  1364,
     1019    1366,  1368,  1370,  1375,  1377,  1382,  1384,  1389,  1390,  1392,
     1020    1393,  1398,  1399,  1401,  1403,  1408,  1410,  1416,  1417,  1419,
     1021    1422,  1425,  1430,  1431,  1436,  1441,  1445,  1447,  1449,  1454,
     1022    1456,  1462,  1463,  1471,  1472,  1476,  1477,  1478,  1480,  1482,
     1023    1489,  1490,  1492,  1494,  1499,  1500,  1506,  1507,  1511,  1512,
     1024    1517,  1518,  1519,  1521,  1529,  1530,  1532,  1535,  1537,  1541,
     1025    1542,  1543,  1545,  1547,  1551,  1556,  1564,  1565,  1574,  1576,
     1026    1581,  1582,  1583,  1587,  1588,  1589,  1593,  1594,  1595,  1599,
     1027    1600,  1601,  1606,  1607,  1608,  1609,  1615,  1616,  1621,  1622,
     1028    1626,  1627,  1628,  1629,  1644,  1645,  1650,  1651,  1657,  1659,
     1029    1662,  1664,  1666,  1689,  1690,  1692,  1694,  1699,  1700,  1702,
     1030    1707,  1712,  1713,  1719,  1718,  1722,  1726,  1728,  1730,  1736,
     1031    1737,  1742,  1747,  1749,  1754,  1756,  1757,  1759,  1764,  1766,
     1032    1768,  1773,  1775,  1780,  1785,  1793,  1799,  1798,  1812,  1813,
     1033    1818,  1819,  1823,  1828,  1833,  1841,  1846,  1857,  1858,  1869,
     1034    1870,  1876,  1877,  1881,  1882,  1883,  1886,  1885,  1896,  1901,
     1035    1906,  1912,  1921,  1927,  1933,  1939,  1945,  1953,  1959,  1967,
     1036    1973,  1982,  1983,  1984,  1988,  1992,  1994,  1997,  1999,  2003,
     1037    2004,  2008,  2012,  2013,  2016,  2018,  2019,  2023,  2024,  2025,
     1038    2026,  2060,  2061,  2062,  2063,  2067,  2072,  2077,  2079,  2081,
     1039    2086,  2088,  2090,  2092,  2097,  2099,  2109,  2110,  2111,  2115,
     1040    2117,  2119,  2124,  2126,  2128,  2133,  2135,  2137,  2146,  2147,
     1041    2148,  2152,  2154,  2156,  2161,  2163,  2165,  2170,  2172,  2174,
     1042    2189,  2190,  2191,  2192,  2196,  2197,  2202,  2204,  2206,  2211,
     1043    2213,  2215,  2217,  2222,  2224,  2226,  2236,  2237,  2238,  2239,
     1044    2243,  2245,  2247,  2252,  2254,  2256,  2258,  2263,  2265,  2267,
     1045    2298,  2299,  2300,  2301,  2305,  2310,  2318,  2320,  2322,  2327,
     1046    2329,  2334,  2336,  2350,  2351,  2352,  2356,  2358,  2360,  2362,
     1047    2364,  2369,  2370,  2372,  2374,  2379,  2381,  2383,  2389,  2391,
     1048    2393,  2397,  2399,  2401,  2403,  2417,  2418,  2419,  2423,  2425,
     1049    2427,  2429,  2431,  2436,  2437,  2439,  2441,  2446,  2448,  2450,
     1050    2456,  2457,  2459,  2468,  2471,  2473,  2476,  2478,  2480,  2493,
     1051    2494,  2495,  2499,  2501,  2503,  2505,  2507,  2512,  2513,  2515,
     1052    2517,  2522,  2524,  2532,  2533,  2534,  2539,  2540,  2544,  2546,
     1053    2548,  2550,  2552,  2554,  2561,  2563,  2565,  2567,  2569,  2571,
     1054    2573,  2575,  2577,  2579,  2584,  2586,  2588,  2593,  2619,  2620,
     1055    2622,  2626,  2627,  2631,  2633,  2635,  2637,  2639,  2641,  2648,
     1056    2650,  2652,  2654,  2656,  2658,  2663,  2668,  2670,  2672,  2690,
     1057    2692,  2697,  2698
    10591058};
    10601059#endif
     
    50085007
    50095008/* Line 1806 of yacc.c  */
    5010 #line 282 "parser.yy"
     5009#line 279 "parser.yy"
    50115010    {
    50125011                        typedefTable.enterScope();
     
    50175016
    50185017/* Line 1806 of yacc.c  */
    5019 #line 288 "parser.yy"
     5018#line 285 "parser.yy"
    50205019    {
    50215020                        typedefTable.leaveScope();
     
    50265025
    50275026/* Line 1806 of yacc.c  */
    5028 #line 297 "parser.yy"
     5027#line 294 "parser.yy"
    50295028    { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
    50305029    break;
     
    50335032
    50345033/* Line 1806 of yacc.c  */
    5035 #line 298 "parser.yy"
     5034#line 295 "parser.yy"
    50365035    { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
    50375036    break;
     
    50405039
    50415040/* Line 1806 of yacc.c  */
    5042 #line 299 "parser.yy"
     5041#line 296 "parser.yy"
    50435042    { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
    50445043    break;
     
    50475046
    50485047/* Line 1806 of yacc.c  */
    5049 #line 323 "parser.yy"
     5048#line 320 "parser.yy"
    50505049    { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
    50515050    break;
     
    50545053
    50555054/* Line 1806 of yacc.c  */
    5056 #line 324 "parser.yy"
     5055#line 321 "parser.yy"
    50575056    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
    50585057    break;
     
    50615060
    50625061/* Line 1806 of yacc.c  */
    5063 #line 331 "parser.yy"
     5062#line 328 "parser.yy"
    50645063    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    50655064    break;
     
    50685067
    50695068/* Line 1806 of yacc.c  */
    5070 #line 333 "parser.yy"
     5069#line 330 "parser.yy"
    50715070    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    50725071    break;
     
    50755074
    50765075/* Line 1806 of yacc.c  */
    5077 #line 335 "parser.yy"
     5076#line 332 "parser.yy"
    50785077    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    50795078    break;
     
    50825081
    50835082/* Line 1806 of yacc.c  */
    5084 #line 337 "parser.yy"
     5083#line 334 "parser.yy"
    50855084    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    50865085    break;
     
    50895088
    50905089/* Line 1806 of yacc.c  */
    5091 #line 339 "parser.yy"
     5090#line 336 "parser.yy"
    50925091    { (yyval.en) = (yyvsp[(2) - (3)].en); }
    50935092    break;
     
    50965095
    50975096/* Line 1806 of yacc.c  */
    5098 #line 341 "parser.yy"
     5097#line 338 "parser.yy"
    50995098    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
    51005099    break;
     
    51035102
    51045103/* Line 1806 of yacc.c  */
    5105 #line 351 "parser.yy"
     5104#line 348 "parser.yy"
    51065105    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
    51075106    break;
     
    51105109
    51115110/* Line 1806 of yacc.c  */
    5112 #line 353 "parser.yy"
     5111#line 350 "parser.yy"
    51135112    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
    51145113    break;
     
    51175116
    51185117/* Line 1806 of yacc.c  */
     5118#line 352 "parser.yy"
     5119    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     5120    break;
     5121
     5122  case 28:
     5123
     5124/* Line 1806 of yacc.c  */
    51195125#line 355 "parser.yy"
    5120     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    5121     break;
    5122 
    5123   case 28:
     5126    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     5127    break;
     5128
     5129  case 30:
    51245130
    51255131/* Line 1806 of yacc.c  */
    51265132#line 358 "parser.yy"
    5127     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    5128     break;
    5129 
    5130   case 30:
    5131 
    5132 /* Line 1806 of yacc.c  */
    5133 #line 361 "parser.yy"
    51345133    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
    51355134    break;
     
    51385137
    51395138/* Line 1806 of yacc.c  */
     5139#line 360 "parser.yy"
     5140    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     5141    break;
     5142
     5143  case 32:
     5144
     5145/* Line 1806 of yacc.c  */
    51405146#line 363 "parser.yy"
    5141     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
    5142     break;
    5143 
    5144   case 32:
    5145 
    5146 /* Line 1806 of yacc.c  */
    5147 #line 366 "parser.yy"
    51485147    { (yyval.en) = 0; }
    51495148    break;
     
    51525151
    51535152/* Line 1806 of yacc.c  */
    5154 #line 372 "parser.yy"
     5153#line 369 "parser.yy"
    51555154    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    51565155    break;
     
    51595158
    51605159/* Line 1806 of yacc.c  */
     5160#line 374 "parser.yy"
     5161    { (yyval.en) = 0; }
     5162    break;
     5163
     5164  case 37:
     5165
     5166/* Line 1806 of yacc.c  */
    51615167#line 377 "parser.yy"
     5168    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_asArgName( (yyvsp[(1) - (3)].tok) ); }
     5169    break;
     5170
     5171  case 38:
     5172
     5173/* Line 1806 of yacc.c  */
     5174#line 382 "parser.yy"
     5175    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_asArgName( (yyvsp[(3) - (7)].en) ); }
     5176    break;
     5177
     5178  case 39:
     5179
     5180/* Line 1806 of yacc.c  */
     5181#line 384 "parser.yy"
     5182    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_asArgName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
     5183    break;
     5184
     5185  case 41:
     5186
     5187/* Line 1806 of yacc.c  */
     5188#line 389 "parser.yy"
     5189    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     5190    break;
     5191
     5192  case 42:
     5193
     5194/* Line 1806 of yacc.c  */
     5195#line 394 "parser.yy"
     5196    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     5197    break;
     5198
     5199  case 43:
     5200
     5201/* Line 1806 of yacc.c  */
     5202#line 396 "parser.yy"
     5203    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     5204    break;
     5205
     5206  case 44:
     5207
     5208/* Line 1806 of yacc.c  */
     5209#line 398 "parser.yy"
     5210    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     5211    break;
     5212
     5213  case 45:
     5214
     5215/* Line 1806 of yacc.c  */
     5216#line 400 "parser.yy"
     5217    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     5218    break;
     5219
     5220  case 46:
     5221
     5222/* Line 1806 of yacc.c  */
     5223#line 402 "parser.yy"
     5224    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     5225    break;
     5226
     5227  case 48:
     5228
     5229/* Line 1806 of yacc.c  */
     5230#line 408 "parser.yy"
     5231    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     5232    break;
     5233
     5234  case 49:
     5235
     5236/* Line 1806 of yacc.c  */
     5237#line 410 "parser.yy"
     5238    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     5239    break;
     5240
     5241  case 50:
     5242
     5243/* Line 1806 of yacc.c  */
     5244#line 412 "parser.yy"
     5245    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     5246    break;
     5247
     5248  case 51:
     5249
     5250/* Line 1806 of yacc.c  */
     5251#line 414 "parser.yy"
     5252    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     5253    break;
     5254
     5255  case 52:
     5256
     5257/* Line 1806 of yacc.c  */
     5258#line 416 "parser.yy"
     5259    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
     5260    break;
     5261
     5262  case 53:
     5263
     5264/* Line 1806 of yacc.c  */
     5265#line 418 "parser.yy"
     5266    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
     5267    break;
     5268
     5269  case 54:
     5270
     5271/* Line 1806 of yacc.c  */
     5272#line 424 "parser.yy"
     5273    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     5274    break;
     5275
     5276  case 55:
     5277
     5278/* Line 1806 of yacc.c  */
     5279#line 426 "parser.yy"
     5280    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5281    break;
     5282
     5283  case 56:
     5284
     5285/* Line 1806 of yacc.c  */
     5286#line 428 "parser.yy"
     5287    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     5288    break;
     5289
     5290  case 57:
     5291
     5292/* Line 1806 of yacc.c  */
     5293#line 430 "parser.yy"
     5294    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5295    break;
     5296
     5297  case 58:
     5298
     5299/* Line 1806 of yacc.c  */
     5300#line 432 "parser.yy"
     5301    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     5302    break;
     5303
     5304  case 59:
     5305
     5306/* Line 1806 of yacc.c  */
     5307#line 434 "parser.yy"
     5308    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     5309    break;
     5310
     5311  case 60:
     5312
     5313/* Line 1806 of yacc.c  */
     5314#line 436 "parser.yy"
     5315    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5316    break;
     5317
     5318  case 61:
     5319
     5320/* Line 1806 of yacc.c  */
     5321#line 438 "parser.yy"
     5322    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true )); }
     5323    break;
     5324
     5325  case 62:
     5326
     5327/* Line 1806 of yacc.c  */
     5328#line 442 "parser.yy"
     5329    { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     5330    break;
     5331
     5332  case 63:
     5333
     5334/* Line 1806 of yacc.c  */
     5335#line 443 "parser.yy"
     5336    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     5337    break;
     5338
     5339  case 64:
     5340
     5341/* Line 1806 of yacc.c  */
     5342#line 444 "parser.yy"
     5343    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     5344    break;
     5345
     5346  case 65:
     5347
     5348/* Line 1806 of yacc.c  */
     5349#line 445 "parser.yy"
     5350    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
     5351    break;
     5352
     5353  case 67:
     5354
     5355/* Line 1806 of yacc.c  */
     5356#line 451 "parser.yy"
     5357    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5358    break;
     5359
     5360  case 68:
     5361
     5362/* Line 1806 of yacc.c  */
     5363#line 453 "parser.yy"
     5364    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5365    break;
     5366
     5367  case 70:
     5368
     5369/* Line 1806 of yacc.c  */
     5370#line 459 "parser.yy"
     5371    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5372    break;
     5373
     5374  case 71:
     5375
     5376/* Line 1806 of yacc.c  */
     5377#line 461 "parser.yy"
     5378    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5379    break;
     5380
     5381  case 72:
     5382
     5383/* Line 1806 of yacc.c  */
     5384#line 463 "parser.yy"
     5385    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5386    break;
     5387
     5388  case 74:
     5389
     5390/* Line 1806 of yacc.c  */
     5391#line 469 "parser.yy"
     5392    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5393    break;
     5394
     5395  case 75:
     5396
     5397/* Line 1806 of yacc.c  */
     5398#line 471 "parser.yy"
     5399    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5400    break;
     5401
     5402  case 77:
     5403
     5404/* Line 1806 of yacc.c  */
     5405#line 477 "parser.yy"
     5406    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5407    break;
     5408
     5409  case 78:
     5410
     5411/* Line 1806 of yacc.c  */
     5412#line 479 "parser.yy"
     5413    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5414    break;
     5415
     5416  case 80:
     5417
     5418/* Line 1806 of yacc.c  */
     5419#line 485 "parser.yy"
     5420    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5421    break;
     5422
     5423  case 81:
     5424
     5425/* Line 1806 of yacc.c  */
     5426#line 487 "parser.yy"
     5427    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5428    break;
     5429
     5430  case 82:
     5431
     5432/* Line 1806 of yacc.c  */
     5433#line 489 "parser.yy"
     5434    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5435    break;
     5436
     5437  case 83:
     5438
     5439/* Line 1806 of yacc.c  */
     5440#line 491 "parser.yy"
     5441    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5442    break;
     5443
     5444  case 85:
     5445
     5446/* Line 1806 of yacc.c  */
     5447#line 497 "parser.yy"
     5448    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5449    break;
     5450
     5451  case 86:
     5452
     5453/* Line 1806 of yacc.c  */
     5454#line 499 "parser.yy"
     5455    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5456    break;
     5457
     5458  case 88:
     5459
     5460/* Line 1806 of yacc.c  */
     5461#line 505 "parser.yy"
     5462    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5463    break;
     5464
     5465  case 90:
     5466
     5467/* Line 1806 of yacc.c  */
     5468#line 511 "parser.yy"
     5469    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5470    break;
     5471
     5472  case 92:
     5473
     5474/* Line 1806 of yacc.c  */
     5475#line 517 "parser.yy"
     5476    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5477    break;
     5478
     5479  case 94:
     5480
     5481/* Line 1806 of yacc.c  */
     5482#line 523 "parser.yy"
     5483    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5484    break;
     5485
     5486  case 96:
     5487
     5488/* Line 1806 of yacc.c  */
     5489#line 529 "parser.yy"
     5490    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5491    break;
     5492
     5493  case 98:
     5494
     5495/* Line 1806 of yacc.c  */
     5496#line 535 "parser.yy"
     5497    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     5498    break;
     5499
     5500  case 99:
     5501
     5502/* Line 1806 of yacc.c  */
     5503#line 537 "parser.yy"
     5504    { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     5505    break;
     5506
     5507  case 100:
     5508
     5509/* Line 1806 of yacc.c  */
     5510#line 539 "parser.yy"
     5511    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     5512    break;
     5513
     5514  case 103:
     5515
     5516/* Line 1806 of yacc.c  */
     5517#line 550 "parser.yy"
     5518    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5519    break;
     5520
     5521  case 104:
     5522
     5523/* Line 1806 of yacc.c  */
     5524#line 552 "parser.yy"
     5525    { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5526    break;
     5527
     5528  case 105:
     5529
     5530/* Line 1806 of yacc.c  */
     5531#line 554 "parser.yy"
     5532    { (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) ); }
     5533    break;
     5534
     5535  case 106:
     5536
     5537/* Line 1806 of yacc.c  */
     5538#line 559 "parser.yy"
     5539    { (yyval.en) = new NullExprNode; }
     5540    break;
     5541
     5542  case 108:
     5543
     5544/* Line 1806 of yacc.c  */
     5545#line 567 "parser.yy"
     5546    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     5547    break;
     5548
     5549  case 109:
     5550
     5551/* Line 1806 of yacc.c  */
     5552#line 569 "parser.yy"
     5553    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     5554    break;
     5555
     5556  case 110:
     5557
     5558/* Line 1806 of yacc.c  */
     5559#line 571 "parser.yy"
     5560    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     5561    break;
     5562
     5563  case 111:
     5564
     5565/* Line 1806 of yacc.c  */
     5566#line 573 "parser.yy"
     5567    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
     5568    break;
     5569
     5570  case 113:
     5571
     5572/* Line 1806 of yacc.c  */
     5573#line 579 "parser.yy"
     5574    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     5575    break;
     5576
     5577  case 114:
     5578
     5579/* Line 1806 of yacc.c  */
     5580#line 583 "parser.yy"
     5581    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     5582    break;
     5583
     5584  case 115:
     5585
     5586/* Line 1806 of yacc.c  */
     5587#line 584 "parser.yy"
     5588    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     5589    break;
     5590
     5591  case 116:
     5592
     5593/* Line 1806 of yacc.c  */
     5594#line 585 "parser.yy"
     5595    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     5596    break;
     5597
     5598  case 117:
     5599
     5600/* Line 1806 of yacc.c  */
     5601#line 586 "parser.yy"
     5602    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     5603    break;
     5604
     5605  case 118:
     5606
     5607/* Line 1806 of yacc.c  */
     5608#line 587 "parser.yy"
     5609    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     5610    break;
     5611
     5612  case 119:
     5613
     5614/* Line 1806 of yacc.c  */
     5615#line 588 "parser.yy"
     5616    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     5617    break;
     5618
     5619  case 120:
     5620
     5621/* Line 1806 of yacc.c  */
     5622#line 589 "parser.yy"
     5623    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     5624    break;
     5625
     5626  case 121:
     5627
     5628/* Line 1806 of yacc.c  */
     5629#line 590 "parser.yy"
     5630    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     5631    break;
     5632
     5633  case 122:
     5634
     5635/* Line 1806 of yacc.c  */
     5636#line 591 "parser.yy"
     5637    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     5638    break;
     5639
     5640  case 123:
     5641
     5642/* Line 1806 of yacc.c  */
     5643#line 592 "parser.yy"
     5644    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
     5645    break;
     5646
     5647  case 125:
     5648
     5649/* Line 1806 of yacc.c  */
     5650#line 598 "parser.yy"
     5651    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5652    break;
     5653
     5654  case 126:
     5655
     5656/* Line 1806 of yacc.c  */
     5657#line 603 "parser.yy"
    51625658    { (yyval.en) = 0; }
    51635659    break;
    51645660
    5165   case 37:
    5166 
    5167 /* Line 1806 of yacc.c  */
    5168 #line 380 "parser.yy"
    5169     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_asArgName( (yyvsp[(1) - (3)].tok) ); }
    5170     break;
    5171 
    5172   case 38:
    5173 
    5174 /* Line 1806 of yacc.c  */
    5175 #line 385 "parser.yy"
    5176     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_asArgName( (yyvsp[(3) - (7)].en) ); }
    5177     break;
    5178 
    5179   case 39:
    5180 
    5181 /* Line 1806 of yacc.c  */
    5182 #line 387 "parser.yy"
    5183     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_asArgName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
    5184     break;
    5185 
    5186   case 41:
    5187 
    5188 /* Line 1806 of yacc.c  */
    5189 #line 392 "parser.yy"
    5190     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    5191     break;
    5192 
    5193   case 42:
    5194 
    5195 /* Line 1806 of yacc.c  */
    5196 #line 397 "parser.yy"
    5197     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    5198     break;
    5199 
    5200   case 43:
    5201 
    5202 /* Line 1806 of yacc.c  */
    5203 #line 399 "parser.yy"
    5204     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    5205     break;
    5206 
    5207   case 44:
    5208 
    5209 /* Line 1806 of yacc.c  */
    5210 #line 401 "parser.yy"
    5211     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    5212     break;
    5213 
    5214   case 45:
    5215 
    5216 /* Line 1806 of yacc.c  */
    5217 #line 403 "parser.yy"
    5218     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    5219     break;
    5220 
    5221   case 46:
    5222 
    5223 /* Line 1806 of yacc.c  */
    5224 #line 405 "parser.yy"
    5225     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    5226     break;
    5227 
    5228   case 48:
    5229 
    5230 /* Line 1806 of yacc.c  */
    5231 #line 411 "parser.yy"
    5232     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
    5233     break;
    5234 
    5235   case 49:
    5236 
    5237 /* Line 1806 of yacc.c  */
    5238 #line 413 "parser.yy"
    5239     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
    5240     break;
    5241 
    5242   case 50:
    5243 
    5244 /* Line 1806 of yacc.c  */
    5245 #line 415 "parser.yy"
    5246     { (yyval.en) = (yyvsp[(2) - (2)].en); }
    5247     break;
    5248 
    5249   case 51:
    5250 
    5251 /* Line 1806 of yacc.c  */
    5252 #line 417 "parser.yy"
    5253     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    5254     break;
    5255 
    5256   case 52:
    5257 
    5258 /* Line 1806 of yacc.c  */
    5259 #line 419 "parser.yy"
    5260     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
    5261     break;
    5262 
    5263   case 53:
    5264 
    5265 /* Line 1806 of yacc.c  */
    5266 #line 421 "parser.yy"
    5267     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
    5268     break;
    5269 
    5270   case 54:
    5271 
    5272 /* Line 1806 of yacc.c  */
    5273 #line 427 "parser.yy"
    5274     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
    5275     break;
    5276 
    5277   case 55:
    5278 
    5279 /* Line 1806 of yacc.c  */
    5280 #line 429 "parser.yy"
    5281     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    5282     break;
    5283 
    5284   case 56:
    5285 
    5286 /* Line 1806 of yacc.c  */
    5287 #line 431 "parser.yy"
    5288     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
    5289     break;
    5290 
    5291   case 57:
    5292 
    5293 /* Line 1806 of yacc.c  */
    5294 #line 433 "parser.yy"
    5295     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    5296     break;
    5297 
    5298   case 58:
    5299 
    5300 /* Line 1806 of yacc.c  */
    5301 #line 435 "parser.yy"
    5302     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
    5303     break;
    5304 
    5305   case 59:
    5306 
    5307 /* Line 1806 of yacc.c  */
    5308 #line 437 "parser.yy"
    5309     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
    5310     break;
    5311 
    5312   case 60:
    5313 
    5314 /* Line 1806 of yacc.c  */
    5315 #line 439 "parser.yy"
    5316     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    5317     break;
    5318 
    5319   case 61:
    5320 
    5321 /* Line 1806 of yacc.c  */
    5322 #line 441 "parser.yy"
    5323     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true )); }
    5324     break;
    5325 
    5326   case 62:
    5327 
    5328 /* Line 1806 of yacc.c  */
    5329 #line 445 "parser.yy"
    5330     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
    5331     break;
    5332 
    5333   case 63:
    5334 
    5335 /* Line 1806 of yacc.c  */
    5336 #line 446 "parser.yy"
    5337     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
    5338     break;
    5339 
    5340   case 64:
    5341 
    5342 /* Line 1806 of yacc.c  */
    5343 #line 447 "parser.yy"
    5344     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
    5345     break;
    5346 
    5347   case 65:
    5348 
    5349 /* Line 1806 of yacc.c  */
    5350 #line 448 "parser.yy"
    5351     { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
    5352     break;
    5353 
    5354   case 67:
    5355 
    5356 /* Line 1806 of yacc.c  */
    5357 #line 454 "parser.yy"
    5358     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    5359     break;
    5360 
    5361   case 68:
    5362 
    5363 /* Line 1806 of yacc.c  */
    5364 #line 456 "parser.yy"
    5365     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    5366     break;
    5367 
    5368   case 70:
    5369 
    5370 /* Line 1806 of yacc.c  */
    5371 #line 462 "parser.yy"
    5372     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5373     break;
    5374 
    5375   case 71:
    5376 
    5377 /* Line 1806 of yacc.c  */
    5378 #line 464 "parser.yy"
    5379     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5380     break;
    5381 
    5382   case 72:
    5383 
    5384 /* Line 1806 of yacc.c  */
    5385 #line 466 "parser.yy"
    5386     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5387     break;
    5388 
    5389   case 74:
    5390 
    5391 /* Line 1806 of yacc.c  */
    5392 #line 472 "parser.yy"
    5393     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5394     break;
    5395 
    5396   case 75:
    5397 
    5398 /* Line 1806 of yacc.c  */
    5399 #line 474 "parser.yy"
    5400     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5401     break;
    5402 
    5403   case 77:
    5404 
    5405 /* Line 1806 of yacc.c  */
    5406 #line 480 "parser.yy"
    5407     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5408     break;
    5409 
    5410   case 78:
    5411 
    5412 /* Line 1806 of yacc.c  */
    5413 #line 482 "parser.yy"
    5414     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5415     break;
    5416 
    5417   case 80:
    5418 
    5419 /* Line 1806 of yacc.c  */
    5420 #line 488 "parser.yy"
    5421     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5422     break;
    5423 
    5424   case 81:
    5425 
    5426 /* Line 1806 of yacc.c  */
    5427 #line 490 "parser.yy"
    5428     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5429     break;
    5430 
    5431   case 82:
    5432 
    5433 /* Line 1806 of yacc.c  */
    5434 #line 492 "parser.yy"
    5435     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5436     break;
    5437 
    5438   case 83:
    5439 
    5440 /* Line 1806 of yacc.c  */
    5441 #line 494 "parser.yy"
    5442     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5443     break;
    5444 
    5445   case 85:
    5446 
    5447 /* Line 1806 of yacc.c  */
    5448 #line 500 "parser.yy"
    5449     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5450     break;
    5451 
    5452   case 86:
    5453 
    5454 /* Line 1806 of yacc.c  */
    5455 #line 502 "parser.yy"
    5456     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5457     break;
    5458 
    5459   case 88:
    5460 
    5461 /* Line 1806 of yacc.c  */
    5462 #line 508 "parser.yy"
    5463     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5464     break;
    5465 
    5466   case 90:
    5467 
    5468 /* Line 1806 of yacc.c  */
    5469 #line 514 "parser.yy"
    5470     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5471     break;
    5472 
    5473   case 92:
    5474 
    5475 /* Line 1806 of yacc.c  */
    5476 #line 520 "parser.yy"
    5477     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5478     break;
    5479 
    5480   case 94:
    5481 
    5482 /* Line 1806 of yacc.c  */
    5483 #line 526 "parser.yy"
    5484     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5485     break;
    5486 
    5487   case 96:
    5488 
    5489 /* Line 1806 of yacc.c  */
    5490 #line 532 "parser.yy"
    5491     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5492     break;
    5493 
    5494   case 98:
    5495 
    5496 /* Line 1806 of yacc.c  */
    5497 #line 538 "parser.yy"
    5498     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    5499     break;
    5500 
    5501   case 99:
    5502 
    5503 /* Line 1806 of yacc.c  */
    5504 #line 540 "parser.yy"
    5505     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    5506     break;
    5507 
    5508   case 100:
    5509 
    5510 /* Line 1806 of yacc.c  */
    5511 #line 542 "parser.yy"
    5512     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    5513     break;
    5514 
    5515   case 103:
    5516 
    5517 /* Line 1806 of yacc.c  */
    5518 #line 553 "parser.yy"
    5519     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5520     break;
    5521 
    5522   case 104:
    5523 
    5524 /* Line 1806 of yacc.c  */
    5525 #line 555 "parser.yy"
    5526     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5527     break;
    5528 
    5529   case 105:
    5530 
    5531 /* Line 1806 of yacc.c  */
    5532 #line 557 "parser.yy"
    5533     { (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) ); }
    5534     break;
    5535 
    5536   case 106:
    5537 
    5538 /* Line 1806 of yacc.c  */
    5539 #line 562 "parser.yy"
    5540     { (yyval.en) = new NullExprNode; }
    5541     break;
    5542 
    5543   case 108:
    5544 
    5545 /* Line 1806 of yacc.c  */
    5546 #line 570 "parser.yy"
    5547     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
    5548     break;
    5549 
    5550   case 109:
    5551 
    5552 /* Line 1806 of yacc.c  */
    5553 #line 572 "parser.yy"
    5554     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
    5555     break;
    5556 
    5557   case 110:
    5558 
    5559 /* Line 1806 of yacc.c  */
    5560 #line 574 "parser.yy"
    5561     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
    5562     break;
    5563 
    5564   case 111:
    5565 
    5566 /* Line 1806 of yacc.c  */
    5567 #line 576 "parser.yy"
    5568     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
    5569     break;
    5570 
    5571   case 113:
    5572 
    5573 /* Line 1806 of yacc.c  */
    5574 #line 582 "parser.yy"
    5575     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    5576     break;
    5577 
    5578   case 114:
    5579 
    5580 /* Line 1806 of yacc.c  */
    5581 #line 586 "parser.yy"
    5582     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
    5583     break;
    5584 
    5585   case 115:
    5586 
    5587 /* Line 1806 of yacc.c  */
    5588 #line 587 "parser.yy"
    5589     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
    5590     break;
    5591 
    5592   case 116:
    5593 
    5594 /* Line 1806 of yacc.c  */
    5595 #line 588 "parser.yy"
    5596     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
    5597     break;
    5598 
    5599   case 117:
    5600 
    5601 /* Line 1806 of yacc.c  */
    5602 #line 589 "parser.yy"
    5603     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
    5604     break;
    5605 
    5606   case 118:
    5607 
    5608 /* Line 1806 of yacc.c  */
    5609 #line 590 "parser.yy"
    5610     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
    5611     break;
    5612 
    5613   case 119:
    5614 
    5615 /* Line 1806 of yacc.c  */
    5616 #line 591 "parser.yy"
    5617     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
    5618     break;
    5619 
    5620   case 120:
    5621 
    5622 /* Line 1806 of yacc.c  */
    5623 #line 592 "parser.yy"
    5624     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
    5625     break;
    5626 
    5627   case 121:
    5628 
    5629 /* Line 1806 of yacc.c  */
    5630 #line 593 "parser.yy"
    5631     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
    5632     break;
    5633 
    5634   case 122:
    5635 
    5636 /* Line 1806 of yacc.c  */
    5637 #line 594 "parser.yy"
    5638     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
    5639     break;
    5640 
    5641   case 123:
    5642 
    5643 /* Line 1806 of yacc.c  */
    5644 #line 595 "parser.yy"
    5645     { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
    5646     break;
    5647 
    5648   case 125:
    5649 
    5650 /* Line 1806 of yacc.c  */
    5651 #line 601 "parser.yy"
    5652     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5653     break;
    5654 
    5655   case 126:
    5656 
    5657 /* Line 1806 of yacc.c  */
    5658 #line 606 "parser.yy"
    5659     { (yyval.en) = 0; }
    5660     break;
    5661 
    56625661  case 130:
    56635662
    56645663/* Line 1806 of yacc.c  */
    5665 #line 615 "parser.yy"
     5664#line 612 "parser.yy"
    56665665    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    56675666    break;
     
    56705669
    56715670/* Line 1806 of yacc.c  */
    5672 #line 625 "parser.yy"
    5673     {
    5674                         (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
    5675                 }
     5671#line 622 "parser.yy"
     5672    { (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );}
    56765673    break;
    56775674
     
    56795676
    56805677/* Line 1806 of yacc.c  */
    5681 #line 632 "parser.yy"
     5678#line 627 "parser.yy"
    56825679    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
    56835680    break;
     
    56865683
    56875684/* Line 1806 of yacc.c  */
    5688 #line 639 "parser.yy"
     5685#line 634 "parser.yy"
    56895686    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
    56905687    break;
     
    56935690
    56945691/* Line 1806 of yacc.c  */
     5692#line 640 "parser.yy"
     5693    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     5694    break;
     5695
     5696  case 141:
     5697
     5698/* Line 1806 of yacc.c  */
    56955699#line 645 "parser.yy"
    5696     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    5697     break;
    5698 
    5699   case 141:
    5700 
    5701 /* Line 1806 of yacc.c  */
    5702 #line 650 "parser.yy"
    57035700    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57045701    break;
     
    57075704
    57085705/* Line 1806 of yacc.c  */
    5709 #line 652 "parser.yy"
     5706#line 647 "parser.yy"
    57105707    { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
    57115708    break;
     
    57145711
    57155712/* Line 1806 of yacc.c  */
    5716 #line 654 "parser.yy"
     5713#line 649 "parser.yy"
    57175714    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57185715    break;
     
    57215718
    57225719/* Line 1806 of yacc.c  */
     5720#line 656 "parser.yy"
     5721    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     5722    break;
     5723
     5724  case 147:
     5725
     5726/* Line 1806 of yacc.c  */
    57235727#line 661 "parser.yy"
    5724     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    5725     break;
    5726 
    5727   case 147:
    5728 
    5729 /* Line 1806 of yacc.c  */
    5730 #line 666 "parser.yy"
    57315728    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    57325729    break;
     
    57355732
    57365733/* Line 1806 of yacc.c  */
    5737 #line 672 "parser.yy"
     5734#line 667 "parser.yy"
    57385735    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57395736    break;
     
    57425739
    57435740/* Line 1806 of yacc.c  */
    5744 #line 674 "parser.yy"
     5741#line 669 "parser.yy"
    57455742    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    57465743    break;
     
    57495746
    57505747/* Line 1806 of yacc.c  */
    5751 #line 676 "parser.yy"
     5748#line 671 "parser.yy"
    57525749    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57535750    break;
     
    57565753
    57575754/* Line 1806 of yacc.c  */
     5755#line 673 "parser.yy"
     5756    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
     5757    break;
     5758
     5759  case 152:
     5760
     5761/* Line 1806 of yacc.c  */
    57585762#line 678 "parser.yy"
    5759     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
    5760     break;
    5761 
    5762   case 152:
    5763 
    5764 /* Line 1806 of yacc.c  */
    5765 #line 683 "parser.yy"
    57665763    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57675764    break;
     
    57705767
    57715768/* Line 1806 of yacc.c  */
    5772 #line 685 "parser.yy"
     5769#line 680 "parser.yy"
    57735770    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
    57745771    break;
     
    57775774
    57785775/* Line 1806 of yacc.c  */
    5779 #line 692 "parser.yy"
     5776#line 687 "parser.yy"
    57805777    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    57815778    break;
     
    57845781
    57855782/* Line 1806 of yacc.c  */
    5786 #line 694 "parser.yy"
     5783#line 689 "parser.yy"
    57875784    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57885785    break;
     
    57915788
    57925789/* Line 1806 of yacc.c  */
     5790#line 696 "parser.yy"
     5791    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
     5792    break;
     5793
     5794  case 159:
     5795
     5796/* Line 1806 of yacc.c  */
     5797#line 700 "parser.yy"
     5798    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
     5799    break;
     5800
     5801  case 160:
     5802
     5803/* Line 1806 of yacc.c  */
    57935804#line 701 "parser.yy"
    5794     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    5795     break;
    5796 
    5797   case 159:
    5798 
    5799 /* Line 1806 of yacc.c  */
    5800 #line 705 "parser.yy"
    5801     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    5802     break;
    5803 
    5804   case 160:
    5805 
    5806 /* Line 1806 of yacc.c  */
    5807 #line 706 "parser.yy"
    58085805    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    58095806    break;
     
    58125809
    58135810/* Line 1806 of yacc.c  */
    5814 #line 712 "parser.yy"
     5811#line 707 "parser.yy"
    58155812    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    58165813    break;
     
    58195816
    58205817/* Line 1806 of yacc.c  */
     5818#line 711 "parser.yy"
     5819    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     5820    break;
     5821
     5822  case 164:
     5823
     5824/* Line 1806 of yacc.c  */
    58215825#line 716 "parser.yy"
     5826    { (yyval.sn) = 0; }
     5827    break;
     5828
     5829  case 166:
     5830
     5831/* Line 1806 of yacc.c  */
     5832#line 722 "parser.yy"
    58225833    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58235834    break;
    58245835
    5825   case 164:
    5826 
    5827 /* Line 1806 of yacc.c  */
    5828 #line 721 "parser.yy"
     5836  case 167:
     5837
     5838/* Line 1806 of yacc.c  */
     5839#line 724 "parser.yy"
     5840    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     5841    break;
     5842
     5843  case 168:
     5844
     5845/* Line 1806 of yacc.c  */
     5846#line 729 "parser.yy"
    58295847    { (yyval.sn) = 0; }
    58305848    break;
    58315849
    5832   case 166:
    5833 
    5834 /* Line 1806 of yacc.c  */
    5835 #line 727 "parser.yy"
     5850  case 170:
     5851
     5852/* Line 1806 of yacc.c  */
     5853#line 735 "parser.yy"
    58365854    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58375855    break;
    58385856
    5839   case 167:
    5840 
    5841 /* Line 1806 of yacc.c  */
    5842 #line 729 "parser.yy"
     5857  case 171:
     5858
     5859/* Line 1806 of yacc.c  */
     5860#line 737 "parser.yy"
     5861    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
     5862    break;
     5863
     5864  case 172:
     5865
     5866/* Line 1806 of yacc.c  */
     5867#line 739 "parser.yy"
    58435868    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    58445869    break;
    58455870
    5846   case 168:
    5847 
    5848 /* Line 1806 of yacc.c  */
    5849 #line 734 "parser.yy"
     5871  case 173:
     5872
     5873/* Line 1806 of yacc.c  */
     5874#line 741 "parser.yy"
     5875    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
     5876    break;
     5877
     5878  case 174:
     5879
     5880/* Line 1806 of yacc.c  */
     5881#line 746 "parser.yy"
    58505882    { (yyval.sn) = 0; }
    58515883    break;
    58525884
    5853   case 170:
    5854 
    5855 /* Line 1806 of yacc.c  */
    5856 #line 740 "parser.yy"
    5857     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    5858     break;
    5859 
    5860   case 171:
    5861 
    5862 /* Line 1806 of yacc.c  */
    5863 #line 742 "parser.yy"
    5864     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
    5865     break;
    5866 
    5867   case 172:
    5868 
    5869 /* Line 1806 of yacc.c  */
    5870 #line 744 "parser.yy"
    5871     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    5872     break;
    5873 
    5874   case 173:
    5875 
    5876 /* Line 1806 of yacc.c  */
    5877 #line 746 "parser.yy"
    5878     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
    5879     break;
    5880 
    5881   case 174:
     5885  case 176:
    58825886
    58835887/* Line 1806 of yacc.c  */
    58845888#line 751 "parser.yy"
    5885     { (yyval.sn) = 0; }
    5886     break;
    5887 
    5888   case 176:
    5889 
    5890 /* Line 1806 of yacc.c  */
    5891 #line 756 "parser.yy"
    58925889    { (yyval.sn) = new StatementNode( StatementNode::Fallthru, 0, 0 ); }
    58935890    break;
     
    58965893
    58975894/* Line 1806 of yacc.c  */
     5895#line 752 "parser.yy"
     5896    { (yyval.sn) = new StatementNode( StatementNode::Fallthru, 0, 0 ); }
     5897    break;
     5898
     5899  case 178:
     5900
     5901/* Line 1806 of yacc.c  */
    58985902#line 757 "parser.yy"
    5899     { (yyval.sn) = new StatementNode( StatementNode::Fallthru, 0, 0 ); }
    5900     break;
    5901 
    5902   case 178:
    5903 
    5904 /* Line 1806 of yacc.c  */
    5905 #line 762 "parser.yy"
    59065903    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    59075904    break;
     
    59105907
    59115908/* Line 1806 of yacc.c  */
    5912 #line 764 "parser.yy"
     5909#line 759 "parser.yy"
    59135910    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    59145911    break;
     
    59175914
    59185915/* Line 1806 of yacc.c  */
     5916#line 761 "parser.yy"
     5917    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     5918    break;
     5919
     5920  case 181:
     5921
     5922/* Line 1806 of yacc.c  */
    59195923#line 766 "parser.yy"
    5920     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    5921     break;
    5922 
    5923   case 181:
    5924 
    5925 /* Line 1806 of yacc.c  */
    5926 #line 771 "parser.yy"
    59275924    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    59285925    break;
     
    59315928
    59325929/* Line 1806 of yacc.c  */
     5930#line 768 "parser.yy"
     5931    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     5932    break;
     5933
     5934  case 183:
     5935
     5936/* Line 1806 of yacc.c  */
    59335937#line 773 "parser.yy"
    5934     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    5935     break;
    5936 
    5937   case 183:
    5938 
    5939 /* Line 1806 of yacc.c  */
    5940 #line 778 "parser.yy"
    59415938    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    59425939    break;
     
    59455942
    59465943/* Line 1806 of yacc.c  */
    5947 #line 782 "parser.yy"
     5944#line 777 "parser.yy"
    59485945    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    59495946    break;
     
    59525949
    59535950/* Line 1806 of yacc.c  */
    5954 #line 785 "parser.yy"
     5951#line 780 "parser.yy"
    59555952    { (yyval.sn) = new StatementNode( StatementNode::Continue, 0, 0 ); }
    59565953    break;
     
    59595956
    59605957/* Line 1806 of yacc.c  */
    5961 #line 789 "parser.yy"
     5958#line 784 "parser.yy"
    59625959    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    59635960    break;
     
    59665963
    59675964/* Line 1806 of yacc.c  */
    5968 #line 792 "parser.yy"
     5965#line 787 "parser.yy"
    59695966    { (yyval.sn) = new StatementNode( StatementNode::Break, 0, 0 ); }
    59705967    break;
     
    59735970
    59745971/* Line 1806 of yacc.c  */
    5975 #line 796 "parser.yy"
     5972#line 791 "parser.yy"
    59765973    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    59775974    break;
     
    59805977
    59815978/* Line 1806 of yacc.c  */
    5982 #line 798 "parser.yy"
     5979#line 793 "parser.yy"
    59835980    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    59845981    break;
     
    59875984
    59885985/* Line 1806 of yacc.c  */
    5989 #line 800 "parser.yy"
     5986#line 795 "parser.yy"
    59905987    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    59915988    break;
     
    59945991
    59955992/* Line 1806 of yacc.c  */
     5993#line 797 "parser.yy"
     5994    { (yyval.sn) = new StatementNode( StatementNode::Throw, 0, 0 ); }
     5995    break;
     5996
     5997  case 192:
     5998
     5999/* Line 1806 of yacc.c  */
    59966000#line 802 "parser.yy"
    5997     { (yyval.sn) = new StatementNode( StatementNode::Throw, 0, 0 ); }
    5998     break;
    5999 
    6000   case 192:
    6001 
    6002 /* Line 1806 of yacc.c  */
    6003 #line 807 "parser.yy"
    60046001    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    60056002    break;
     
    60086005
    60096006/* Line 1806 of yacc.c  */
    6010 #line 809 "parser.yy"
     6007#line 804 "parser.yy"
    60116008    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    60126009    break;
     
    60156012
    60166013/* Line 1806 of yacc.c  */
    6017 #line 811 "parser.yy"
     6014#line 806 "parser.yy"
    60186015    {
    60196016                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    60256022
    60266023/* Line 1806 of yacc.c  */
    6027 #line 822 "parser.yy"
     6024#line 817 "parser.yy"
    60286025    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    60296026    break;
     
    60326029
    60336030/* Line 1806 of yacc.c  */
     6031#line 819 "parser.yy"
     6032    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     6033    break;
     6034
     6035  case 198:
     6036
     6037/* Line 1806 of yacc.c  */
    60346038#line 824 "parser.yy"
    6035     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    6036     break;
    6037 
    6038   case 198:
    6039 
    6040 /* Line 1806 of yacc.c  */
    6041 #line 829 "parser.yy"
    60426039    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    60436040    break;
     
    60466043
    60476044/* Line 1806 of yacc.c  */
     6045#line 826 "parser.yy"
     6046    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     6047    break;
     6048
     6049  case 200:
     6050
     6051/* Line 1806 of yacc.c  */
    60486052#line 831 "parser.yy"
    6049     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    6050     break;
    6051 
    6052   case 200:
    6053 
    6054 /* Line 1806 of yacc.c  */
    6055 #line 836 "parser.yy"
    60566053    {
    60576054                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    60636060
    60646061/* Line 1806 of yacc.c  */
    6065 #line 850 "parser.yy"
     6062#line 845 "parser.yy"
    60666063    {
    60676064                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    60736070
    60746071/* Line 1806 of yacc.c  */
    6075 #line 855 "parser.yy"
     6072#line 850 "parser.yy"
    60766073    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    60776074    break;
     
    60806077
    60816078/* Line 1806 of yacc.c  */
    6082 #line 857 "parser.yy"
     6079#line 852 "parser.yy"
    60836080    {
    60846081                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    60906087
    60916088/* Line 1806 of yacc.c  */
    6092 #line 866 "parser.yy"
     6089#line 861 "parser.yy"
    60936090    { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
    60946091    break;
     
    60976094
    60986095/* Line 1806 of yacc.c  */
    6099 #line 868 "parser.yy"
     6096#line 863 "parser.yy"
    61006097    { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
    61016098    break;
     
    61046101
    61056102/* Line 1806 of yacc.c  */
    6106 #line 870 "parser.yy"
     6103#line 865 "parser.yy"
    61076104    { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
    61086105    break;
     
    61116108
    61126109/* Line 1806 of yacc.c  */
    6113 #line 872 "parser.yy"
     6110#line 867 "parser.yy"
    61146111    { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
    61156112    break;
     
    61186115
    61196116/* Line 1806 of yacc.c  */
    6120 #line 886 "parser.yy"
     6117#line 881 "parser.yy"
    61216118    {}
    61226119    break;
     
    61256122
    61266123/* Line 1806 of yacc.c  */
    6127 #line 890 "parser.yy"
     6124#line 885 "parser.yy"
    61286125    {}
    61296126    break;
     
    61326129
    61336130/* Line 1806 of yacc.c  */
    6134 #line 898 "parser.yy"
     6131#line 893 "parser.yy"
    61356132    { (yyval.decl) = 0; }
    61366133    break;
     
    61396136
    61406137/* Line 1806 of yacc.c  */
     6138#line 900 "parser.yy"
     6139    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     6140    break;
     6141
     6142  case 221:
     6143
     6144/* Line 1806 of yacc.c  */
    61416145#line 905 "parser.yy"
     6146    { (yyval.decl) = 0; }
     6147    break;
     6148
     6149  case 224:
     6150
     6151/* Line 1806 of yacc.c  */
     6152#line 912 "parser.yy"
    61426153    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    61436154    break;
    61446155
    6145   case 221:
    6146 
    6147 /* Line 1806 of yacc.c  */
    6148 #line 910 "parser.yy"
    6149     { (yyval.decl) = 0; }
    6150     break;
    6151 
    6152   case 224:
    6153 
    6154 /* Line 1806 of yacc.c  */
    6155 #line 917 "parser.yy"
    6156     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    6157     break;
    6158 
    61596156  case 229:
    61606157
    61616158/* Line 1806 of yacc.c  */
    6162 #line 931 "parser.yy"
     6159#line 926 "parser.yy"
    61636160    {}
    61646161    break;
     
    61676164
    61686165/* Line 1806 of yacc.c  */
    6169 #line 932 "parser.yy"
     6166#line 927 "parser.yy"
    61706167    {}
    61716168    break;
     
    61746171
    61756172/* Line 1806 of yacc.c  */
    6176 #line 961 "parser.yy"
     6173#line 956 "parser.yy"
    61776174    {
    61786175                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61846181
    61856182/* Line 1806 of yacc.c  */
    6186 #line 968 "parser.yy"
     6183#line 963 "parser.yy"
    61876184    {
    61886185                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61946191
    61956192/* Line 1806 of yacc.c  */
    6196 #line 973 "parser.yy"
     6193#line 968 "parser.yy"
    61976194    {
    61986195                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    62026199
    62036200  case 241:
     6201
     6202/* Line 1806 of yacc.c  */
     6203#line 978 "parser.yy"
     6204    {
     6205                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     6206                        (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
     6207                }
     6208    break;
     6209
     6210  case 242:
    62046211
    62056212/* Line 1806 of yacc.c  */
     
    62116218    break;
    62126219
    6213   case 242:
     6220  case 243:
    62146221
    62156222/* Line 1806 of yacc.c  */
    62166223#line 988 "parser.yy"
    6217     {
    6218                         typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
    6219                         (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
    6220                 }
    6221     break;
    6222 
    6223   case 243:
    6224 
    6225 /* Line 1806 of yacc.c  */
    6226 #line 993 "parser.yy"
    62276224    {
    62286225                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    62346231
    62356232/* Line 1806 of yacc.c  */
    6236 #line 1001 "parser.yy"
     6233#line 996 "parser.yy"
    62376234    {
    62386235                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62426239
    62436240  case 245:
     6241
     6242/* Line 1806 of yacc.c  */
     6243#line 1001 "parser.yy"
     6244    {
     6245                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     6246                        (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );
     6247                }
     6248    break;
     6249
     6250  case 246:
    62446251
    62456252/* Line 1806 of yacc.c  */
     
    62516258    break;
    62526259
    6253   case 246:
     6260  case 247:
    62546261
    62556262/* Line 1806 of yacc.c  */
    62566263#line 1011 "parser.yy"
    6257     {
    6258                         typedefTable.addToEnclosingScope( TypedefTable::ID );
    6259                         (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );
    6260                 }
    6261     break;
    6262 
    6263   case 247:
    6264 
    6265 /* Line 1806 of yacc.c  */
    6266 #line 1016 "parser.yy"
    62676264    {
    62686265                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62746271
    62756272/* Line 1806 of yacc.c  */
    6276 #line 1021 "parser.yy"
     6273#line 1016 "parser.yy"
    62776274    {
    62786275                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    62846281
    62856282/* Line 1806 of yacc.c  */
    6286 #line 1029 "parser.yy"
     6283#line 1024 "parser.yy"
    62876284    {
    62886285                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    62936290
    62946291/* Line 1806 of yacc.c  */
    6295 #line 1052 "parser.yy"
     6292#line 1047 "parser.yy"
    62966293    {
    62976294                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    63026299
    63036300/* Line 1806 of yacc.c  */
    6304 #line 1056 "parser.yy"
     6301#line 1051 "parser.yy"
    63056302    {
    63066303                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    63116308
    63126309/* Line 1806 of yacc.c  */
    6313 #line 1063 "parser.yy"
     6310#line 1058 "parser.yy"
    63146311    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    63156312    break;
     
    63186315
    63196316/* Line 1806 of yacc.c  */
     6317#line 1062 "parser.yy"
     6318    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     6319    break;
     6320
     6321  case 254:
     6322
     6323/* Line 1806 of yacc.c  */
    63206324#line 1067 "parser.yy"
    6321     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    6322     break;
    6323 
    6324   case 254:
     6325    {
     6326                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     6327                        (yyval.decl) = (yyvsp[(2) - (2)].decl)->addTypedef();
     6328                }
     6329    break;
     6330
     6331  case 255:
    63256332
    63266333/* Line 1806 of yacc.c  */
     
    63326339    break;
    63336340
    6334   case 255:
     6341  case 256:
    63356342
    63366343/* Line 1806 of yacc.c  */
    63376344#line 1077 "parser.yy"
    6338     {
    6339                         typedefTable.addToEnclosingScope( TypedefTable::TD );
    6340                         (yyval.decl) = (yyvsp[(2) - (2)].decl)->addTypedef();
    6341                 }
    6342     break;
    6343 
    6344   case 256:
    6345 
    6346 /* Line 1806 of yacc.c  */
    6347 #line 1082 "parser.yy"
    63486345    {
    63496346                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    63556352
    63566353/* Line 1806 of yacc.c  */
    6357 #line 1093 "parser.yy"
     6354#line 1088 "parser.yy"
    63586355    {
    63596356                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    63656362
    63666363/* Line 1806 of yacc.c  */
    6367 #line 1098 "parser.yy"
     6364#line 1093 "parser.yy"
    63686365    {
    63696366                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    63756372
    63766373/* Line 1806 of yacc.c  */
    6377 #line 1103 "parser.yy"
     6374#line 1098 "parser.yy"
    63786375    {
    63796376                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    63856382
    63866383/* Line 1806 of yacc.c  */
    6387 #line 1108 "parser.yy"
     6384#line 1103 "parser.yy"
    63886385    {
    63896386                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    63956392
    63966393/* Line 1806 of yacc.c  */
    6397 #line 1113 "parser.yy"
     6394#line 1108 "parser.yy"
    63986395    {
    63996396                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64056402
    64066403/* Line 1806 of yacc.c  */
    6407 #line 1122 "parser.yy"
     6404#line 1117 "parser.yy"
    64086405    {
    64096406                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    64156412
    64166413/* Line 1806 of yacc.c  */
    6417 #line 1127 "parser.yy"
     6414#line 1122 "parser.yy"
    64186415    {
    64196416                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    64256422
    64266423/* Line 1806 of yacc.c  */
    6427 #line 1144 "parser.yy"
     6424#line 1139 "parser.yy"
    64286425    {
    64296426                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64356432
    64366433/* Line 1806 of yacc.c  */
    6437 #line 1149 "parser.yy"
     6434#line 1144 "parser.yy"
    64386435    {
    64396436                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64456442
    64466443/* Line 1806 of yacc.c  */
    6447 #line 1171 "parser.yy"
     6444#line 1166 "parser.yy"
    64486445    { (yyval.decl) = 0; }
    64496446    break;
     
    64526449
    64536450/* Line 1806 of yacc.c  */
    6454 #line 1183 "parser.yy"
     6451#line 1178 "parser.yy"
    64556452    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    64566453    break;
    64576454
     6455  case 283:
     6456
     6457/* Line 1806 of yacc.c  */
     6458#line 1184 "parser.yy"
     6459    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
     6460    break;
     6461
    64586462  case 284:
    64596463
    64606464/* Line 1806 of yacc.c  */
    6461 #line 1194 "parser.yy"
     6465#line 1189 "parser.yy"
    64626466    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    64636467    break;
     
    64666470
    64676471/* Line 1806 of yacc.c  */
    6468 #line 1196 "parser.yy"
     6472#line 1191 "parser.yy"
    64696473    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    64706474    break;
     
    64736477
    64746478/* Line 1806 of yacc.c  */
    6475 #line 1198 "parser.yy"
     6479#line 1193 "parser.yy"
    64766480    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    64776481    break;
     
    64806484
    64816485/* Line 1806 of yacc.c  */
    6482 #line 1200 "parser.yy"
     6486#line 1195 "parser.yy"
    64836487    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    64846488    break;
     
    64876491
    64886492/* Line 1806 of yacc.c  */
    6489 #line 1202 "parser.yy"
     6493#line 1197 "parser.yy"
    64906494    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    64916495    break;
     
    64946498
    64956499/* Line 1806 of yacc.c  */
    6496 #line 1204 "parser.yy"
     6500#line 1199 "parser.yy"
    64976501    {
    64986502                        typedefTable.enterScope();
     
    65036507
    65046508/* Line 1806 of yacc.c  */
    6505 #line 1208 "parser.yy"
     6509#line 1203 "parser.yy"
    65066510    {
    65076511                        typedefTable.leaveScope();
     
    65136517
    65146518/* Line 1806 of yacc.c  */
    6515 #line 1217 "parser.yy"
     6519#line 1212 "parser.yy"
    65166520    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    65176521    break;
     
    65206524
    65216525/* Line 1806 of yacc.c  */
    6522 #line 1219 "parser.yy"
     6526#line 1214 "parser.yy"
    65236527    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    65246528    break;
     
    65276531
    65286532/* Line 1806 of yacc.c  */
    6529 #line 1230 "parser.yy"
     6533#line 1225 "parser.yy"
    65306534    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    65316535    break;
     
    65346538
    65356539/* Line 1806 of yacc.c  */
    6536 #line 1239 "parser.yy"
     6540#line 1234 "parser.yy"
    65376541    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    65386542    break;
     
    65416545
    65426546/* Line 1806 of yacc.c  */
    6543 #line 1241 "parser.yy"
     6547#line 1236 "parser.yy"
    65446548    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    65456549    break;
     
    65486552
    65496553/* Line 1806 of yacc.c  */
    6550 #line 1243 "parser.yy"
     6554#line 1238 "parser.yy"
    65516555    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    65526556    break;
     
    65556559
    65566560/* Line 1806 of yacc.c  */
    6557 #line 1245 "parser.yy"
     6561#line 1240 "parser.yy"
    65586562    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    65596563    break;
     
    65626566
    65636567/* Line 1806 of yacc.c  */
    6564 #line 1247 "parser.yy"
     6568#line 1242 "parser.yy"
    65656569    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    65666570    break;
     
    65696573
    65706574/* Line 1806 of yacc.c  */
    6571 #line 1249 "parser.yy"
     6575#line 1244 "parser.yy"
    65726576    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    65736577    break;
     
    65766580
    65776581/* Line 1806 of yacc.c  */
    6578 #line 1251 "parser.yy"
     6582#line 1246 "parser.yy"
    65796583    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    65806584    break;
     
    65836587
    65846588/* Line 1806 of yacc.c  */
     6589#line 1248 "parser.yy"
     6590    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     6591    break;
     6592
     6593  case 305:
     6594
     6595/* Line 1806 of yacc.c  */
    65856596#line 1253 "parser.yy"
    6586     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    6587     break;
    6588 
    6589   case 305:
    6590 
    6591 /* Line 1806 of yacc.c  */
    6592 #line 1258 "parser.yy"
    65936597    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    65946598    break;
     
    65976601
    65986602/* Line 1806 of yacc.c  */
    6599 #line 1260 "parser.yy"
     6603#line 1255 "parser.yy"
    66006604    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    66016605    break;
     
    66046608
    66056609/* Line 1806 of yacc.c  */
    6606 #line 1262 "parser.yy"
     6610#line 1257 "parser.yy"
    66076611    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    66086612    break;
     
    66116615
    66126616/* Line 1806 of yacc.c  */
    6613 #line 1264 "parser.yy"
     6617#line 1259 "parser.yy"
    66146618    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    66156619    break;
     
    66186622
    66196623/* Line 1806 of yacc.c  */
    6620 #line 1266 "parser.yy"
     6624#line 1261 "parser.yy"
    66216625    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    66226626    break;
     
    66256629
    66266630/* Line 1806 of yacc.c  */
    6627 #line 1268 "parser.yy"
     6631#line 1263 "parser.yy"
    66286632    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    66296633    break;
     
    66326636
    66336637/* Line 1806 of yacc.c  */
    6634 #line 1270 "parser.yy"
     6638#line 1265 "parser.yy"
    66356639    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    66366640    break;
     
    66396643
    66406644/* Line 1806 of yacc.c  */
    6641 #line 1272 "parser.yy"
     6645#line 1267 "parser.yy"
    66426646    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    66436647    break;
     
    66466650
    66476651/* Line 1806 of yacc.c  */
    6648 #line 1274 "parser.yy"
     6652#line 1269 "parser.yy"
    66496653    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    66506654    break;
     
    66536657
    66546658/* Line 1806 of yacc.c  */
    6655 #line 1276 "parser.yy"
     6659#line 1271 "parser.yy"
    66566660    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    66576661    break;
     
    66606664
    66616665/* Line 1806 of yacc.c  */
    6662 #line 1278 "parser.yy"
     6666#line 1273 "parser.yy"
    66636667    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    66646668    break;
     
    66676671
    66686672/* Line 1806 of yacc.c  */
    6669 #line 1280 "parser.yy"
     6673#line 1275 "parser.yy"
    66706674    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    66716675    break;
     
    66746678
    66756679/* Line 1806 of yacc.c  */
    6676 #line 1287 "parser.yy"
     6680#line 1282 "parser.yy"
    66776681    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    66786682    break;
     
    66816685
    66826686/* Line 1806 of yacc.c  */
    6683 #line 1289 "parser.yy"
     6687#line 1284 "parser.yy"
    66846688    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66856689    break;
     
    66886692
    66896693/* Line 1806 of yacc.c  */
    6690 #line 1291 "parser.yy"
     6694#line 1286 "parser.yy"
    66916695    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    66926696    break;
     
    66956699
    66966700/* Line 1806 of yacc.c  */
    6697 #line 1293 "parser.yy"
     6701#line 1288 "parser.yy"
    66986702    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    66996703    break;
     
    67026706
    67036707/* Line 1806 of yacc.c  */
    6704 #line 1299 "parser.yy"
     6708#line 1294 "parser.yy"
    67056709    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    67066710    break;
     
    67096713
    67106714/* Line 1806 of yacc.c  */
    6711 #line 1306 "parser.yy"
     6715#line 1301 "parser.yy"
    67126716    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    67136717    break;
     
    67166720
    67176721/* Line 1806 of yacc.c  */
    6718 #line 1308 "parser.yy"
     6722#line 1303 "parser.yy"
    67196723    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67206724    break;
     
    67236727
    67246728/* Line 1806 of yacc.c  */
     6729#line 1305 "parser.yy"
     6730    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     6731    break;
     6732
     6733  case 328:
     6734
     6735/* Line 1806 of yacc.c  */
    67256736#line 1310 "parser.yy"
    6726     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    6727     break;
    6728 
    6729   case 328:
    6730 
    6731 /* Line 1806 of yacc.c  */
    6732 #line 1315 "parser.yy"
    67336737    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    67346738    break;
     
    67376741
    67386742/* Line 1806 of yacc.c  */
    6739 #line 1317 "parser.yy"
     6743#line 1312 "parser.yy"
    67406744    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    67416745    break;
     
    67446748
    67456749/* Line 1806 of yacc.c  */
    6746 #line 1319 "parser.yy"
     6750#line 1314 "parser.yy"
    67476751    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    67486752    break;
     
    67516755
    67526756/* Line 1806 of yacc.c  */
    6753 #line 1321 "parser.yy"
     6757#line 1316 "parser.yy"
    67546758    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    67556759    break;
     
    67586762
    67596763/* Line 1806 of yacc.c  */
    6760 #line 1327 "parser.yy"
     6764#line 1322 "parser.yy"
    67616765    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    67626766    break;
     
    67656769
    67666770/* Line 1806 of yacc.c  */
    6767 #line 1329 "parser.yy"
     6771#line 1324 "parser.yy"
    67686772    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67696773    break;
     
    67726776
    67736777/* Line 1806 of yacc.c  */
    6774 #line 1331 "parser.yy"
     6778#line 1326 "parser.yy"
    67756779    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    67766780    break;
     
    67796783
    67806784/* Line 1806 of yacc.c  */
    6781 #line 1337 "parser.yy"
     6785#line 1332 "parser.yy"
    67826786    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    67836787    break;
     
    67866790
    67876791/* Line 1806 of yacc.c  */
    6788 #line 1339 "parser.yy"
     6792#line 1334 "parser.yy"
    67896793    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67906794    break;
     
    67936797
    67946798/* Line 1806 of yacc.c  */
    6795 #line 1345 "parser.yy"
     6799#line 1340 "parser.yy"
    67966800    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    67976801    break;
     
    68006804
    68016805/* Line 1806 of yacc.c  */
    6802 #line 1347 "parser.yy"
     6806#line 1342 "parser.yy"
    68036807    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68046808    break;
     
    68076811
    68086812/* Line 1806 of yacc.c  */
     6813#line 1344 "parser.yy"
     6814    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     6815    break;
     6816
     6817  case 343:
     6818
     6819/* Line 1806 of yacc.c  */
    68096820#line 1349 "parser.yy"
    6810     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    6811     break;
    6812 
    6813   case 343:
    6814 
    6815 /* Line 1806 of yacc.c  */
    6816 #line 1354 "parser.yy"
    68176821    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    68186822    break;
     
    68216825
    68226826/* Line 1806 of yacc.c  */
    6823 #line 1356 "parser.yy"
     6827#line 1351 "parser.yy"
    68246828    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68256829    break;
     
    68286832
    68296833/* Line 1806 of yacc.c  */
    6830 #line 1358 "parser.yy"
     6834#line 1353 "parser.yy"
    68316835    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68326836    break;
     
    68356839
    68366840/* Line 1806 of yacc.c  */
    6837 #line 1368 "parser.yy"
     6841#line 1363 "parser.yy"
    68386842    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    68396843    break;
     
    68426846
    68436847/* Line 1806 of yacc.c  */
    6844 #line 1370 "parser.yy"
     6848#line 1365 "parser.yy"
    68456849    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
    68466850    break;
     
    68496853
    68506854/* Line 1806 of yacc.c  */
    6851 #line 1372 "parser.yy"
     6855#line 1367 "parser.yy"
    68526856    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
    68536857    break;
     
    68566860
    68576861/* Line 1806 of yacc.c  */
    6858 #line 1374 "parser.yy"
     6862#line 1369 "parser.yy"
    68596863    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    68606864    break;
     
    68636867
    68646868/* Line 1806 of yacc.c  */
     6869#line 1371 "parser.yy"
     6870    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     6871    break;
     6872
     6873  case 353:
     6874
     6875/* Line 1806 of yacc.c  */
    68656876#line 1376 "parser.yy"
    6866     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    6867     break;
    6868 
    6869   case 353:
    6870 
    6871 /* Line 1806 of yacc.c  */
    6872 #line 1381 "parser.yy"
    68736877    { (yyval.aggKey) = DeclarationNode::Struct; }
    68746878    break;
     
    68776881
    68786882/* Line 1806 of yacc.c  */
     6883#line 1378 "parser.yy"
     6884    { (yyval.aggKey) = DeclarationNode::Union; }
     6885    break;
     6886
     6887  case 355:
     6888
     6889/* Line 1806 of yacc.c  */
    68796890#line 1383 "parser.yy"
    6880     { (yyval.aggKey) = DeclarationNode::Union; }
    6881     break;
    6882 
    6883   case 355:
    6884 
    6885 /* Line 1806 of yacc.c  */
    6886 #line 1388 "parser.yy"
    68876891    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    68886892    break;
     
    68916895
    68926896/* Line 1806 of yacc.c  */
    6893 #line 1390 "parser.yy"
     6897#line 1385 "parser.yy"
    68946898    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    68956899    break;
     
    68986902
    68996903/* Line 1806 of yacc.c  */
    6900 #line 1396 "parser.yy"
     6904#line 1391 "parser.yy"
    69016905    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    69026906    break;
     
    69056909
    69066910/* Line 1806 of yacc.c  */
    6907 #line 1399 "parser.yy"
     6911#line 1394 "parser.yy"
    69086912    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    69096913    break;
     
    69126916
    69136917/* Line 1806 of yacc.c  */
    6914 #line 1405 "parser.yy"
     6918#line 1400 "parser.yy"
    69156919    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    69166920    break;
     
    69196923
    69206924/* Line 1806 of yacc.c  */
    6921 #line 1407 "parser.yy"
     6925#line 1402 "parser.yy"
    69226926    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    69236927    break;
     
    69266930
    69276931/* Line 1806 of yacc.c  */
     6932#line 1404 "parser.yy"
     6933    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     6934    break;
     6935
     6936  case 365:
     6937
     6938/* Line 1806 of yacc.c  */
    69286939#line 1409 "parser.yy"
    6929     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    6930     break;
    6931 
    6932   case 365:
    6933 
    6934 /* Line 1806 of yacc.c  */
    6935 #line 1414 "parser.yy"
    69366940    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    69376941    break;
     
    69406944
    69416945/* Line 1806 of yacc.c  */
     6946#line 1411 "parser.yy"
     6947    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     6948    break;
     6949
     6950  case 367:
     6951
     6952/* Line 1806 of yacc.c  */
    69426953#line 1416 "parser.yy"
    6943     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    6944     break;
    6945 
    6946   case 367:
     6954    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     6955    break;
     6956
     6957  case 368:
     6958
     6959/* Line 1806 of yacc.c  */
     6960#line 1418 "parser.yy"
     6961    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     6962    break;
     6963
     6964  case 369:
    69476965
    69486966/* Line 1806 of yacc.c  */
    69496967#line 1421 "parser.yy"
    6950     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    6951     break;
    6952 
    6953   case 368:
    6954 
    6955 /* Line 1806 of yacc.c  */
    6956 #line 1423 "parser.yy"
    6957     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    6958     break;
    6959 
    6960   case 369:
    6961 
    6962 /* Line 1806 of yacc.c  */
    6963 #line 1426 "parser.yy"
    69646968    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    69656969    break;
     
    69686972
    69696973/* Line 1806 of yacc.c  */
    6970 #line 1429 "parser.yy"
     6974#line 1424 "parser.yy"
    69716975    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    69726976    break;
     
    69756979
    69766980/* Line 1806 of yacc.c  */
    6977 #line 1435 "parser.yy"
     6981#line 1430 "parser.yy"
    69786982    { (yyval.en) = 0; }
    69796983    break;
     
    69826986
    69836987/* Line 1806 of yacc.c  */
     6988#line 1432 "parser.yy"
     6989    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     6990    break;
     6991
     6992  case 374:
     6993
     6994/* Line 1806 of yacc.c  */
    69846995#line 1437 "parser.yy"
    6985     { (yyval.en) = (yyvsp[(1) - (1)].en); }
    6986     break;
    6987 
    6988   case 374:
    6989 
    6990 /* Line 1806 of yacc.c  */
    6991 #line 1442 "parser.yy"
    69926996    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    69936997    break;
     
    69967000
    69977001/* Line 1806 of yacc.c  */
    6998 #line 1451 "parser.yy"
     7002#line 1446 "parser.yy"
    69997003    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    70007004    break;
     
    70037007
    70047008/* Line 1806 of yacc.c  */
    7005 #line 1453 "parser.yy"
     7009#line 1448 "parser.yy"
    70067010    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
    70077011    break;
     
    70107014
    70117015/* Line 1806 of yacc.c  */
     7016#line 1450 "parser.yy"
     7017    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
     7018    break;
     7019
     7020  case 379:
     7021
     7022/* Line 1806 of yacc.c  */
    70127023#line 1455 "parser.yy"
    7013     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
    7014     break;
    7015 
    7016   case 379:
    7017 
    7018 /* Line 1806 of yacc.c  */
    7019 #line 1460 "parser.yy"
    70207024    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    70217025    break;
     
    70247028
    70257029/* Line 1806 of yacc.c  */
     7030#line 1457 "parser.yy"
     7031    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     7032    break;
     7033
     7034  case 381:
     7035
     7036/* Line 1806 of yacc.c  */
    70267037#line 1462 "parser.yy"
    7027     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    7028     break;
    7029 
    7030   case 381:
    7031 
    7032 /* Line 1806 of yacc.c  */
    7033 #line 1467 "parser.yy"
    70347038    { (yyval.en) = 0; }
    70357039    break;
     
    70387042
    70397043/* Line 1806 of yacc.c  */
    7040 #line 1469 "parser.yy"
     7044#line 1464 "parser.yy"
    70417045    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    70427046    break;
     
    70457049
    70467050/* Line 1806 of yacc.c  */
    7047 #line 1476 "parser.yy"
     7051#line 1471 "parser.yy"
    70487052    { (yyval.decl) = 0; }
    70497053    break;
     
    70527056
    70537057/* Line 1806 of yacc.c  */
    7054 #line 1484 "parser.yy"
     7058#line 1479 "parser.yy"
    70557059    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    70567060    break;
     
    70597063
    70607064/* Line 1806 of yacc.c  */
    7061 #line 1486 "parser.yy"
     7065#line 1481 "parser.yy"
    70627066    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    70637067    break;
     
    70667070
    70677071/* Line 1806 of yacc.c  */
    7068 #line 1488 "parser.yy"
     7072#line 1483 "parser.yy"
    70697073    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    70707074    break;
     
    70737077
    70747078/* Line 1806 of yacc.c  */
    7075 #line 1496 "parser.yy"
     7079#line 1491 "parser.yy"
    70767080    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    70777081    break;
     
    70807084
    70817085/* Line 1806 of yacc.c  */
    7082 #line 1498 "parser.yy"
     7086#line 1493 "parser.yy"
    70837087    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    70847088    break;
     
    70877091
    70887092/* Line 1806 of yacc.c  */
    7089 #line 1500 "parser.yy"
     7093#line 1495 "parser.yy"
    70907094    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    70917095    break;
     
    70947098
    70957099/* Line 1806 of yacc.c  */
     7100#line 1501 "parser.yy"
     7101    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7102    break;
     7103
     7104  case 396:
     7105
     7106/* Line 1806 of yacc.c  */
    70967107#line 1506 "parser.yy"
     7108    { (yyval.decl) = 0; }
     7109    break;
     7110
     7111  case 399:
     7112
     7113/* Line 1806 of yacc.c  */
     7114#line 1513 "parser.yy"
     7115    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7116    break;
     7117
     7118  case 402:
     7119
     7120/* Line 1806 of yacc.c  */
     7121#line 1520 "parser.yy"
    70977122    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    70987123    break;
    70997124
    7100   case 396:
    7101 
    7102 /* Line 1806 of yacc.c  */
    7103 #line 1511 "parser.yy"
    7104     { (yyval.decl) = 0; }
    7105     break;
    7106 
    7107   case 399:
    7108 
    7109 /* Line 1806 of yacc.c  */
    7110 #line 1518 "parser.yy"
    7111     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7112     break;
    7113 
    7114   case 402:
    7115 
    7116 /* Line 1806 of yacc.c  */
    7117 #line 1525 "parser.yy"
     7125  case 403:
     7126
     7127/* Line 1806 of yacc.c  */
     7128#line 1522 "parser.yy"
    71187129    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71197130    break;
    71207131
    7121   case 403:
    7122 
    7123 /* Line 1806 of yacc.c  */
    7124 #line 1527 "parser.yy"
    7125     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7126     break;
    7127 
    71287132  case 405:
    71297133
    71307134/* Line 1806 of yacc.c  */
     7135#line 1531 "parser.yy"
     7136    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     7137    break;
     7138
     7139  case 406:
     7140
     7141/* Line 1806 of yacc.c  */
     7142#line 1534 "parser.yy"
     7143    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     7144    break;
     7145
     7146  case 407:
     7147
     7148/* Line 1806 of yacc.c  */
    71317149#line 1536 "parser.yy"
    7132     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7133     break;
    7134 
    7135   case 406:
    7136 
    7137 /* Line 1806 of yacc.c  */
    7138 #line 1539 "parser.yy"
    7139     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7140     break;
    7141 
    7142   case 407:
    7143 
    7144 /* Line 1806 of yacc.c  */
    7145 #line 1541 "parser.yy"
    71467150    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    71477151    break;
     
    71507154
    71517155/* Line 1806 of yacc.c  */
    7152 #line 1551 "parser.yy"
     7156#line 1546 "parser.yy"
    71537157    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71547158    break;
    71557159
    71567160  case 414:
     7161
     7162/* Line 1806 of yacc.c  */
     7163#line 1552 "parser.yy"
     7164    {
     7165                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     7166                        (yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
     7167                }
     7168    break;
     7169
     7170  case 415:
    71577171
    71587172/* Line 1806 of yacc.c  */
     
    71647178    break;
    71657179
    7166   case 415:
    7167 
    7168 /* Line 1806 of yacc.c  */
    7169 #line 1562 "parser.yy"
    7170     {
    7171                         typedefTable.addToEnclosingScope( TypedefTable::ID );
    7172                         (yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
    7173                 }
    7174     break;
    7175 
    71767180  case 417:
    71777181
    71787182/* Line 1806 of yacc.c  */
    7179 #line 1571 "parser.yy"
     7183#line 1566 "parser.yy"
    71807184    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    71817185    break;
     
    71847188
    71857189/* Line 1806 of yacc.c  */
    7186 #line 1580 "parser.yy"
     7190#line 1575 "parser.yy"
    71877191    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    71887192    break;
     
    71917195
    71927196/* Line 1806 of yacc.c  */
    7193 #line 1582 "parser.yy"
     7197#line 1577 "parser.yy"
    71947198    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    71957199    break;
     
    71987202
    71997203/* Line 1806 of yacc.c  */
    7200 #line 1607 "parser.yy"
     7204#line 1602 "parser.yy"
    72017205    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    72027206    break;
     
    72057209
    72067210/* Line 1806 of yacc.c  */
     7211#line 1610 "parser.yy"
     7212    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7213    break;
     7214
     7215  case 436:
     7216
     7217/* Line 1806 of yacc.c  */
    72077218#line 1615 "parser.yy"
    7208     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    7209     break;
    7210 
    7211   case 436:
    7212 
    7213 /* Line 1806 of yacc.c  */
    7214 #line 1620 "parser.yy"
    72157219    { (yyval.in) = 0; }
    72167220    break;
     
    72197223
    72207224/* Line 1806 of yacc.c  */
     7225#line 1617 "parser.yy"
     7226    { (yyval.in) = (yyvsp[(2) - (2)].in); }
     7227    break;
     7228
     7229  case 438:
     7230
     7231/* Line 1806 of yacc.c  */
     7232#line 1621 "parser.yy"
     7233    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     7234    break;
     7235
     7236  case 439:
     7237
     7238/* Line 1806 of yacc.c  */
    72217239#line 1622 "parser.yy"
    7222     { (yyval.in) = (yyvsp[(2) - (2)].in); }
    7223     break;
    7224 
    7225   case 438:
    7226 
    7227 /* Line 1806 of yacc.c  */
    7228 #line 1626 "parser.yy"
    7229     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    7230     break;
    7231 
    7232   case 439:
     7240    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     7241    break;
     7242
     7243  case 441:
    72337244
    72347245/* Line 1806 of yacc.c  */
    72357246#line 1627 "parser.yy"
    7236     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    7237     break;
    7238 
    7239   case 441:
    7240 
    7241 /* Line 1806 of yacc.c  */
    7242 #line 1632 "parser.yy"
    72437247    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    72447248    break;
     
    72477251
    72487252/* Line 1806 of yacc.c  */
    7249 #line 1633 "parser.yy"
     7253#line 1628 "parser.yy"
    72507254    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    72517255    break;
     
    72547258
    72557259/* Line 1806 of yacc.c  */
    7256 #line 1635 "parser.yy"
     7260#line 1630 "parser.yy"
    72577261    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    72587262    break;
     
    72617265
    72627266/* Line 1806 of yacc.c  */
    7263 #line 1651 "parser.yy"
     7267#line 1646 "parser.yy"
    72647268    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    72657269    break;
     
    72687272
    72697273/* Line 1806 of yacc.c  */
    7270 #line 1657 "parser.yy"
     7274#line 1652 "parser.yy"
    72717275    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    72727276    break;
     
    72757279
    72767280/* Line 1806 of yacc.c  */
     7281#line 1658 "parser.yy"
     7282    { (yyval.en) = new VarRefNode( (yyvsp[(2) - (2)].tok) ); }
     7283    break;
     7284
     7285  case 449:
     7286
     7287/* Line 1806 of yacc.c  */
     7288#line 1661 "parser.yy"
     7289    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     7290    break;
     7291
     7292  case 450:
     7293
     7294/* Line 1806 of yacc.c  */
    72777295#line 1663 "parser.yy"
    7278     { (yyval.en) = new VarRefNode( (yyvsp[(2) - (2)].tok) ); }
    7279     break;
    7280 
    7281   case 449:
    7282 
    7283 /* Line 1806 of yacc.c  */
    7284 #line 1666 "parser.yy"
    72857296    { (yyval.en) = (yyvsp[(3) - (5)].en); }
    72867297    break;
    72877298
    7288   case 450:
    7289 
    7290 /* Line 1806 of yacc.c  */
    7291 #line 1668 "parser.yy"
    7292     { (yyval.en) = (yyvsp[(3) - (5)].en); }
    7293     break;
    7294 
    72957299  case 451:
    72967300
    72977301/* Line 1806 of yacc.c  */
    7298 #line 1670 "parser.yy"
     7302#line 1665 "parser.yy"
    72997303    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ); }
    73007304    break;
     
    73037307
    73047308/* Line 1806 of yacc.c  */
    7305 #line 1672 "parser.yy"
     7309#line 1667 "parser.yy"
    73067310    { (yyval.en) = (yyvsp[(4) - (6)].en); }
    73077311    break;
     
    73107314
    73117315/* Line 1806 of yacc.c  */
    7312 #line 1696 "parser.yy"
     7316#line 1691 "parser.yy"
    73137317    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73147318    break;
     
    73177321
    73187322/* Line 1806 of yacc.c  */
    7319 #line 1698 "parser.yy"
     7323#line 1693 "parser.yy"
    73207324    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    73217325    break;
     
    73247328
    73257329/* Line 1806 of yacc.c  */
    7326 #line 1700 "parser.yy"
     7330#line 1695 "parser.yy"
    73277331    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    73287332    break;
     
    73317335
    73327336/* Line 1806 of yacc.c  */
    7333 #line 1706 "parser.yy"
     7337#line 1701 "parser.yy"
    73347338    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73357339    break;
     
    73387342
    73397343/* Line 1806 of yacc.c  */
     7344#line 1703 "parser.yy"
     7345    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7346    break;
     7347
     7348  case 460:
     7349
     7350/* Line 1806 of yacc.c  */
    73407351#line 1708 "parser.yy"
    7341     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7342     break;
    7343 
    7344   case 460:
    7345 
    7346 /* Line 1806 of yacc.c  */
    7347 #line 1713 "parser.yy"
    73487352    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    73497353    break;
     
    73527356
    73537357/* Line 1806 of yacc.c  */
     7358#line 1714 "parser.yy"
     7359    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     7360    break;
     7361
     7362  case 463:
     7363
     7364/* Line 1806 of yacc.c  */
    73547365#line 1719 "parser.yy"
    7355     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    7356     break;
    7357 
    7358   case 463:
    7359 
    7360 /* Line 1806 of yacc.c  */
    7361 #line 1724 "parser.yy"
    73627366    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    73637367    break;
     
    73667370
    73677371/* Line 1806 of yacc.c  */
    7368 #line 1726 "parser.yy"
     7372#line 1721 "parser.yy"
    73697373    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    73707374    break;
     
    73737377
    73747378/* Line 1806 of yacc.c  */
    7375 #line 1732 "parser.yy"
     7379#line 1727 "parser.yy"
    73767380    { (yyval.tclass) = DeclarationNode::Type; }
    73777381    break;
     
    73807384
    73817385/* Line 1806 of yacc.c  */
    7382 #line 1734 "parser.yy"
     7386#line 1729 "parser.yy"
    73837387    { (yyval.tclass) = DeclarationNode::Ftype; }
    73847388    break;
     
    73877391
    73887392/* Line 1806 of yacc.c  */
     7393#line 1731 "parser.yy"
     7394    { (yyval.tclass) = DeclarationNode::Dtype; }
     7395    break;
     7396
     7397  case 469:
     7398
     7399/* Line 1806 of yacc.c  */
    73897400#line 1736 "parser.yy"
    7390     { (yyval.tclass) = DeclarationNode::Dtype; }
    7391     break;
    7392 
    7393   case 469:
    7394 
    7395 /* Line 1806 of yacc.c  */
    7396 #line 1741 "parser.yy"
    73977401    { (yyval.decl) = 0; }
    73987402    break;
     
    74017405
    74027406/* Line 1806 of yacc.c  */
     7407#line 1738 "parser.yy"
     7408    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     7409    break;
     7410
     7411  case 471:
     7412
     7413/* Line 1806 of yacc.c  */
    74037414#line 1743 "parser.yy"
    7404     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    7405     break;
    7406 
    7407   case 471:
    7408 
    7409 /* Line 1806 of yacc.c  */
    7410 #line 1748 "parser.yy"
    74117415    {
    74127416                        typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
     
    74187422
    74197423/* Line 1806 of yacc.c  */
    7420 #line 1753 "parser.yy"
     7424#line 1748 "parser.yy"
    74217425    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    74227426    break;
     
    74257429
    74267430/* Line 1806 of yacc.c  */
     7431#line 1750 "parser.yy"
     7432    { (yyval.decl) = 0; }
     7433    break;
     7434
     7435  case 474:
     7436
     7437/* Line 1806 of yacc.c  */
    74277438#line 1755 "parser.yy"
    7428     { (yyval.decl) = 0; }
    7429     break;
    7430 
    7431   case 474:
     7439    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     7440    break;
     7441
     7442  case 476:
     7443
     7444/* Line 1806 of yacc.c  */
     7445#line 1758 "parser.yy"
     7446    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     7447    break;
     7448
     7449  case 477:
    74327450
    74337451/* Line 1806 of yacc.c  */
    74347452#line 1760 "parser.yy"
    7435     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    7436     break;
    7437 
    7438   case 476:
    7439 
    7440 /* Line 1806 of yacc.c  */
    7441 #line 1763 "parser.yy"
    7442     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    7443     break;
    7444 
    7445   case 477:
     7453    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     7454    break;
     7455
     7456  case 478:
    74467457
    74477458/* Line 1806 of yacc.c  */
    74487459#line 1765 "parser.yy"
    7449     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    7450     break;
    7451 
    7452   case 478:
    7453 
    7454 /* Line 1806 of yacc.c  */
    7455 #line 1770 "parser.yy"
    74567460    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    74577461    break;
     
    74607464
    74617465/* Line 1806 of yacc.c  */
    7462 #line 1772 "parser.yy"
     7466#line 1767 "parser.yy"
    74637467    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    74647468    break;
     
    74677471
    74687472/* Line 1806 of yacc.c  */
     7473#line 1769 "parser.yy"
     7474    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     7475    break;
     7476
     7477  case 481:
     7478
     7479/* Line 1806 of yacc.c  */
    74697480#line 1774 "parser.yy"
    7470     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    7471     break;
    7472 
    7473   case 481:
    7474 
    7475 /* Line 1806 of yacc.c  */
    7476 #line 1779 "parser.yy"
    74777481    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    74787482    break;
     
    74817485
    74827486/* Line 1806 of yacc.c  */
     7487#line 1776 "parser.yy"
     7488    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     7489    break;
     7490
     7491  case 483:
     7492
     7493/* Line 1806 of yacc.c  */
    74837494#line 1781 "parser.yy"
    7484     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    7485     break;
    7486 
    7487   case 483:
    7488 
    7489 /* Line 1806 of yacc.c  */
    7490 #line 1786 "parser.yy"
    74917495    {
    74927496                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    74987502
    74997503/* Line 1806 of yacc.c  */
    7500 #line 1791 "parser.yy"
     7504#line 1786 "parser.yy"
    75017505    {
    75027506                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    75087512
    75097513/* Line 1806 of yacc.c  */
    7510 #line 1799 "parser.yy"
     7514#line 1794 "parser.yy"
    75117515    {
    75127516                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    75187522
    75197523/* Line 1806 of yacc.c  */
    7520 #line 1804 "parser.yy"
     7524#line 1799 "parser.yy"
    75217525    {
    75227526                        typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
     
    75287532
    75297533/* Line 1806 of yacc.c  */
    7530 #line 1809 "parser.yy"
     7534#line 1804 "parser.yy"
    75317535    {
    75327536                        typedefTable.leaveContext();
     
    75397543
    75407544/* Line 1806 of yacc.c  */
    7541 #line 1819 "parser.yy"
     7545#line 1814 "parser.yy"
    75427546    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    75437547    break;
    75447548
    75457549  case 492:
     7550
     7551/* Line 1806 of yacc.c  */
     7552#line 1824 "parser.yy"
     7553    {
     7554                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     7555                        (yyval.decl) = (yyvsp[(1) - (1)].decl);
     7556                }
     7557    break;
     7558
     7559  case 493:
    75467560
    75477561/* Line 1806 of yacc.c  */
     
    75537567    break;
    75547568
    7555   case 493:
     7569  case 494:
    75567570
    75577571/* Line 1806 of yacc.c  */
    75587572#line 1834 "parser.yy"
    7559     {
    7560                         typedefTable.addToEnclosingScope2( TypedefTable::ID );
    7561                         (yyval.decl) = (yyvsp[(1) - (1)].decl);
    7562                 }
    7563     break;
    7564 
    7565   case 494:
    7566 
    7567 /* Line 1806 of yacc.c  */
    7568 #line 1839 "parser.yy"
    75697573    {
    75707574                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    75767580
    75777581/* Line 1806 of yacc.c  */
    7578 #line 1847 "parser.yy"
     7582#line 1842 "parser.yy"
    75797583    {
    75807584                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    75867590
    75877591/* Line 1806 of yacc.c  */
    7588 #line 1852 "parser.yy"
     7592#line 1847 "parser.yy"
    75897593    {
    75907594                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    75967600
    75977601/* Line 1806 of yacc.c  */
    7598 #line 1862 "parser.yy"
     7602#line 1857 "parser.yy"
    75997603    {}
    76007604    break;
     
    76037607
    76047608/* Line 1806 of yacc.c  */
    7605 #line 1864 "parser.yy"
     7609#line 1859 "parser.yy"
    76067610    {
    76077611                        if ( theTree ) {
     
    76167620
    76177621/* Line 1806 of yacc.c  */
     7622#line 1871 "parser.yy"
     7623    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     7624    break;
     7625
     7626  case 501:
     7627
     7628/* Line 1806 of yacc.c  */
    76187629#line 1876 "parser.yy"
    7619     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    7620     break;
    7621 
    7622   case 501:
    7623 
    7624 /* Line 1806 of yacc.c  */
    7625 #line 1881 "parser.yy"
    76267630    { (yyval.decl) = 0; }
    76277631    break;
     
    76307634
    76317635/* Line 1806 of yacc.c  */
    7632 #line 1889 "parser.yy"
     7636#line 1884 "parser.yy"
    76337637    {}
    76347638    break;
     
    76377641
    76387642/* Line 1806 of yacc.c  */
    7639 #line 1891 "parser.yy"
     7643#line 1886 "parser.yy"
    76407644    {
    76417645                        linkageStack.push( linkage );
     
    76477651
    76487652/* Line 1806 of yacc.c  */
    7649 #line 1896 "parser.yy"
     7653#line 1891 "parser.yy"
    76507654    {
    76517655                        linkage = linkageStack.top();
     
    76587662
    76597663/* Line 1806 of yacc.c  */
    7660 #line 1902 "parser.yy"
     7664#line 1897 "parser.yy"
    76617665    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    76627666    break;
     
    76657669
    76667670/* Line 1806 of yacc.c  */
    7667 #line 1912 "parser.yy"
     7671#line 1907 "parser.yy"
    76687672    {
    76697673                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    76767680
    76777681/* Line 1806 of yacc.c  */
    7678 #line 1918 "parser.yy"
     7682#line 1913 "parser.yy"
    76797683    {
    76807684                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    76877691
    76887692/* Line 1806 of yacc.c  */
    7689 #line 1927 "parser.yy"
     7693#line 1922 "parser.yy"
    76907694    {
    76917695                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    76987702
    76997703/* Line 1806 of yacc.c  */
    7700 #line 1933 "parser.yy"
     7704#line 1928 "parser.yy"
    77017705    {
    77027706                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77097713
    77107714/* Line 1806 of yacc.c  */
    7711 #line 1939 "parser.yy"
     7715#line 1934 "parser.yy"
    77127716    {
    77137717                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77207724
    77217725/* Line 1806 of yacc.c  */
    7722 #line 1945 "parser.yy"
     7726#line 1940 "parser.yy"
    77237727    {
    77247728                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77317735
    77327736/* Line 1806 of yacc.c  */
    7733 #line 1951 "parser.yy"
     7737#line 1946 "parser.yy"
    77347738    {
    77357739                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77427746
    77437747/* Line 1806 of yacc.c  */
    7744 #line 1959 "parser.yy"
     7748#line 1954 "parser.yy"
    77457749    {
    77467750                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77537757
    77547758/* Line 1806 of yacc.c  */
    7755 #line 1965 "parser.yy"
     7759#line 1960 "parser.yy"
    77567760    {
    77577761                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77647768
    77657769/* Line 1806 of yacc.c  */
    7766 #line 1973 "parser.yy"
     7770#line 1968 "parser.yy"
    77677771    {
    77687772                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77757779
    77767780/* Line 1806 of yacc.c  */
    7777 #line 1979 "parser.yy"
     7781#line 1974 "parser.yy"
    77787782    {
    77797783                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    77867790
    77877791/* Line 1806 of yacc.c  */
    7788 #line 1994 "parser.yy"
     7792#line 1989 "parser.yy"
    77897793    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    77907794    break;
    77917795
    7792   case 527:
    7793 
    7794 /* Line 1806 of yacc.c  */
    7795 #line 2004 "parser.yy"
    7796     { (yyval.decl) = 0; }
    7797     break;
    7798 
    7799   case 530:
    7800 
    7801 /* Line 1806 of yacc.c  */
    7802 #line 2011 "parser.yy"
    7803     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7804     break;
    7805 
    7806   case 531:
    7807 
    7808 /* Line 1806 of yacc.c  */
    7809 #line 2017 "parser.yy"
    7810     { (yyval.decl) = 0; }
    7811     break;
    7812 
    78137796  case 537:
    78147797
    78157798/* Line 1806 of yacc.c  */
    7816 #line 2032 "parser.yy"
     7799#line 2023 "parser.yy"
    78177800    {}
    78187801    break;
     
    78217804
    78227805/* Line 1806 of yacc.c  */
    7823 #line 2033 "parser.yy"
     7806#line 2024 "parser.yy"
    78247807    {}
    78257808    break;
     
    78287811
    78297812/* Line 1806 of yacc.c  */
    7830 #line 2034 "parser.yy"
     7813#line 2025 "parser.yy"
    78317814    {}
    78327815    break;
     
    78357818
    78367819/* Line 1806 of yacc.c  */
    7837 #line 2035 "parser.yy"
     7820#line 2026 "parser.yy"
    78387821    {}
    78397822    break;
    78407823
    7841   case 541:
    7842 
    7843 /* Line 1806 of yacc.c  */
    7844 #line 2070 "parser.yy"
    7845     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7846     break;
    7847 
    7848   case 543:
    7849 
    7850 /* Line 1806 of yacc.c  */
    7851 #line 2073 "parser.yy"
    7852     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7853     break;
    7854 
    7855   case 544:
    7856 
    7857 /* Line 1806 of yacc.c  */
    7858 #line 2075 "parser.yy"
    7859     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7860     break;
    7861 
    78627824  case 545:
    78637825
    78647826/* Line 1806 of yacc.c  */
    7865 #line 2080 "parser.yy"
     7827#line 2068 "parser.yy"
    78667828    {
    78677829                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    78737835
    78747836/* Line 1806 of yacc.c  */
    7875 #line 2085 "parser.yy"
     7837#line 2073 "parser.yy"
    78767838    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    78777839    break;
     
    78807842
    78817843/* Line 1806 of yacc.c  */
    7882 #line 2090 "parser.yy"
     7844#line 2078 "parser.yy"
    78837845    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    78847846    break;
     
    78877849
    78887850/* Line 1806 of yacc.c  */
    7889 #line 2092 "parser.yy"
     7851#line 2080 "parser.yy"
    78907852    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    78917853    break;
     
    78947856
    78957857/* Line 1806 of yacc.c  */
    7896 #line 2094 "parser.yy"
     7858#line 2082 "parser.yy"
    78977859    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    78987860    break;
     
    79017863
    79027864/* Line 1806 of yacc.c  */
    7903 #line 2099 "parser.yy"
     7865#line 2087 "parser.yy"
    79047866    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    79057867    break;
     
    79087870
    79097871/* Line 1806 of yacc.c  */
    7910 #line 2101 "parser.yy"
     7872#line 2089 "parser.yy"
    79117873    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    79127874    break;
     
    79157877
    79167878/* Line 1806 of yacc.c  */
    7917 #line 2103 "parser.yy"
     7879#line 2091 "parser.yy"
    79187880    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    79197881    break;
     
    79227884
    79237885/* Line 1806 of yacc.c  */
    7924 #line 2105 "parser.yy"
     7886#line 2093 "parser.yy"
    79257887    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    79267888    break;
     
    79297891
    79307892/* Line 1806 of yacc.c  */
    7931 #line 2110 "parser.yy"
     7893#line 2098 "parser.yy"
    79327894    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    79337895    break;
     
    79367898
    79377899/* Line 1806 of yacc.c  */
    7938 #line 2112 "parser.yy"
     7900#line 2100 "parser.yy"
    79397901    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    79407902    break;
    79417903
    7942   case 556:
    7943 
    7944 /* Line 1806 of yacc.c  */
    7945 #line 2122 "parser.yy"
    7946     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7947     break;
    7948 
    7949   case 558:
     7904  case 559:
     7905
     7906/* Line 1806 of yacc.c  */
     7907#line 2116 "parser.yy"
     7908    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     7909    break;
     7910
     7911  case 560:
     7912
     7913/* Line 1806 of yacc.c  */
     7914#line 2118 "parser.yy"
     7915    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     7916    break;
     7917
     7918  case 561:
     7919
     7920/* Line 1806 of yacc.c  */
     7921#line 2120 "parser.yy"
     7922    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7923    break;
     7924
     7925  case 562:
    79507926
    79517927/* Line 1806 of yacc.c  */
    79527928#line 2125 "parser.yy"
    7953     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7954     break;
    7955 
    7956   case 559:
    7957 
    7958 /* Line 1806 of yacc.c  */
    7959 #line 2130 "parser.yy"
     7929    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     7930    break;
     7931
     7932  case 563:
     7933
     7934/* Line 1806 of yacc.c  */
     7935#line 2127 "parser.yy"
     7936    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     7937    break;
     7938
     7939  case 564:
     7940
     7941/* Line 1806 of yacc.c  */
     7942#line 2129 "parser.yy"
     7943    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7944    break;
     7945
     7946  case 565:
     7947
     7948/* Line 1806 of yacc.c  */
     7949#line 2134 "parser.yy"
     7950    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     7951    break;
     7952
     7953  case 566:
     7954
     7955/* Line 1806 of yacc.c  */
     7956#line 2136 "parser.yy"
     7957    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     7958    break;
     7959
     7960  case 567:
     7961
     7962/* Line 1806 of yacc.c  */
     7963#line 2138 "parser.yy"
     7964    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7965    break;
     7966
     7967  case 571:
     7968
     7969/* Line 1806 of yacc.c  */
     7970#line 2153 "parser.yy"
     7971    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     7972    break;
     7973
     7974  case 572:
     7975
     7976/* Line 1806 of yacc.c  */
     7977#line 2155 "parser.yy"
     7978    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     7979    break;
     7980
     7981  case 573:
     7982
     7983/* Line 1806 of yacc.c  */
     7984#line 2157 "parser.yy"
     7985    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7986    break;
     7987
     7988  case 574:
     7989
     7990/* Line 1806 of yacc.c  */
     7991#line 2162 "parser.yy"
     7992    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     7993    break;
     7994
     7995  case 575:
     7996
     7997/* Line 1806 of yacc.c  */
     7998#line 2164 "parser.yy"
     7999    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8000    break;
     8001
     8002  case 576:
     8003
     8004/* Line 1806 of yacc.c  */
     8005#line 2166 "parser.yy"
     8006    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8007    break;
     8008
     8009  case 577:
     8010
     8011/* Line 1806 of yacc.c  */
     8012#line 2171 "parser.yy"
     8013    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8014    break;
     8015
     8016  case 578:
     8017
     8018/* Line 1806 of yacc.c  */
     8019#line 2173 "parser.yy"
     8020    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8021    break;
     8022
     8023  case 579:
     8024
     8025/* Line 1806 of yacc.c  */
     8026#line 2175 "parser.yy"
     8027    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8028    break;
     8029
     8030  case 585:
     8031
     8032/* Line 1806 of yacc.c  */
     8033#line 2198 "parser.yy"
     8034    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8035    break;
     8036
     8037  case 586:
     8038
     8039/* Line 1806 of yacc.c  */
     8040#line 2203 "parser.yy"
     8041    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8042    break;
     8043
     8044  case 587:
     8045
     8046/* Line 1806 of yacc.c  */
     8047#line 2205 "parser.yy"
     8048    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8049    break;
     8050
     8051  case 588:
     8052
     8053/* Line 1806 of yacc.c  */
     8054#line 2207 "parser.yy"
     8055    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8056    break;
     8057
     8058  case 589:
     8059
     8060/* Line 1806 of yacc.c  */
     8061#line 2212 "parser.yy"
     8062    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8063    break;
     8064
     8065  case 590:
     8066
     8067/* Line 1806 of yacc.c  */
     8068#line 2214 "parser.yy"
     8069    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8070    break;
     8071
     8072  case 591:
     8073
     8074/* Line 1806 of yacc.c  */
     8075#line 2216 "parser.yy"
     8076    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8077    break;
     8078
     8079  case 592:
     8080
     8081/* Line 1806 of yacc.c  */
     8082#line 2218 "parser.yy"
     8083    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8084    break;
     8085
     8086  case 593:
     8087
     8088/* Line 1806 of yacc.c  */
     8089#line 2223 "parser.yy"
    79608090    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    79618091    break;
    79628092
    7963   case 560:
    7964 
    7965 /* Line 1806 of yacc.c  */
    7966 #line 2132 "parser.yy"
     8093  case 594:
     8094
     8095/* Line 1806 of yacc.c  */
     8096#line 2225 "parser.yy"
    79678097    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    79688098    break;
    79698099
    7970   case 561:
    7971 
    7972 /* Line 1806 of yacc.c  */
    7973 #line 2134 "parser.yy"
     8100  case 595:
     8101
     8102/* Line 1806 of yacc.c  */
     8103#line 2227 "parser.yy"
    79748104    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    79758105    break;
    79768106
    7977   case 562:
    7978 
    7979 /* Line 1806 of yacc.c  */
    7980 #line 2139 "parser.yy"
     8107  case 600:
     8108
     8109/* Line 1806 of yacc.c  */
     8110#line 2244 "parser.yy"
    79818111    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    79828112    break;
    79838113
    7984   case 563:
    7985 
    7986 /* Line 1806 of yacc.c  */
    7987 #line 2141 "parser.yy"
     8114  case 601:
     8115
     8116/* Line 1806 of yacc.c  */
     8117#line 2246 "parser.yy"
    79888118    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    79898119    break;
    79908120
    7991   case 564:
    7992 
    7993 /* Line 1806 of yacc.c  */
    7994 #line 2143 "parser.yy"
     8121  case 602:
     8122
     8123/* Line 1806 of yacc.c  */
     8124#line 2248 "parser.yy"
    79958125    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    79968126    break;
    79978127
    7998   case 565:
    7999 
    8000 /* Line 1806 of yacc.c  */
    8001 #line 2148 "parser.yy"
     8128  case 603:
     8129
     8130/* Line 1806 of yacc.c  */
     8131#line 2253 "parser.yy"
     8132    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8133    break;
     8134
     8135  case 604:
     8136
     8137/* Line 1806 of yacc.c  */
     8138#line 2255 "parser.yy"
    80028139    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80038140    break;
    80048141
    8005   case 566:
    8006 
    8007 /* Line 1806 of yacc.c  */
    8008 #line 2150 "parser.yy"
     8142  case 605:
     8143
     8144/* Line 1806 of yacc.c  */
     8145#line 2257 "parser.yy"
    80098146    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80108147    break;
    80118148
    8012   case 567:
    8013 
    8014 /* Line 1806 of yacc.c  */
    8015 #line 2152 "parser.yy"
     8149  case 606:
     8150
     8151/* Line 1806 of yacc.c  */
     8152#line 2259 "parser.yy"
    80168153    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80178154    break;
    80188155
    8019   case 571:
    8020 
    8021 /* Line 1806 of yacc.c  */
    8022 #line 2167 "parser.yy"
    8023     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    8024     break;
    8025 
    8026   case 572:
    8027 
    8028 /* Line 1806 of yacc.c  */
    8029 #line 2169 "parser.yy"
    8030     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    8031     break;
    8032 
    8033   case 573:
    8034 
    8035 /* Line 1806 of yacc.c  */
    8036 #line 2171 "parser.yy"
    8037     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8038     break;
    8039 
    8040   case 574:
    8041 
    8042 /* Line 1806 of yacc.c  */
    8043 #line 2176 "parser.yy"
    8044     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8045     break;
    8046 
    8047   case 575:
    8048 
    8049 /* Line 1806 of yacc.c  */
    8050 #line 2178 "parser.yy"
    8051     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8052     break;
    8053 
    8054   case 576:
    8055 
    8056 /* Line 1806 of yacc.c  */
    8057 #line 2180 "parser.yy"
    8058     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8059     break;
    8060 
    8061   case 577:
    8062 
    8063 /* Line 1806 of yacc.c  */
    8064 #line 2185 "parser.yy"
    8065     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8066     break;
    8067 
    8068   case 578:
    8069 
    8070 /* Line 1806 of yacc.c  */
    8071 #line 2187 "parser.yy"
    8072     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8073     break;
    8074 
    8075   case 579:
    8076 
    8077 /* Line 1806 of yacc.c  */
    8078 #line 2189 "parser.yy"
    8079     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8080     break;
    8081 
    8082   case 580:
    8083 
    8084 /* Line 1806 of yacc.c  */
    8085 #line 2204 "parser.yy"
    8086     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8087     break;
    8088 
    8089   case 582:
    8090 
    8091 /* Line 1806 of yacc.c  */
    8092 #line 2207 "parser.yy"
    8093     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8094     break;
    8095 
    8096   case 583:
    8097 
    8098 /* Line 1806 of yacc.c  */
    8099 #line 2209 "parser.yy"
    8100     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8101     break;
    8102 
    8103   case 585:
    8104 
    8105 /* Line 1806 of yacc.c  */
    8106 #line 2215 "parser.yy"
    8107     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8108     break;
    8109 
    8110   case 586:
    8111 
    8112 /* Line 1806 of yacc.c  */
    8113 #line 2220 "parser.yy"
    8114     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8115     break;
    8116 
    8117   case 587:
    8118 
    8119 /* Line 1806 of yacc.c  */
    8120 #line 2222 "parser.yy"
    8121     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8122     break;
    8123 
    8124   case 588:
    8125 
    8126 /* Line 1806 of yacc.c  */
    8127 #line 2224 "parser.yy"
    8128     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8129     break;
    8130 
    8131   case 589:
    8132 
    8133 /* Line 1806 of yacc.c  */
    8134 #line 2229 "parser.yy"
    8135     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8136     break;
    8137 
    8138   case 590:
    8139 
    8140 /* Line 1806 of yacc.c  */
    8141 #line 2231 "parser.yy"
    8142     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8143     break;
    8144 
    8145   case 591:
    8146 
    8147 /* Line 1806 of yacc.c  */
    8148 #line 2233 "parser.yy"
    8149     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8150     break;
    8151 
    8152   case 592:
    8153 
    8154 /* Line 1806 of yacc.c  */
    8155 #line 2235 "parser.yy"
    8156     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8157     break;
    8158 
    8159   case 593:
    8160 
    8161 /* Line 1806 of yacc.c  */
    8162 #line 2240 "parser.yy"
     8156  case 607:
     8157
     8158/* Line 1806 of yacc.c  */
     8159#line 2264 "parser.yy"
    81638160    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    81648161    break;
    81658162
    8166   case 594:
    8167 
    8168 /* Line 1806 of yacc.c  */
    8169 #line 2242 "parser.yy"
     8163  case 608:
     8164
     8165/* Line 1806 of yacc.c  */
     8166#line 2266 "parser.yy"
    81708167    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81718168    break;
    81728169
    8173   case 595:
    8174 
    8175 /* Line 1806 of yacc.c  */
    8176 #line 2244 "parser.yy"
    8177     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8178     break;
    8179 
    8180   case 596:
    8181 
    8182 /* Line 1806 of yacc.c  */
    8183 #line 2254 "parser.yy"
    8184     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8185     break;
    8186 
    8187   case 598:
    8188 
    8189 /* Line 1806 of yacc.c  */
    8190 #line 2257 "parser.yy"
    8191     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8192     break;
    8193 
    8194   case 599:
    8195 
    8196 /* Line 1806 of yacc.c  */
    8197 #line 2259 "parser.yy"
    8198     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8199     break;
    8200 
    8201   case 600:
    8202 
    8203 /* Line 1806 of yacc.c  */
    8204 #line 2264 "parser.yy"
    8205     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8206     break;
    8207 
    8208   case 601:
    8209 
    8210 /* Line 1806 of yacc.c  */
    8211 #line 2266 "parser.yy"
    8212     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8213     break;
    8214 
    8215   case 602:
     8170  case 609:
    82168171
    82178172/* Line 1806 of yacc.c  */
     
    82208175    break;
    82218176
    8222   case 603:
    8223 
    8224 /* Line 1806 of yacc.c  */
    8225 #line 2273 "parser.yy"
    8226     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8227     break;
    8228 
    8229   case 604:
    8230 
    8231 /* Line 1806 of yacc.c  */
    8232 #line 2275 "parser.yy"
    8233     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8234     break;
    8235 
    8236   case 605:
    8237 
    8238 /* Line 1806 of yacc.c  */
    8239 #line 2277 "parser.yy"
    8240     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8241     break;
    8242 
    8243   case 606:
    8244 
    8245 /* Line 1806 of yacc.c  */
    8246 #line 2279 "parser.yy"
    8247     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8248     break;
    8249 
    8250   case 607:
    8251 
    8252 /* Line 1806 of yacc.c  */
    8253 #line 2284 "parser.yy"
    8254     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8255     break;
    8256 
    8257   case 608:
    8258 
    8259 /* Line 1806 of yacc.c  */
    8260 #line 2286 "parser.yy"
    8261     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8262     break;
    8263 
    8264   case 609:
    8265 
    8266 /* Line 1806 of yacc.c  */
    8267 #line 2288 "parser.yy"
    8268     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8269     break;
    8270 
    8271   case 610:
    8272 
    8273 /* Line 1806 of yacc.c  */
    8274 #line 2319 "parser.yy"
    8275     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8276     break;
    8277 
    8278   case 612:
    8279 
    8280 /* Line 1806 of yacc.c  */
    8281 #line 2322 "parser.yy"
    8282     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8283     break;
    8284 
    8285   case 613:
    8286 
    8287 /* Line 1806 of yacc.c  */
    8288 #line 2324 "parser.yy"
    8289     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8290     break;
    8291 
    82928177  case 614:
    82938178
    82948179/* Line 1806 of yacc.c  */
    8295 #line 2329 "parser.yy"
     8180#line 2306 "parser.yy"
    82968181    {
    82978182                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    83038188
    83048189/* Line 1806 of yacc.c  */
    8305 #line 2334 "parser.yy"
     8190#line 2311 "parser.yy"
    83068191    {
    83078192                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    83138198
    83148199/* Line 1806 of yacc.c  */
    8315 #line 2342 "parser.yy"
     8200#line 2319 "parser.yy"
    83168201    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83178202    break;
     
    83208205
    83218206/* Line 1806 of yacc.c  */
    8322 #line 2344 "parser.yy"
     8207#line 2321 "parser.yy"
    83238208    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83248209    break;
     
    83278212
    83288213/* Line 1806 of yacc.c  */
    8329 #line 2346 "parser.yy"
     8214#line 2323 "parser.yy"
    83308215    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83318216    break;
     
    83348219
    83358220/* Line 1806 of yacc.c  */
    8336 #line 2351 "parser.yy"
     8221#line 2328 "parser.yy"
    83378222    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83388223    break;
     
    83418226
    83428227/* Line 1806 of yacc.c  */
    8343 #line 2353 "parser.yy"
     8228#line 2330 "parser.yy"
    83448229    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83458230    break;
     
    83488233
    83498234/* Line 1806 of yacc.c  */
    8350 #line 2358 "parser.yy"
     8235#line 2335 "parser.yy"
    83518236    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83528237    break;
     
    83558240
    83568241/* Line 1806 of yacc.c  */
    8357 #line 2360 "parser.yy"
     8242#line 2337 "parser.yy"
    83588243    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83598244    break;
    83608245
    8361   case 624:
     8246  case 626:
     8247
     8248/* Line 1806 of yacc.c  */
     8249#line 2357 "parser.yy"
     8250    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8251    break;
     8252
     8253  case 627:
     8254
     8255/* Line 1806 of yacc.c  */
     8256#line 2359 "parser.yy"
     8257    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8258    break;
     8259
     8260  case 628:
     8261
     8262/* Line 1806 of yacc.c  */
     8263#line 2361 "parser.yy"
     8264    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8265    break;
     8266
     8267  case 629:
     8268
     8269/* Line 1806 of yacc.c  */
     8270#line 2363 "parser.yy"
     8271    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8272    break;
     8273
     8274  case 630:
     8275
     8276/* Line 1806 of yacc.c  */
     8277#line 2365 "parser.yy"
     8278    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8279    break;
     8280
     8281  case 632:
     8282
     8283/* Line 1806 of yacc.c  */
     8284#line 2371 "parser.yy"
     8285    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8286    break;
     8287
     8288  case 633:
     8289
     8290/* Line 1806 of yacc.c  */
     8291#line 2373 "parser.yy"
     8292    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8293    break;
     8294
     8295  case 634:
    83628296
    83638297/* Line 1806 of yacc.c  */
    83648298#line 2375 "parser.yy"
    8365     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8366     break;
    8367 
    8368   case 625:
    8369 
    8370 /* Line 1806 of yacc.c  */
    8371 #line 2377 "parser.yy"
    8372     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8373     break;
    8374 
    8375   case 626:
     8299    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8300    break;
     8301
     8302  case 635:
     8303
     8304/* Line 1806 of yacc.c  */
     8305#line 2380 "parser.yy"
     8306    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8307    break;
     8308
     8309  case 636:
    83768310
    83778311/* Line 1806 of yacc.c  */
    83788312#line 2382 "parser.yy"
     8313    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8314    break;
     8315
     8316  case 637:
     8317
     8318/* Line 1806 of yacc.c  */
     8319#line 2384 "parser.yy"
     8320    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8321    break;
     8322
     8323  case 638:
     8324
     8325/* Line 1806 of yacc.c  */
     8326#line 2390 "parser.yy"
     8327    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     8328    break;
     8329
     8330  case 639:
     8331
     8332/* Line 1806 of yacc.c  */
     8333#line 2392 "parser.yy"
     8334    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     8335    break;
     8336
     8337  case 641:
     8338
     8339/* Line 1806 of yacc.c  */
     8340#line 2398 "parser.yy"
     8341    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     8342    break;
     8343
     8344  case 642:
     8345
     8346/* Line 1806 of yacc.c  */
     8347#line 2400 "parser.yy"
     8348    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     8349    break;
     8350
     8351  case 643:
     8352
     8353/* Line 1806 of yacc.c  */
     8354#line 2402 "parser.yy"
     8355    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     8356    break;
     8357
     8358  case 644:
     8359
     8360/* Line 1806 of yacc.c  */
     8361#line 2404 "parser.yy"
     8362    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     8363    break;
     8364
     8365  case 648:
     8366
     8367/* Line 1806 of yacc.c  */
     8368#line 2424 "parser.yy"
    83798369    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    83808370    break;
    83818371
    8382   case 627:
    8383 
    8384 /* Line 1806 of yacc.c  */
    8385 #line 2384 "parser.yy"
     8372  case 649:
     8373
     8374/* Line 1806 of yacc.c  */
     8375#line 2426 "parser.yy"
    83868376    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    83878377    break;
    83888378
    8389   case 628:
    8390 
    8391 /* Line 1806 of yacc.c  */
    8392 #line 2386 "parser.yy"
     8379  case 650:
     8380
     8381/* Line 1806 of yacc.c  */
     8382#line 2428 "parser.yy"
    83938383    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83948384    break;
    83958385
    8396   case 629:
    8397 
    8398 /* Line 1806 of yacc.c  */
    8399 #line 2388 "parser.yy"
     8386  case 651:
     8387
     8388/* Line 1806 of yacc.c  */
     8389#line 2430 "parser.yy"
    84008390    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84018391    break;
    84028392
    8403   case 630:
    8404 
    8405 /* Line 1806 of yacc.c  */
    8406 #line 2390 "parser.yy"
     8393  case 652:
     8394
     8395/* Line 1806 of yacc.c  */
     8396#line 2432 "parser.yy"
    84078397    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84088398    break;
    84098399
    8410   case 632:
    8411 
    8412 /* Line 1806 of yacc.c  */
    8413 #line 2396 "parser.yy"
     8400  case 654:
     8401
     8402/* Line 1806 of yacc.c  */
     8403#line 2438 "parser.yy"
    84148404    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84158405    break;
    84168406
    8417   case 633:
    8418 
    8419 /* Line 1806 of yacc.c  */
    8420 #line 2398 "parser.yy"
     8407  case 655:
     8408
     8409/* Line 1806 of yacc.c  */
     8410#line 2440 "parser.yy"
    84218411    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84228412    break;
    84238413
    8424   case 634:
    8425 
    8426 /* Line 1806 of yacc.c  */
    8427 #line 2400 "parser.yy"
     8414  case 656:
     8415
     8416/* Line 1806 of yacc.c  */
     8417#line 2442 "parser.yy"
    84288418    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84298419    break;
    84308420
    8431   case 635:
    8432 
    8433 /* Line 1806 of yacc.c  */
    8434 #line 2405 "parser.yy"
     8421  case 657:
     8422
     8423/* Line 1806 of yacc.c  */
     8424#line 2447 "parser.yy"
    84358425    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    84368426    break;
    84378427
    8438   case 636:
    8439 
    8440 /* Line 1806 of yacc.c  */
    8441 #line 2407 "parser.yy"
     8428  case 658:
     8429
     8430/* Line 1806 of yacc.c  */
     8431#line 2449 "parser.yy"
    84428432    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84438433    break;
    84448434
    8445   case 637:
    8446 
    8447 /* Line 1806 of yacc.c  */
    8448 #line 2409 "parser.yy"
     8435  case 659:
     8436
     8437/* Line 1806 of yacc.c  */
     8438#line 2451 "parser.yy"
    84498439    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84508440    break;
    84518441
    8452   case 638:
    8453 
    8454 /* Line 1806 of yacc.c  */
    8455 #line 2415 "parser.yy"
     8442  case 661:
     8443
     8444/* Line 1806 of yacc.c  */
     8445#line 2458 "parser.yy"
     8446    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8447    break;
     8448
     8449  case 663:
     8450
     8451/* Line 1806 of yacc.c  */
     8452#line 2469 "parser.yy"
    84568453    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    84578454    break;
    84588455
    8459   case 639:
    8460 
    8461 /* Line 1806 of yacc.c  */
    8462 #line 2417 "parser.yy"
    8463     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    8464     break;
    8465 
    8466   case 641:
    8467 
    8468 /* Line 1806 of yacc.c  */
    8469 #line 2423 "parser.yy"
    8470     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    8471     break;
    8472 
    8473   case 642:
    8474 
    8475 /* Line 1806 of yacc.c  */
    8476 #line 2425 "parser.yy"
    8477     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    8478     break;
    8479 
    8480   case 643:
    8481 
    8482 /* Line 1806 of yacc.c  */
    8483 #line 2427 "parser.yy"
    8484     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    8485     break;
    8486 
    8487   case 644:
    8488 
    8489 /* Line 1806 of yacc.c  */
    8490 #line 2429 "parser.yy"
    8491     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    8492     break;
    8493 
    8494   case 646:
    8495 
    8496 /* Line 1806 of yacc.c  */
    8497 #line 2444 "parser.yy"
    8498     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8499     break;
    8500 
    8501   case 647:
    8502 
    8503 /* Line 1806 of yacc.c  */
    8504 #line 2446 "parser.yy"
    8505     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8506     break;
    8507 
    8508   case 648:
    8509 
    8510 /* Line 1806 of yacc.c  */
    8511 #line 2451 "parser.yy"
     8456  case 664:
     8457
     8458/* Line 1806 of yacc.c  */
     8459#line 2472 "parser.yy"
     8460    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     8461    break;
     8462
     8463  case 665:
     8464
     8465/* Line 1806 of yacc.c  */
     8466#line 2474 "parser.yy"
     8467    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     8468    break;
     8469
     8470  case 666:
     8471
     8472/* Line 1806 of yacc.c  */
     8473#line 2477 "parser.yy"
     8474    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     8475    break;
     8476
     8477  case 667:
     8478
     8479/* Line 1806 of yacc.c  */
     8480#line 2479 "parser.yy"
     8481    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     8482    break;
     8483
     8484  case 668:
     8485
     8486/* Line 1806 of yacc.c  */
     8487#line 2481 "parser.yy"
     8488    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     8489    break;
     8490
     8491  case 672:
     8492
     8493/* Line 1806 of yacc.c  */
     8494#line 2500 "parser.yy"
    85128495    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85138496    break;
    85148497
    8515   case 649:
    8516 
    8517 /* Line 1806 of yacc.c  */
    8518 #line 2453 "parser.yy"
     8498  case 673:
     8499
     8500/* Line 1806 of yacc.c  */
     8501#line 2502 "parser.yy"
    85198502    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    85208503    break;
    85218504
    8522   case 650:
    8523 
    8524 /* Line 1806 of yacc.c  */
    8525 #line 2455 "parser.yy"
     8505  case 674:
     8506
     8507/* Line 1806 of yacc.c  */
     8508#line 2504 "parser.yy"
    85268509    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85278510    break;
    85288511
    8529   case 651:
    8530 
    8531 /* Line 1806 of yacc.c  */
    8532 #line 2457 "parser.yy"
     8512  case 675:
     8513
     8514/* Line 1806 of yacc.c  */
     8515#line 2506 "parser.yy"
    85338516    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85348517    break;
    85358518
    8536   case 652:
    8537 
    8538 /* Line 1806 of yacc.c  */
    8539 #line 2459 "parser.yy"
     8519  case 676:
     8520
     8521/* Line 1806 of yacc.c  */
     8522#line 2508 "parser.yy"
    85408523    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85418524    break;
    85428525
    8543   case 654:
    8544 
    8545 /* Line 1806 of yacc.c  */
    8546 #line 2465 "parser.yy"
     8526  case 678:
     8527
     8528/* Line 1806 of yacc.c  */
     8529#line 2514 "parser.yy"
    85478530    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85488531    break;
    85498532
    8550   case 655:
    8551 
    8552 /* Line 1806 of yacc.c  */
    8553 #line 2467 "parser.yy"
     8533  case 679:
     8534
     8535/* Line 1806 of yacc.c  */
     8536#line 2516 "parser.yy"
    85548537    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85558538    break;
    85568539
    8557   case 656:
    8558 
    8559 /* Line 1806 of yacc.c  */
    8560 #line 2469 "parser.yy"
     8540  case 680:
     8541
     8542/* Line 1806 of yacc.c  */
     8543#line 2518 "parser.yy"
    85618544    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85628545    break;
    85638546
    8564   case 657:
    8565 
    8566 /* Line 1806 of yacc.c  */
    8567 #line 2474 "parser.yy"
    8568     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8569     break;
    8570 
    8571   case 658:
    8572 
    8573 /* Line 1806 of yacc.c  */
    8574 #line 2476 "parser.yy"
     8547  case 681:
     8548
     8549/* Line 1806 of yacc.c  */
     8550#line 2523 "parser.yy"
    85758551    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85768552    break;
    85778553
    8578   case 659:
    8579 
    8580 /* Line 1806 of yacc.c  */
    8581 #line 2478 "parser.yy"
     8554  case 682:
     8555
     8556/* Line 1806 of yacc.c  */
     8557#line 2525 "parser.yy"
    85828558    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85838559    break;
    85848560
    8585   case 661:
    8586 
    8587 /* Line 1806 of yacc.c  */
    8588 #line 2485 "parser.yy"
    8589     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8590     break;
    8591 
    8592   case 663:
    8593 
    8594 /* Line 1806 of yacc.c  */
    8595 #line 2496 "parser.yy"
    8596     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    8597     break;
    8598 
    8599   case 664:
    8600 
    8601 /* Line 1806 of yacc.c  */
    8602 #line 2499 "parser.yy"
     8561  case 685:
     8562
     8563/* Line 1806 of yacc.c  */
     8564#line 2535 "parser.yy"
     8565    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     8566    break;
     8567
     8568  case 688:
     8569
     8570/* Line 1806 of yacc.c  */
     8571#line 2545 "parser.yy"
     8572    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8573    break;
     8574
     8575  case 689:
     8576
     8577/* Line 1806 of yacc.c  */
     8578#line 2547 "parser.yy"
     8579    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8580    break;
     8581
     8582  case 690:
     8583
     8584/* Line 1806 of yacc.c  */
     8585#line 2549 "parser.yy"
     8586    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8587    break;
     8588
     8589  case 691:
     8590
     8591/* Line 1806 of yacc.c  */
     8592#line 2551 "parser.yy"
     8593    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8594    break;
     8595
     8596  case 692:
     8597
     8598/* Line 1806 of yacc.c  */
     8599#line 2553 "parser.yy"
     8600    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8601    break;
     8602
     8603  case 693:
     8604
     8605/* Line 1806 of yacc.c  */
     8606#line 2555 "parser.yy"
     8607    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8608    break;
     8609
     8610  case 694:
     8611
     8612/* Line 1806 of yacc.c  */
     8613#line 2562 "parser.yy"
     8614    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8615    break;
     8616
     8617  case 695:
     8618
     8619/* Line 1806 of yacc.c  */
     8620#line 2564 "parser.yy"
     8621    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8622    break;
     8623
     8624  case 696:
     8625
     8626/* Line 1806 of yacc.c  */
     8627#line 2566 "parser.yy"
     8628    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8629    break;
     8630
     8631  case 697:
     8632
     8633/* Line 1806 of yacc.c  */
     8634#line 2568 "parser.yy"
     8635    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     8636    break;
     8637
     8638  case 698:
     8639
     8640/* Line 1806 of yacc.c  */
     8641#line 2570 "parser.yy"
     8642    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8643    break;
     8644
     8645  case 699:
     8646
     8647/* Line 1806 of yacc.c  */
     8648#line 2572 "parser.yy"
     8649    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8650    break;
     8651
     8652  case 700:
     8653
     8654/* Line 1806 of yacc.c  */
     8655#line 2574 "parser.yy"
     8656    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8657    break;
     8658
     8659  case 701:
     8660
     8661/* Line 1806 of yacc.c  */
     8662#line 2576 "parser.yy"
     8663    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8664    break;
     8665
     8666  case 702:
     8667
     8668/* Line 1806 of yacc.c  */
     8669#line 2578 "parser.yy"
     8670    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     8671    break;
     8672
     8673  case 703:
     8674
     8675/* Line 1806 of yacc.c  */
     8676#line 2580 "parser.yy"
     8677    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8678    break;
     8679
     8680  case 704:
     8681
     8682/* Line 1806 of yacc.c  */
     8683#line 2585 "parser.yy"
    86038684    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    86048685    break;
    86058686
    8606   case 665:
    8607 
    8608 /* Line 1806 of yacc.c  */
    8609 #line 2501 "parser.yy"
    8610     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    8611     break;
    8612 
    8613   case 666:
    8614 
    8615 /* Line 1806 of yacc.c  */
    8616 #line 2504 "parser.yy"
     8687  case 705:
     8688
     8689/* Line 1806 of yacc.c  */
     8690#line 2587 "parser.yy"
    86178691    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    86188692    break;
    86198693
    8620   case 667:
    8621 
    8622 /* Line 1806 of yacc.c  */
    8623 #line 2506 "parser.yy"
    8624     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    8625     break;
    8626 
    8627   case 668:
    8628 
    8629 /* Line 1806 of yacc.c  */
    8630 #line 2508 "parser.yy"
    8631     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    8632     break;
    8633 
    8634   case 670:
    8635 
    8636 /* Line 1806 of yacc.c  */
    8637 #line 2522 "parser.yy"
    8638     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8639     break;
    8640 
    8641   case 671:
    8642 
    8643 /* Line 1806 of yacc.c  */
    8644 #line 2524 "parser.yy"
    8645     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8646     break;
    8647 
    8648   case 672:
    8649 
    8650 /* Line 1806 of yacc.c  */
    8651 #line 2529 "parser.yy"
    8652     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8653     break;
    8654 
    8655   case 673:
    8656 
    8657 /* Line 1806 of yacc.c  */
    8658 #line 2531 "parser.yy"
    8659     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8660     break;
    8661 
    8662   case 674:
    8663 
    8664 /* Line 1806 of yacc.c  */
    8665 #line 2533 "parser.yy"
    8666     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8667     break;
    8668 
    8669   case 675:
    8670 
    8671 /* Line 1806 of yacc.c  */
    8672 #line 2535 "parser.yy"
    8673     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8674     break;
    8675 
    8676   case 676:
    8677 
    8678 /* Line 1806 of yacc.c  */
    8679 #line 2537 "parser.yy"
    8680     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8681     break;
    8682 
    8683   case 678:
    8684 
    8685 /* Line 1806 of yacc.c  */
    8686 #line 2543 "parser.yy"
    8687     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8688     break;
    8689 
    8690   case 679:
    8691 
    8692 /* Line 1806 of yacc.c  */
    8693 #line 2545 "parser.yy"
    8694     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8695     break;
    8696 
    8697   case 680:
    8698 
    8699 /* Line 1806 of yacc.c  */
    8700 #line 2547 "parser.yy"
    8701     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8702     break;
    8703 
    8704   case 681:
    8705 
    8706 /* Line 1806 of yacc.c  */
    8707 #line 2552 "parser.yy"
    8708     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8709     break;
    8710 
    8711   case 682:
    8712 
    8713 /* Line 1806 of yacc.c  */
    8714 #line 2554 "parser.yy"
    8715     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8716     break;
    8717 
    8718   case 685:
    8719 
    8720 /* Line 1806 of yacc.c  */
    8721 #line 2564 "parser.yy"
     8694  case 706:
     8695
     8696/* Line 1806 of yacc.c  */
     8697#line 2592 "parser.yy"
     8698    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     8699    break;
     8700
     8701  case 707:
     8702
     8703/* Line 1806 of yacc.c  */
     8704#line 2594 "parser.yy"
     8705    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     8706    break;
     8707
     8708  case 709:
     8709
     8710/* Line 1806 of yacc.c  */
     8711#line 2621 "parser.yy"
    87228712    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    87238713    break;
    87248714
    8725   case 688:
    8726 
    8727 /* Line 1806 of yacc.c  */
    8728 #line 2574 "parser.yy"
     8715  case 713:
     8716
     8717/* Line 1806 of yacc.c  */
     8718#line 2632 "parser.yy"
    87298719    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    87308720    break;
    87318721
    8732   case 689:
    8733 
    8734 /* Line 1806 of yacc.c  */
    8735 #line 2576 "parser.yy"
     8722  case 714:
     8723
     8724/* Line 1806 of yacc.c  */
     8725#line 2634 "parser.yy"
    87368726    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    87378727    break;
    87388728
    8739   case 690:
    8740 
    8741 /* Line 1806 of yacc.c  */
    8742 #line 2578 "parser.yy"
     8729  case 715:
     8730
     8731/* Line 1806 of yacc.c  */
     8732#line 2636 "parser.yy"
    87438733    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    87448734    break;
    87458735
    8746   case 691:
    8747 
    8748 /* Line 1806 of yacc.c  */
    8749 #line 2580 "parser.yy"
     8736  case 716:
     8737
     8738/* Line 1806 of yacc.c  */
     8739#line 2638 "parser.yy"
    87508740    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    87518741    break;
    87528742
    8753   case 692:
    8754 
    8755 /* Line 1806 of yacc.c  */
    8756 #line 2582 "parser.yy"
     8743  case 717:
     8744
     8745/* Line 1806 of yacc.c  */
     8746#line 2640 "parser.yy"
    87578747    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    87588748    break;
    87598749
    8760   case 693:
    8761 
    8762 /* Line 1806 of yacc.c  */
    8763 #line 2584 "parser.yy"
     8750  case 718:
     8751
     8752/* Line 1806 of yacc.c  */
     8753#line 2642 "parser.yy"
    87648754    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    87658755    break;
    87668756
    8767   case 694:
    8768 
    8769 /* Line 1806 of yacc.c  */
    8770 #line 2591 "parser.yy"
     8757  case 719:
     8758
     8759/* Line 1806 of yacc.c  */
     8760#line 2649 "parser.yy"
    87718761    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    87728762    break;
    87738763
    8774   case 695:
    8775 
    8776 /* Line 1806 of yacc.c  */
    8777 #line 2593 "parser.yy"
     8764  case 720:
     8765
     8766/* Line 1806 of yacc.c  */
     8767#line 2651 "parser.yy"
     8768    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8769    break;
     8770
     8771  case 721:
     8772
     8773/* Line 1806 of yacc.c  */
     8774#line 2653 "parser.yy"
    87788775    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    87798776    break;
    87808777
    8781   case 696:
    8782 
    8783 /* Line 1806 of yacc.c  */
    8784 #line 2595 "parser.yy"
     8778  case 722:
     8779
     8780/* Line 1806 of yacc.c  */
     8781#line 2655 "parser.yy"
     8782    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8783    break;
     8784
     8785  case 723:
     8786
     8787/* Line 1806 of yacc.c  */
     8788#line 2657 "parser.yy"
    87858789    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    87868790    break;
    87878791
    8788   case 697:
    8789 
    8790 /* Line 1806 of yacc.c  */
    8791 #line 2597 "parser.yy"
    8792     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    8793     break;
    8794 
    8795   case 698:
    8796 
    8797 /* Line 1806 of yacc.c  */
    8798 #line 2599 "parser.yy"
     8792  case 724:
     8793
     8794/* Line 1806 of yacc.c  */
     8795#line 2659 "parser.yy"
    87998796    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    88008797    break;
    88018798
    8802   case 699:
    8803 
    8804 /* Line 1806 of yacc.c  */
    8805 #line 2601 "parser.yy"
    8806     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8807     break;
    8808 
    8809   case 700:
    8810 
    8811 /* Line 1806 of yacc.c  */
    8812 #line 2603 "parser.yy"
    8813     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    8814     break;
    8815 
    8816   case 701:
    8817 
    8818 /* Line 1806 of yacc.c  */
    8819 #line 2605 "parser.yy"
    8820     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8821     break;
    8822 
    8823   case 702:
    8824 
    8825 /* Line 1806 of yacc.c  */
    8826 #line 2607 "parser.yy"
    8827     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    8828     break;
    8829 
    8830   case 703:
    8831 
    8832 /* Line 1806 of yacc.c  */
    8833 #line 2609 "parser.yy"
    8834     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    8835     break;
    8836 
    8837   case 704:
    8838 
    8839 /* Line 1806 of yacc.c  */
    8840 #line 2614 "parser.yy"
    8841     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    8842     break;
    8843 
    8844   case 705:
    8845 
    8846 /* Line 1806 of yacc.c  */
    8847 #line 2616 "parser.yy"
    8848     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    8849     break;
    8850 
    8851   case 706:
    8852 
    8853 /* Line 1806 of yacc.c  */
    8854 #line 2621 "parser.yy"
    8855     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    8856     break;
    8857 
    8858   case 707:
    8859 
    8860 /* Line 1806 of yacc.c  */
    8861 #line 2623 "parser.yy"
    8862     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    8863     break;
    8864 
    8865   case 709:
    8866 
    8867 /* Line 1806 of yacc.c  */
    8868 #line 2650 "parser.yy"
    8869     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    8870     break;
    8871 
    8872   case 713:
    8873 
    8874 /* Line 1806 of yacc.c  */
    8875 #line 2661 "parser.yy"
    8876     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    8877     break;
    8878 
    8879   case 714:
    8880 
    8881 /* Line 1806 of yacc.c  */
    8882 #line 2663 "parser.yy"
    8883     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    8884     break;
    8885 
    8886   case 715:
    8887 
    8888 /* Line 1806 of yacc.c  */
    8889 #line 2665 "parser.yy"
    8890     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    8891     break;
    8892 
    8893   case 716:
    8894 
    8895 /* Line 1806 of yacc.c  */
    8896 #line 2667 "parser.yy"
    8897     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    8898     break;
    8899 
    8900   case 717:
     8799  case 725:
     8800
     8801/* Line 1806 of yacc.c  */
     8802#line 2664 "parser.yy"
     8803    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     8804    break;
     8805
     8806  case 726:
    89018807
    89028808/* Line 1806 of yacc.c  */
    89038809#line 2669 "parser.yy"
    8904     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    8905     break;
    8906 
    8907   case 718:
     8810    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     8811    break;
     8812
     8813  case 727:
    89088814
    89098815/* Line 1806 of yacc.c  */
    89108816#line 2671 "parser.yy"
    8911     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    8912     break;
    8913 
    8914   case 719:
    8915 
    8916 /* Line 1806 of yacc.c  */
    8917 #line 2678 "parser.yy"
    8918     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8919     break;
    8920 
    8921   case 720:
    8922 
    8923 /* Line 1806 of yacc.c  */
    8924 #line 2680 "parser.yy"
    8925     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8926     break;
    8927 
    8928   case 721:
    8929 
    8930 /* Line 1806 of yacc.c  */
    8931 #line 2682 "parser.yy"
    8932     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    8933     break;
    8934 
    8935   case 722:
    8936 
    8937 /* Line 1806 of yacc.c  */
    8938 #line 2684 "parser.yy"
    8939     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8940     break;
    8941 
    8942   case 723:
    8943 
    8944 /* Line 1806 of yacc.c  */
    8945 #line 2686 "parser.yy"
    8946     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8947     break;
    8948 
    8949   case 724:
    8950 
    8951 /* Line 1806 of yacc.c  */
    8952 #line 2688 "parser.yy"
    8953     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    8954     break;
    8955 
    8956   case 725:
    8957 
    8958 /* Line 1806 of yacc.c  */
    8959 #line 2693 "parser.yy"
    8960     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    8961     break;
    8962 
    8963   case 726:
    8964 
    8965 /* Line 1806 of yacc.c  */
    8966 #line 2698 "parser.yy"
    8967     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    8968     break;
    8969 
    8970   case 727:
    8971 
    8972 /* Line 1806 of yacc.c  */
    8973 #line 2700 "parser.yy"
    89748817    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    89758818    break;
     
    89788821
    89798822/* Line 1806 of yacc.c  */
    8980 #line 2702 "parser.yy"
     8823#line 2673 "parser.yy"
    89818824    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    89828825    break;
     
    89858828
    89868829/* Line 1806 of yacc.c  */
    8987 #line 2726 "parser.yy"
     8830#line 2697 "parser.yy"
    89888831    { (yyval.en) = 0; }
    89898832    break;
     
    89928835
    89938836/* Line 1806 of yacc.c  */
    8994 #line 2728 "parser.yy"
     8837#line 2699 "parser.yy"
    89958838    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    89968839    break;
     
    89998842
    90008843/* Line 1806 of yacc.c  */
    9001 #line 9002 "Parser/parser.cc"
     8844#line 8845 "Parser/parser.cc"
    90028845      default: break;
    90038846    }
     
    92309073
    92319074/* Line 2067 of yacc.c  */
    9232 #line 2731 "parser.yy"
     9075#line 2702 "parser.yy"
    92339076
    92349077// ----end of grammar----
  • src/Parser/parser.h

    rb29f8f3 r1e8f143  
    246246
    247247/* Line 2068 of yacc.c  */
    248 #line 108 "parser.yy"
     248#line 107 "parser.yy"
    249249
    250250        Token tok;
  • src/Parser/parser.yy

    rb29f8f3 r1e8f143  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 16 16:25:12 2015
    13 // Update Count     : 1267
     12// Last Modified On : Fri Jul  3 13:53:45 2015
     13// Update Count     : 1220
    1414//
    1515
     
    5454#include "lex.h"
    5555#include "ParseNode.h"
    56 #include "TypeData.h"
    5756#include "LinkageSpec.h"
    5857
     
    228227%type<decl> variable_abstract_array variable_abstract_declarator variable_abstract_function
    229228%type<decl> variable_abstract_ptr variable_array variable_declarator variable_function variable_ptr
    230 
    231 %type<decl> attribute_list_opt attribute_list attribute
    232229
    233230// initializers
     
    623620labeled_statement:
    624621        no_attr_identifier ':' attribute_list_opt statement
    625                 {
    626                         $$ = $4->add_label( $1 );
    627                 }
     622                { $$ = $4->add_label( $1 );}
    628623        ;
    629624
     
    11871182        type_qualifier_name
    11881183        | attribute
    1189         //{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
     1184                { $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
    11901185        ;
    11911186
     
    20021997attribute_list_opt:                                                                             // GCC
    20031998        // empty
    2004                 { $$ = 0; }
    20051999        | attribute_list
    20062000        ;
     
    20092003        attribute
    20102004        | attribute_list attribute
    2011                 { $$ = $2->addQualifiers( $1 ); }
    20122005        ;
    20132006
    20142007attribute:                                                                                              // GCC
    20152008        ATTRIBUTE '(' '(' attribute_parameter_list ')' ')'
    2016         //              { $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
    2017                 { $$ = 0; }
    20182009        ;
    20192010
     
    20682059variable_declarator:
    20692060        paren_identifier attribute_list_opt
    2070                 { $$ = $1->addQualifiers( $2 ); }
    20712061        | variable_ptr
    20722062        | variable_array attribute_list_opt
    2073                 { $$ = $1->addQualifiers( $2 ); }
    20742063        | variable_function attribute_list_opt
    2075                 { $$ = $1->addQualifiers( $2 ); }
    20762064        ;
    20772065
     
    21202108function_declarator:
    21212109        function_no_ptr attribute_list_opt
    2122                 { $$ = $1->addQualifiers( $2 ); }
    21232110        | function_ptr
    21242111        | function_array attribute_list_opt
    2125                 { $$ = $1->addQualifiers( $2 ); }
    21262112        ;
    21272113
     
    22022188type_redeclarator:
    22032189        paren_type attribute_list_opt
    2204                 { $$ = $1->addQualifiers( $2 ); }
    22052190        | type_ptr
    22062191        | type_array attribute_list_opt
    2207                 { $$ = $1->addQualifiers( $2 ); }
    22082192        | type_function attribute_list_opt
    2209                 { $$ = $1->addQualifiers( $2 ); }
    22102193        ;
    22112194
     
    22522235identifier_parameter_declarator:
    22532236        paren_identifier attribute_list_opt
    2254                 { $$ = $1->addQualifiers( $2 ); }
    22552237        | identifier_parameter_ptr
    22562238        | identifier_parameter_array attribute_list_opt
    2257                 { $$ = $1->addQualifiers( $2 ); }
    22582239        | identifier_parameter_function attribute_list_opt
    2259                 { $$ = $1->addQualifiers( $2 ); }
    22602240        ;
    22612241
     
    23172297type_parameter_redeclarator:
    23182298        typedef attribute_list_opt
    2319                 { $$ = $1->addQualifiers( $2 ); }
    23202299        | type_parameter_ptr
    23212300        | type_parameter_array attribute_list_opt
    2322                 { $$ = $1->addQualifiers( $2 ); }
    23232301        | type_parameter_function attribute_list_opt
    2324                 { $$ = $1->addQualifiers( $2 ); }
    23252302        ;
    23262303
     
    23732350        abstract_ptr
    23742351        | abstract_array attribute_list_opt
    2375                 { $$ = $1->addQualifiers( $2 ); }
    23762352        | abstract_function attribute_list_opt
    2377                 { $$ = $1->addQualifiers( $2 ); }
    23782353        ;
    23792354
     
    24422417        abstract_parameter_ptr
    24432418        | abstract_parameter_array attribute_list_opt
    2444                 { $$ = $1->addQualifiers( $2 ); }
    24452419        | abstract_parameter_function attribute_list_opt
    2446                 { $$ = $1->addQualifiers( $2 ); }
    24472420        ;
    24482421
     
    25202493        variable_abstract_ptr
    25212494        | variable_abstract_array attribute_list_opt
    2522                 { $$ = $1->addQualifiers( $2 ); }
    25232495        | variable_abstract_function attribute_list_opt
    2524                 { $$ = $1->addQualifiers( $2 ); }
    25252496        ;
    25262497
  • src/ResolvExpr/Resolver.cc

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 12:17:01 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 15 14:54:04 2015
    13 // Update Count     : 167
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Fri Jul  3 16:18:20 2015
     13// Update Count     : 159
    1414//
    1515
     
    226226
    227227        void Resolver::visit( ForStmt *forStmt ) {
    228                 SymTab::Indexer::visit( forStmt );
    229 
     228            // SymTab::Indexer::visit( forStmt );
     229                Expression *newExpr;
     230            // for statements introduce a level of scope
     231            enterScope();
     232            maybeAccept( forStmt->get_initialization(), *this );
    230233                if ( forStmt->get_condition() ) {
    231                         Expression * newExpr = findSingleExpression( forStmt->get_condition(), *this );
     234                        newExpr = findSingleExpression( forStmt->get_condition(), *this );
    232235                        delete forStmt->get_condition();
    233236                        forStmt->set_condition( newExpr );
    234237                } // if
    235                
     238 
    236239                if ( forStmt->get_increment() ) {
    237                         Expression * newExpr = findVoidExpression( forStmt->get_increment(), *this );
     240                        newExpr = findVoidExpression( forStmt->get_increment(), *this );
    238241                        delete forStmt->get_increment();
    239242                        forStmt->set_increment( newExpr );
    240243                } // if
     244
     245            maybeAccept( forStmt->get_condition(), *this );
     246            maybeAccept( forStmt->get_increment(), *this );
     247            maybeAccept( forStmt->get_body(), *this );
     248            leaveScope();
    241249        }
    242250
  • src/SymTab/AddVisit.h

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 16:14:32 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Jul 14 12:26:17 2015
    13 // Update Count     : 4
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Sun May 17 16:16:38 2015
     13// Update Count     : 3
    1414//
    1515
     
    5757        inline void addVisit(ForStmt *forStmt, Visitor &visitor) {
    5858                addVisitStatement( forStmt->get_body(), visitor );
    59                 acceptAll( forStmt->get_initialization(), visitor );
     59                maybeAccept( forStmt->get_initialization(), visitor );
    6060                maybeAccept( forStmt->get_condition(), visitor );
    6161                maybeAccept( forStmt->get_increment(), visitor );
  • src/SymTab/TypeEquality.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Tue Jul 07 16:28:29 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Jul 20 14:16:11 2015
    13 // Update Count     : 37
     12// Last Modified On : Thu Jul 09 11:18:46 2015
     13// Update Count     : 36
    1414//
    1515
     
    9191                        // and must both have a dimension expression or not have a dimension
    9292                        result = result && arrayType->get_isVarLen() == at->get_isVarLen()
    93                                 && ((arrayType->get_dimension() != 0 && at->get_dimension() != 0)
    94                                         || (arrayType->get_dimension() == 0 && at->get_dimension() == 0));
     93                                && (arrayType->get_dimension() != 0 && at->get_dimension() != 0
     94                                        || arrayType->get_dimension() == 0 && at->get_dimension() == 0);
    9595
    9696                        if ( vlaErr ) {
  • src/SymTab/Validate.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 22 13:16:00 2015
    13 // Update Count     : 194
     12// Last Modified On : Mon Jul 13 14:38:19 2015
     13// Update Count     : 184
    1414//
    1515
     
    169169                virtual TypeDecl *mutate( TypeDecl *typeDecl );
    170170                virtual DeclarationWithType *mutate( FunctionDecl *funcDecl );
    171                 virtual DeclarationWithType *mutate( ObjectDecl *objDecl );
     171                virtual ObjectDecl *mutate( ObjectDecl *objDecl );
    172172                virtual CompoundStmt *mutate( CompoundStmt *compoundStmt );
    173173                virtual Type *mutate( TypeInstType *aggregateUseType );
     
    203203        void validateType( Type *type, const Indexer *indexer ) {
    204204                Pass1 pass1;
    205                 Pass2 pass2( false, indexer );
    206205                Pass3 pass3( indexer );
    207206                type->accept( pass1 );
    208                 type->accept( pass2 );
    209207                type->accept( pass3 );
    210208        }
     
    405403                        } // for
    406404                } // for
    407 
    408                 if ( ctx->get_parameters().size() != contextInst->get_parameters().size() ) {
    409                         throw SemanticError( "incorrect number of context parameters: ", contextInst );
    410                 } // if
    411 
    412405                applySubstitution( ctx->get_parameters().begin(), ctx->get_parameters().end(), contextInst->get_parameters().begin(), ctx->get_members().begin(), ctx->get_members().end(), back_inserter( contextInst->get_members() ) );
    413406        }
     
    541534                init->get_args().push_back( new NameExpr( "0" ) );
    542535                Statement *initStmt = new ExprStmt( noLabels, init );
    543                 std::list<Statement *> initList;
    544                 initList.push_back( initStmt );
    545536 
    546537                UntypedExpr *cond = new UntypedExpr( new NameExpr( "?<?" ) );
     
    568559                assignExpr->get_args().push_back( srcIndex );
    569560 
    570                 *out++ = new ForStmt( noLabels, initList, cond, inc, new ExprStmt( noLabels, assignExpr ) );
     561                *out++ = new ForStmt( noLabels, initStmt, cond, inc, new ExprStmt( noLabels, assignExpr ) );
    571562        }
    572563
     
    621612                        delete assigns.front();
    622613                        assigns.pop_front();
    623                 } // for
     614                }
    624615
    625616                declsToAdd.insert( declsToAdd.begin(), assigns.begin(), assigns.end() );
     
    836827                                rtt->get_parameters().clear();
    837828                                cloneAll(typeInst->get_parameters(), rtt->get_parameters());
    838                         } // if
     829                        }
    839830                        delete typeInst;
    840831                        return ret;
     
    890881        }
    891882
    892         DeclarationWithType *EliminateTypedef::mutate( ObjectDecl * objDecl ) {
     883        ObjectDecl *EliminateTypedef::mutate( ObjectDecl * objDecl ) {
    893884                TypedefMap oldNames = typedefNames;
    894                 DeclarationWithType *ret = Mutator::mutate( objDecl );
    895                 if ( FunctionType *funtype = dynamic_cast<FunctionType *>( ret->get_type() ) ) {
    896                         return new FunctionDecl( ret->get_name(), ret->get_storageClass(), ret->get_linkage(), funtype, 0, ret->get_isInline(), ret->get_isNoreturn() );
    897                 } else if ( objDecl->get_isInline() || objDecl->get_isNoreturn() ) {
    898                         throw SemanticError( "invalid inline or _Noreturn specification in declaration of ", objDecl );
    899                 } // if
     885                ObjectDecl *ret = Mutator::mutate( objDecl );
    900886                typedefNames = oldNames;
    901887                return ret;
  • src/SynTree/Declaration.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul 13 17:58:38 2015
    13 // Update Count     : 10
     12// Last Modified On : Sat Jun 13 08:07:20 2015
     13// Update Count     : 9
    1414//
    1515
     
    2727
    2828Declaration::Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage )
    29                 : name( name ), storageClass( sc ), linkage( linkage ), isInline( false ), isNoreturn( false ), uniqueId( 0 ) {
     29                : name( name ), storageClass( sc ), linkage( linkage ), uniqueId( 0 ) {
    3030}
    3131
    3232Declaration::Declaration( const Declaration &other )
    33         : name( other.name ), storageClass( other.storageClass ), linkage( other.linkage ), isInline( other.isInline ), isNoreturn( other.isNoreturn ), uniqueId( other.uniqueId ) {
     33                : name( other.name ), storageClass( other.storageClass ), linkage( other.linkage ), uniqueId( other.uniqueId ) {
    3434}
    3535
  • src/SynTree/Declaration.h

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul 13 18:15:59 2015
    13 // Update Count     : 28
     12// Last Modified On : Sat Jun 13 09:10:31 2015
     13// Update Count     : 25
    1414//
    1515
     
    3535        LinkageSpec::Type get_linkage() const { return linkage; }
    3636        void set_linkage( LinkageSpec::Type newValue ) { linkage = newValue; }
    37         bool get_isInline() const { return isInline; }
    38         void set_isInline( bool newValue ) { isInline = newValue; }
    39         bool get_isNoreturn() const { return isNoreturn; }
    40         void set_isNoreturn( bool newValue ) { isNoreturn = newValue; }
    4137        UniqueId get_uniqueId() const { return uniqueId; }
    4238
     
    5450        DeclarationNode::StorageClass storageClass;
    5551        LinkageSpec::Type linkage;
    56         bool isInline, isNoreturn;
    5752        UniqueId uniqueId;
    5853};
     
    8075        typedef DeclarationWithType Parent;
    8176  public:
    82         ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline = false, bool isNoreturn = false );
     77        ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init );
    8378        ObjectDecl( const ObjectDecl &other );
    8479        virtual ~ObjectDecl();
     
    9489        virtual ObjectDecl *clone() const { return new ObjectDecl( *this ); }
    9590        virtual void accept( Visitor &v ) { v.visit( this ); }
    96         virtual DeclarationWithType *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     91        virtual ObjectDecl *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    9792        virtual void print( std::ostream &os, int indent = 0 ) const;
    9893        virtual void printShort( std::ostream &os, int indent = 0 ) const;
     
    117112        CompoundStmt *get_statements() const { return statements; }
    118113        void set_statements( CompoundStmt *newValue ) { statements = newValue; }
     114        bool get_isInline() const { return isInline; }
     115        bool get_isNoreturn() const { return isNoreturn; }
    119116        std::list< std::string >& get_oldIdents() { return oldIdents; }
    120117        std::list< Declaration* >& get_oldDecls() { return oldDecls; }
     
    128125        FunctionType *type;
    129126        CompoundStmt *statements;
     127        bool isInline, isNoreturn;
    130128        std::list< std::string > oldIdents;
    131129        std::list< Declaration* > oldDecls;
  • src/SynTree/FunctionDecl.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul 13 18:11:44 2015
    13 // Update Count     : 19
     12// Last Modified On : Sat Jun 13 09:10:32 2015
     13// Update Count     : 16
    1414//
    1515
     
    2222
    2323FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn )
    24                 : Parent( name, sc, linkage ), type( type ), statements( statements ) {
    25         set_isInline( isInline );
    26         set_isNoreturn( isNoreturn );
     24                : Parent( name, sc, linkage ), type( type ), statements( statements ), isInline( isInline ), isNoreturn( isNoreturn ) {
    2725        // this is a brazen hack to force the function "main" to have C linkage
    2826        if ( name == "main" ) {
     
    3230
    3331FunctionDecl::FunctionDecl( const FunctionDecl &other )
    34         : Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
     32        : Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ), isInline( other.isInline ), isNoreturn( other.isNoreturn ) {
    3533}
    3634
     
    5957                os << LinkageSpec::toString( get_linkage() ) << " ";
    6058        } // if
    61         if ( get_isInline() ) {
     59        if ( isInline ) {
    6260                os << "inline ";
    6361        } // if
    64         if ( get_isNoreturn() ) {
     62        if ( isNoreturn ) {
    6563                os << "_Noreturn ";
    6664        } // if
     
    9896                os << get_name() << ": ";
    9997        } // if
    100         if ( get_isInline() ) {
     98        if ( isInline ) {
    10199                os << "inline ";
    102100        } // if
    103         if ( get_isNoreturn() ) {
     101        if ( isNoreturn ) {
    104102                os << "_Noreturn ";
    105103        } // if
  • src/SynTree/Mutator.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 16 16:10:54 2015
    13 // Update Count     : 3
     12// Last Modified On : Mon May 18 10:10:46 2015
     13// Update Count     : 1
    1414//
    1515
     
    2828Mutator::~Mutator() {}
    2929
    30 DeclarationWithType *Mutator::mutate( ObjectDecl *objectDecl ) {
     30ObjectDecl *Mutator::mutate( ObjectDecl *objectDecl ) {
    3131        objectDecl->set_type( maybeMutate( objectDecl->get_type(), *this ) );
    3232        objectDecl->set_init( maybeMutate( objectDecl->get_init(), *this ) );
     
    109109
    110110Statement *Mutator::mutate( ForStmt *forStmt ) {
    111         mutateAll( forStmt->get_initialization(), *this );
     111        forStmt->set_initialization( maybeMutate( forStmt->get_initialization(), *this ) );
    112112        forStmt->set_condition( maybeMutate( forStmt->get_condition(), *this ) );
    113113        forStmt->set_increment( maybeMutate( forStmt->get_increment(), *this ) );
  • src/SynTree/Mutator.h

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul 13 18:14:47 2015
    13 // Update Count     : 5
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Fri May 29 16:34:08 2015
     13// Update Count     : 4
    1414//
    1515#include <cassert>
     
    2626        virtual ~Mutator();
    2727  public:
    28         virtual DeclarationWithType* mutate( ObjectDecl *objectDecl );
     28        virtual ObjectDecl* mutate( ObjectDecl *objectDecl );
    2929        virtual DeclarationWithType* mutate( FunctionDecl *functionDecl );
    3030        virtual Declaration* mutate( StructDecl *aggregateDecl );
  • src/SynTree/ObjectDecl.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul 13 18:08:27 2015
    13 // Update Count     : 16
     12// Last Modified On : Sat Jun 13 08:10:16 2015
     13// Update Count     : 15
    1414//
    1515
     
    2020#include "utility.h"
    2121
    22 ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline, bool isNoreturn )
     22ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init )
    2323        : Parent( name, sc, linkage ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
    24         set_isInline( isInline );
    25         set_isNoreturn( isNoreturn );
    2624}
    2725
  • src/SynTree/Statement.cc

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 15 14:57:40 2015
    13 // Update Count     : 27
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon Jun 29 17:37:10 2015
     13// Update Count     : 22
    1414//
    1515
     
    192192}
    193193
    194 ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization_, Expression *condition_, Expression *increment_, Statement *body_ ):
     194ForStmt::ForStmt( std::list<Label> labels, Statement *initialization_, Expression *condition_, Expression *increment_, Statement *body_ ):
    195195        Statement( labels ), initialization( initialization_ ), condition( condition_ ), increment( increment_ ), body( body_ ) {
    196196}
    197197
    198198ForStmt::~ForStmt() {
    199         deleteAll( initialization );
     199        delete initialization;
    200200        delete condition;
    201201        delete increment;
     
    213213
    214214        os << string( indent + 2, ' ' ) << "initialization: \n";
    215         for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) {
    216                 (*it)->print( os, indent + 4 );
    217         }
     215        if ( initialization != 0 )
     216                initialization->print( os, indent + 4 );
    218217
    219218        os << "\n" << string( indent + 2, ' ' ) << "condition: \n";
  • src/SynTree/Statement.h

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Jul 14 12:14:54 2015
    13 // Update Count     : 24
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jun 23 11:44:27 2015
     13// Update Count     : 20
    1414//
    1515
     
    199199class ForStmt : public Statement {
    200200  public:
    201         ForStmt( std::list<Label> labels, std::list<Statement *> initialization,
     201        ForStmt( std::list<Label> labels, Statement *initialization = 0,
    202202             Expression *condition = 0, Expression *increment = 0, Statement *body = 0 );
    203203        virtual ~ForStmt();
    204204
    205         std::list<Statement *> &get_initialization() { return initialization; }
    206         void set_initialization( std::list<Statement *> newValue ) { initialization = newValue; }
     205        Statement *get_initialization() { return initialization; }
     206        void set_initialization( Statement *newValue ) { initialization = newValue; }
    207207        Expression *get_condition() { return condition; }
    208208        void set_condition( Expression *newValue ) { condition = newValue; }
     
    217217        virtual void print( std::ostream &os, int indent = 0 ) const;
    218218  private:
    219         std::list<Statement *> initialization;
     219        Statement *initialization;
    220220        Expression *condition;
    221221        Expression *increment;
  • src/SynTree/Type.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul  9 16:45:13 2015
    13 // Update Count     : 3
     12// Last Modified On : Tue May 19 16:52:27 2015
     13// Update Count     : 2
    1414//
    1515
     
    7575                os << "_Atomic ";
    7676        } // if
    77         if ( tq.isAttribute ) {
    78                 os << "__attribute(( )) ";
    79         } // if
    8077}
    8178
  • src/SynTree/Type.h

    rb29f8f3 r1e8f143  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul  9 16:46:15 2015
    13 // Update Count     : 14
     12// Last Modified On : Fri Jun 26 16:47:54 2015
     13// Update Count     : 13
    1414//
    1515
     
    2525        struct Qualifiers { 
    2626                Qualifiers(): isConst( false ), isVolatile( false ), isRestrict( false ), isLvalue( false ), isAtomic( false ), isAttribute( false ) {}
    27                 Qualifiers( bool isConst, bool isVolatile, bool isRestrict, bool isLvalue, bool isAtomic, bool isAttribute ): isConst( isConst ), isVolatile( isVolatile ), isRestrict( isRestrict ), isLvalue( isLvalue ), isAtomic( isAtomic ), isAttribute( isAttribute ) {}
     27                Qualifiers( bool isConst, bool isVolatile, bool isRestrict, bool isLvalue, bool isAtomic, bool isAttribute): isConst( isConst ), isVolatile( isVolatile ), isRestrict( isRestrict ), isLvalue( isLvalue ), isAtomic( isAtomic ), isAttribute( isAttribute ) {}
    2828       
    2929                Qualifiers &operator+=( const Qualifiers &other );
  • src/SynTree/Visitor.cc

    rb29f8f3 r1e8f143  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Jul 14 12:31:03 2015
    13 // Update Count     : 3
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon May 18 11:14:51 2015
     13// Update Count     : 2
    1414//
    1515
     
    9494
    9595void Visitor::visit( ForStmt *forStmt ) {
    96         acceptAll( forStmt->get_initialization(), *this );
     96        // ForStmt still needs to be fixed
     97        maybeAccept( forStmt->get_initialization(), *this );
    9798        maybeAccept( forStmt->get_condition(), *this );
    9899        maybeAccept( forStmt->get_increment(), *this );
  • src/driver/cc1.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Fri Aug 26 14:23:51 2005
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 16 17:09:14 2015
    13 // Update Count     : 54
     12// Last Modified On : Sat May 30 08:58:29 2015
     13// Update Count     : 51
    1414//
    1515
     
    319319                uargs[0] = ( *new string( bprefix + "/cfa-cpp" ) ).c_str();
    320320
     321                uargs[nuargs] = "-p";
     322                nuargs += 1;
     323
    321324                uargs[nuargs] = tmpname;
    322325                nuargs += 1;
  • src/driver/cfa.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 16 17:09:23 2015
    13 // Update Count     : 124
     12// Last Modified On : Tue Jun 23 17:47:03 2015
     13// Update Count     : 119
    1414//
    1515
     
    5252        string Version( VERSION );                                                      // current version number from CONFIG
    5353        string Major( "0" ), Minor( "0" ), Patch( "0" );        // default version numbers
    54 
    5554        int posn1 = Version.find( "." );                                        // find the divider between major and minor version numbers
    5655        if ( posn1 == -1 ) {                                                            // not there ?
     
    257256        // add the correct set of flags based on the type of compile this is
    258257
    259         args[nargs] = ( *new string( string("-D__CFA__=") + Major ) ).c_str();
     258        args[nargs] = ( *new string( string("-D__CFA_MAJOR__=") + Major ) ).c_str();
    260259        nargs += 1;
    261260        args[nargs] = ( *new string( string("-D__CFA_MINOR__=") + Minor ) ).c_str();
    262         nargs += 1;
    263         args[nargs] = ( *new string( string("-D__CFA_PATCHLEVEL__=") + Patch ) ).c_str();
    264261        nargs += 1;
    265262
  • src/main.cc

    rb29f8f3 r1e8f143  
    1010// Created On       : Fri May 15 23:12:02 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 15 16:45:24 2015
    13 // Update Count     : 145
     12// Last Modified On : Mon Jul 06 15:01:26 2015
     13// Update Count     : 79
    1414//
    1515
     
    5454        if ( errorp ) std::cerr << x << std::endl;
    5555
    56 static void parse( FILE * input, LinkageSpec::Type t, bool shouldExit = false );
    57 static void dump( std::list< Declaration * > & translationUnit );
     56void parse( FILE * input, LinkageSpec::Type t, bool shouldExit = false );
    5857
    5958bool
     
    6564        libcfap = false,
    6665        nopreludep = false,
    67         noprotop = false,
     66        protop = false,
    6867        parsep = false,
    6968        resolvep = false,                                                                       // used in AlternativeFinder
     
    8281        { "grammar", no_argument, 0, Grammar },
    8382        { "libcfa", no_argument, 0, LibCFA },
    84         { "no-preamble", no_argument, 0, Nopreamble },
     83        { "nopreamble", no_argument, 0, Nopreamble },
    8584        { "parse", no_argument, 0, Parse },
    86         { "no-prototypes", no_argument, 0, Prototypes },
     85        { "prototypes", no_argument, 0, Prototypes },
    8786        { "resolver", no_argument, 0, Resolver },
    8887        { "symbol", no_argument, 0, Symbol },
     
    132131                  case Prototypes:
    133132                  case 'p':                                                                             // generate prototypes for preamble functions
    134                         noprotop = true;
     133                        protop = true;
    135134                        break;
    136135                  case Parse:
     
    222221                Parser::get_parser().freeTree();
    223222                if ( astp ) {
    224                         dump( translationUnit );
     223                        printAll( translationUnit, std::cout );
    225224                        return 0;
    226225                } // if
     
    243242
    244243                if ( validp ) {
    245                         dump( translationUnit );
     244                        printAll( translationUnit, std::cout );
    246245                        return 0;
    247246                } // if
     
    253252
    254253                if ( libcfap ) {
     254                        protop = true;
    255255                        // generate the bodies of cfa library functions
    256256                        LibCfa::makeLibCfa( translationUnit );
     
    258258
    259259                if ( bresolvep ) {
    260                         dump( translationUnit );
     260                        printAll( translationUnit, std::cout );
    261261                        return 0;
    262262                } // if
     
    265265                ResolvExpr::resolve( translationUnit );
    266266                if ( exprp ) {
    267                         dump( translationUnit );
     267                        printAll( translationUnit, std::cout );
    268268                }
    269269
     
    279279                // print tree right before code generation
    280280                if ( codegenp ) {
    281                         dump( translationUnit );
    282                         return 0;
    283                 } // if
    284 
    285                 CodeGen::generate( translationUnit, *output, ! noprotop );
     281                        printAll( translationUnit, std::cout );
     282                        return 0;
     283                } // if
     284
     285                CodeGen::generate( translationUnit, *output, true ); //protop );
    286286
    287287                if ( output != &std::cout ) {
     
    290290        } catch ( SemanticError &e ) {
    291291                if ( errorp ) {
    292                         dump( translationUnit );
     292                        printAll( translationUnit, std::cerr );
    293293                }
    294294                e.print( std::cerr );
     
    315315} // main
    316316
    317 static void parse( FILE * input, LinkageSpec::Type linkage, bool shouldExit ) {
     317void parse( FILE * input, LinkageSpec::Type linkage, bool shouldExit ) {
    318318        Parser::get_parser().set_linkage( linkage );
    319319        Parser::get_parser().parse( input );
     
    325325}
    326326
    327 static bool notPrelude( Declaration * decl ) {
    328         return ! LinkageSpec::isBuiltin( decl->get_linkage() );
    329 }
    330 
    331 static void dump( std::list< Declaration * > & translationUnit ) {
    332         std::list< Declaration * > decls;
    333         if ( noprotop ) {
    334                 filter( translationUnit.begin(), translationUnit.end(),
    335                                 std::back_inserter( decls ), notPrelude );
    336         } else {
    337                 decls = translationUnit;
    338         }
    339 
    340         printAll( decls, std::cout );
    341 }
    342 
    343 
    344327// Local Variables: //
    345328// tab-width: 4 //
Note: See TracChangeset for help on using the changeset viewer.