Changeset 39f04ec


Ignore:
Timestamp:
Jul 5, 2016, 11:10:14 AM (8 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
9bb81bb8
Parents:
a43e1d7 (diff), d32c4e2 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Location:
src
Files:
2 added
23 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    ra43e1d7 r39f04ec  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun  9 13:21:00 2016
    13 // Update Count     : 256
     12// Last Modified On : Mon Jul  4 20:38:32 2016
     13// Update Count     : 300
    1414//
    1515
     
    4747                        dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * > ( stmt ) || dynamic_cast< SwitchStmt *>( stmt );
    4848        }
     49
     50        void CodeGenerator::extension( Expression *expr ) {
     51                if ( expr->get_extension() ) {
     52                        output << "__extension__ ";
     53                } // if
     54        } // extension
     55
     56        void CodeGenerator::extension( Declaration *decl ) {
     57                if ( decl->get_extension() ) {
     58                        output << "__extension__ ";
     59                } // if
     60        } // extension
    4961
    5062        ostream & CodeGenerator::Indenter::operator()( ostream & output ) const {
     
    110122        //*** Declarations
    111123        void CodeGenerator::visit( FunctionDecl *functionDecl ) {
     124                extension( functionDecl );
    112125                genAttributes( functionDecl->get_attributes() );
    113126
     
    134147
    135148        void CodeGenerator::visit( ObjectDecl *objectDecl ) {
     149                extension( objectDecl );
    136150                handleStorageClass( objectDecl );
    137151                output << genType( objectDecl->get_type(), mangleName( objectDecl ) );
     
    170184
    171185        void CodeGenerator::visit( StructDecl *structDecl ) {
     186                extension( structDecl );
    172187                output << "struct ";
    173188                handleAggregate( structDecl );
    174189        }
    175190
    176         void CodeGenerator::visit( UnionDecl *aggregateDecl ) {
     191        void CodeGenerator::visit( UnionDecl *unionDecl ) {
     192                extension( unionDecl );
    177193                output << "union ";
    178                 handleAggregate( aggregateDecl );
    179         }
    180 
    181         void CodeGenerator::visit( EnumDecl *aggDecl ) {
     194                handleAggregate( unionDecl );
     195        }
     196
     197        void CodeGenerator::visit( EnumDecl *enumDecl ) {
     198                extension( enumDecl );
    182199                output << "enum ";
    183200
    184                 if ( aggDecl->get_name() != "" )
    185                         output << aggDecl->get_name();
    186 
    187                 std::list< Declaration* > &memb = aggDecl->get_members();
     201                if ( enumDecl->get_name() != "" )
     202                        output << enumDecl->get_name();
     203
     204                std::list< Declaration* > &memb = enumDecl->get_members();
    188205
    189206                if ( ! memb.empty() ) {
     
    208225        }
    209226
    210         void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}
     227        void CodeGenerator::visit( TraitDecl *traitDecl ) {}
    211228
    212229        void CodeGenerator::visit( TypedefDecl *typeDecl ) {
    213                 output << "typedef ";
    214                 output << genType( typeDecl->get_base(), typeDecl->get_name() );
     230                assert( false && "Typedefs are removed and substituted in earlier passes." );
     231                //output << "typedef ";
     232                //output << genType( typeDecl->get_base(), typeDecl->get_name() );
    215233        }
    216234
     
    218236                // really, we should mutate this into something that isn't a TypeDecl but that requires large-scale changes,
    219237                // still to be done
     238                extension( typeDecl );
    220239                output << "extern unsigned long " << typeDecl->get_name();
    221240                if ( typeDecl->get_base() ) {
     
    251270                output << "{ ";
    252271                if ( init->begin_initializers() == init->end_initializers() ) {
    253                         // illegal to leave initializer list empty for scalar initializers,
    254                         // but always legal to have 0
     272                        // illegal to leave initializer list empty for scalar initializers, but always legal to have 0
    255273                        output << "0";
    256274                } else {
     
    317335                                  case OT_DTOR:
    318336                                        if ( applicationExpr->get_args().size() == 1 ) {
    319                                                 // the expression fed into a single parameter constructor or destructor
    320                                                 // may contain side effects, so must still output this expression
     337                                                // the expression fed into a single parameter constructor or destructor may contain side
     338                                                // effects, so must still output this expression
    321339                                                output << "(";
    322340                                                (*arg++)->accept( *this );
     
    403421                                  case OT_DTOR:
    404422                                        if ( untypedExpr->get_args().size() == 1 ) {
    405                                                 // the expression fed into a single parameter constructor or destructor
    406                                                 // may contain side effects, so must still output this expression
     423                                                // the expression fed into a single parameter constructor or destructor may contain side
     424                                                // effects, so must still output this expression
    407425                                                output << "(";
    408426                                                (*arg++)->accept( *this );
     
    500518                        output << ")";
    501519                } else {
    502                         // otherwise, the cast is to an lvalue type, so the cast
    503                         // should be dropped, since the result of a cast is
     520                        // otherwise, the cast is to an lvalue type, so the cast should be dropped, since the result of a cast is
    504521                        // never an lvalue in C
    505522                }
     
    546563
    547564        void CodeGenerator::visit( AlignofExpr *alignofExpr ) {
     565                // use GCC extension to avoid bumping std to C11
    548566                extension( alignofExpr );
    549                 // use GCC extension to avoid bumping std to C11
    550567                output << "__alignof__(";
    551568                if ( alignofExpr->get_isType() ) {
     
    558575
    559576        void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) {
    560                 assert( false && "UntypedOffsetofExpr should not reach code generation" );
     577                assert( false && "UntypedOffsetofExpr should not reach code generation." );
    561578        }
    562579
    563580        void CodeGenerator::visit( OffsetofExpr *offsetofExpr ) {
    564                 extension( offsetofExpr );
    565581                // use GCC builtin
    566582                output << "__builtin_offsetof(";
     
    571587
    572588        void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {
    573                 assert( false && "OffsetPackExpr should not reach code generation" );
     589                assert( false && "OffsetPackExpr should not reach code generation." );
    574590        }
    575591
     
    612628
    613629        void CodeGenerator::visit( AsmExpr *asmExpr ) {
    614                 extension( asmExpr );
    615630                if ( asmExpr->get_inout() ) {
    616631                        output << "[ ";
     
    777792
    778793        void CodeGenerator::visit( ForStmt *forStmt ) {
    779                 // initialization is always hoisted, so don't
    780                 // bother doing anything with that
     794                // initialization is always hoisted, so don't bother doing anything with that
    781795                output << "for (;";
    782796
  • src/CodeGen/CodeGenerator.h

    ra43e1d7 r39f04ec  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun  9 13:15:58 2016
    13 // Update Count     : 29
     12// Last Modified On : Mon Jul  4 17:12:40 2016
     13// Update Count     : 34
    1414//
    1515
     
    104104                };
    105105
    106                 void extension( Expression *expr ) {
    107                         if ( expr->get_extension() ) {
    108                                 output << "__extension__ ";
    109                         } // if
    110                 } // extension
     106                void extension( Expression *expr );
     107                void extension( Declaration *decl );
    111108          private:
    112109
     
    121118                void handleAggregate( AggregateDecl *aggDecl );
    122119                void handleTypedef( NamedTypeDecl *namedType );
    123 
    124120        };
    125121
  • src/ControlStruct/CaseRangeMutator.cc

    ra43e1d7 r39f04ec  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 25 21:22:40 2016
    13 // Update Count     : 4
     12// Last Modified On : Thu Jun 30 13:28:55 2016
     13// Update Count     : 8
    1414//
    1515
  • src/GenPoly/Box.cc

    ra43e1d7 r39f04ec  
    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 : Fri May 13 14:51:21 2016
    13 // Update Count     : 295
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Jun 29 21:43:03 2016
     13// Update Count     : 296
    1414//
    1515
     
    22942294                                // all union members are at offset zero
    22952295                                delete offsetofExpr;
    2296                                 return new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::string("0") ) );
     2296                                return new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), "0" ) );
    22972297                        } else return offsetofExpr;
    22982298                }
  • src/GenPoly/GenPoly.cc

    ra43e1d7 r39f04ec  
    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 May 25 13:39:21 2016
    13 // Update Count     : 13
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Jun 29 21:45:53 2016
     13// Update Count     : 14
    1414//
    1515
     
    7878                type = replaceTypeInst( type, env );
    7979
    80                 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) {
     80                if ( dynamic_cast< TypeInstType * >( type ) ) {
    8181                        return type;
    8282                } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
  • src/InitTweak/FixGlobalInit.cc

    ra43e1d7 r39f04ec  
    99// Author           : Rob Schluntz
    1010// Created On       : Mon May 04 15:14:56 2016
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Fri May 13 11:37:30 2016
    13 // Update Count     : 2
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Jun 29 22:33:15 2016
     13// Update Count     : 4
    1414//
    1515
     
    8585                        init->accept( checker );
    8686                        return checker.isConstExpr;
    87                 }
     87                } // if
    8888                // for all intents and purposes, no initializer means const expr
    8989                return true;
     
    9898                } else {
    9999                        translationUnit.push_back( fixer.initFunction );
    100                 }
     100                } // if
     101
    101102                if ( fixer.destroyFunction->get_statements()->get_kids().empty() ) {
    102103                        delete fixer.destroyFunction;
    103104                } else {
    104105                        translationUnit.push_back( fixer.destroyFunction );
    105                 }
     106                } // if
    106107        }
    107108
     
    146147                // if ( isConstExpr( objDecl->get_init() ) ) return;
    147148
    148                 if ( ArrayType * at = dynamic_cast< ArrayType * > ( objDecl->get_type() ) ) {
     149                if ( dynamic_cast< ArrayType * > ( objDecl->get_type() ) ) {
    149150                        // xxx - initialize each element of the array
    150151                } else {
     
    164165                        destroy->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
    165166                        destroyStatements.push_front( new ImplicitCtorDtorStmt( new ExprStmt( noLabels, destroy ) ) );
    166                 }
     167                } // if
    167168        }
    168169
  • src/InitTweak/FixInit.cc

    ra43e1d7 r39f04ec  
    449449                                                FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + "_dtor_atexit", DeclarationNode::NoStorageClass, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );
    450450                                                dtorCaller->fixUniqueId();
    451                                                 dtorCaller->get_statements()->get_kids().push_back( ctorInit->get_dtor() );
     451                                                dtorCaller->get_statements()->get_kids().push_back( ctorInit->get_dtor()->clone() );
    452452
    453453                                                // on_exit(dtor_atexit);
  • src/Parser/DeclarationNode.cc

    ra43e1d7 r39f04ec  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 12:34:05 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 14 15:38:09 2016
    13 // Update Count     : 161
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Jun 30 14:39:51 2016
     13// Update Count     : 163
    1414//
    1515
     
    855855Declaration *DeclarationNode::build() const {
    856856        if ( type ) {
    857                 Declaration *newDecl = type->buildDecl( name, buildStorageClass(), maybeBuild< Expression >( bitfieldWidth ), buildFuncSpecifier( Inline ), buildFuncSpecifier( Noreturn ), linkage, maybeBuild< Initializer >(initializer) );
    858                 return newDecl;
     857                return type->buildDecl( name, buildStorageClass(), maybeBuild< Expression >( bitfieldWidth ), buildFuncSpecifier( Inline ), buildFuncSpecifier( Noreturn ), linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
    859858        } // if
    860859        if ( ! buildFuncSpecifier( Inline ) && ! buildFuncSpecifier( Noreturn ) ) {
    861                 return new ObjectDecl( name, buildStorageClass(), linkage, maybeBuild< Expression >( bitfieldWidth ), 0, maybeBuild< Initializer >( initializer ) );
     860                return (new ObjectDecl( name, buildStorageClass(), linkage, maybeBuild< Expression >( bitfieldWidth ), 0, maybeBuild< Initializer >( initializer ) ))->set_extension( extension );
    862861        } // if
    863862        throw SemanticError( "invalid function specifier in declaration of ", this );
  • src/Parser/ExpressionNode.cc

    ra43e1d7 r39f04ec  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun 13 14:46:17 2016
    13 // Update Count     : 307
     12// Last Modified On : Thu Jun 30 13:33:16 2016
     13// Update Count     : 319
    1414//
    1515
     
    1919#include <sstream>
    2020#include <cstdio>
    21 #include <climits>
    2221
    2322#include "ParseNode.h"
     
    9089//##############################################################################
    9190
    92 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
    93 static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
    94 static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
    95 static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
    96 static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
    97 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
    98 
    99 // Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
    100 //
    101 //              prefix action constant action suffix
    102 //
    103 // Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
    104 //
    105 //              constant BEGIN CONT ...
    106 //              <CONT>(...)? BEGIN 0 ... // possible empty suffix
    107 //
    108 // because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
    109 // type.
    110 
    111 ConstantNode::ConstantNode( Type t, string *inVal ) : type( t ), value( *inVal ) {
    112         // lexing divides constants into 4 kinds
    113         switch ( type ) {
    114           case Integer:
    115                 {
    116                         static const BasicType::Kind kind[2][3] = {
    117                                 { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
    118                                 { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
    119                         };
    120                         bool dec = true, Unsigned = false;                      // decimal, unsigned constant
    121                         int size;                                                                       // 0 => int, 1 => long, 2 => long long
    122                         unsigned long long v;                                           // converted integral value
    123                         size_t last = value.length() - 1;                       // last character of constant
    124 
    125                         if ( value[0] == '0' ) {                                        // octal constant ?
    126                                 dec = false;
    127                                 if ( last != 0 && checkX( value[1] ) ) { // hex constant ?
    128                                         sscanf( (char *)value.c_str(), "%llx", &v );
    129                                         //printf( "%llx %llu\n", v, v );
    130                                 } else {
    131                                         sscanf( (char *)value.c_str(), "%llo", &v );
    132                                         //printf( "%llo %llu\n", v, v );
    133                                 } // if
    134                         } else {                                                                        // decimal constant ?
    135                                 sscanf( (char *)value.c_str(), "%llu", &v );
    136                                 //printf( "%llu %llu\n", v, v );
    137                         } // if
    138 
    139                         if ( v <= INT_MAX ) {                                           // signed int
    140                                 size = 0;
    141                         } else if ( v <= UINT_MAX && ! dec ) {          // unsigned int
    142                                 size = 0;
    143                                 Unsigned = true;                                                // unsigned
    144                         } else if ( v <= LONG_MAX ) {                           // signed long int
    145                                 size = 1;
    146                         } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
    147                                 size = 1;
    148                                 Unsigned = true;                                                // unsigned long int
    149                         } else if ( v <= LLONG_MAX ) {                          // signed long long int
    150                                 size = 2;
    151                         } else {                                                                        // unsigned long long int
    152                                 size = 2;
    153                                 Unsigned = true;                                                // unsigned long long int
    154                         } // if
    155 
    156                         if ( checkU( value[last] ) ) {                          // suffix 'u' ?
    157                                 Unsigned = true;
    158                                 if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'l' ?
    159                                         size = 1;
    160                                         if ( last > 1 && checkL( value[ last - 2 ] ) ) { // suffix 'll' ?
    161                                                 size = 2;
    162                                         } // if
    163                                 } // if
    164                         } else if ( checkL( value[ last ] ) ) {         // suffix 'l' ?
    165                                 size = 1;
    166                                 if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'll' ?
    167                                         size = 2;
    168                                         if ( last > 1 && checkU( value[ last - 2 ] ) ) { // suffix 'u' ?
    169                                                 Unsigned = true;
    170                                         } // if
    171                                 } else {
    172                                         if ( last > 0 && checkU( value[ last - 1 ] ) ) { // suffix 'u' ?
    173                                                 Unsigned = true;
    174                                         } // if
    175                                 } // if
    176                         } // if
    177                         btype = kind[Unsigned][size];                           // lookup constant type
    178                         break;
    179                 }
    180           case Float:
    181                 {
    182                         static const BasicType::Kind kind[2][3] = {
    183                                 { BasicType::Float, BasicType::Double, BasicType::LongDouble },
    184                                 { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
    185                         };
    186                         bool complx = false;                                            // real, complex
    187                         int size = 1;                                                           // 0 => float, 1 => double (default), 2 => long double
    188                         // floating-point constant has minimum of 2 characters: 1. or .1
    189                         size_t last = value.length() - 1;
    190 
    191                         if ( checkI( value[last] ) ) {                          // imaginary ?
    192                                 complx = true;
    193                                 last -= 1;                                                              // backup one character
    194                         } // if
    195                         if ( checkF( value[last] ) ) {                          // float ?
    196                                 size = 0;
    197                         } else if ( checkD( value[last] ) ) {           // double ?
    198                                 size = 1;
    199                         } else if ( checkL( value[last] ) ) {           // long double ?
    200                                 size = 2;
    201                         } // if
    202                         if ( ! complx && checkI( value[last - 1] ) ) { // imaginary ?
    203                                 complx = true;
    204                         } // if
    205                         btype = kind[complx][size];                                     // lookup constant type
    206                         break;
    207                 }
    208           case Character:
    209                 btype = BasicType::Char;                                                // default
    210                 if ( string( "LUu" ).find( value[0] ) != string::npos ) {
    211                         // ???
    212                 } // if
    213                 break;
    214           case String:
    215                 // array of char
    216                 if ( string( "LUu" ).find( value[0] ) != string::npos ) {
    217                         if ( value[0] == 'u' && value[1] == '8' ) {
    218                                 // ???
    219                         } else {
    220                                 // ???
    221                         } // if
    222                 } // if
    223                 break;
    224         } // switch
     91ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) {
    22592} // ConstantNode::ConstantNode
    22693
    22794ConstantNode *ConstantNode::appendstr( const std::string *newValue ) {
    22895        assert( newValue != 0 );
    229         assert( type == String );
     96        string value = expr->get_constant()->get_value();
    23097
    23198        // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
     
    237104
    238105void ConstantNode::printOneLine( std::ostream &os, int indent ) const {
    239         os << string( indent, ' ' );
    240         printDesignation( os );
    241 
    242         switch ( type ) {
    243           case Integer:
    244           case Float:
    245                 os << value ;
    246                 break;
    247           case Character:
    248                 os << "'" << value << "'";
    249                 break;
    250           case String:
    251                 os << '"' << value << '"';
    252                 break;
    253         } // switch
    254 
    255         os << ' ';
     106        // os << string( indent, ' ' );
     107        // printDesignation( os );
     108
     109        // switch ( type ) {
     110        //   case Integer:
     111        //   case Float:
     112        //      os << value ;
     113        //      break;
     114        //   case Character:
     115        //      os << "'" << value << "'";
     116        //      break;
     117        //   case String:
     118        //      os << '"' << value << '"';
     119        //      break;
     120        // } // switch
     121
     122        // os << ' ';
    256123}
    257124
     
    262129
    263130Expression *ConstantNode::build() const {
    264         ::Type::Qualifiers q;                                                           // no qualifiers on constants
    265 
    266         switch ( get_type() ) {
    267           case String:
    268                 {
    269                         // string should probably be a primitive type
    270                         ArrayType *at = new ArrayType( q, new BasicType( q, BasicType::Char ),
    271                                                                                    new ConstantExpr(
    272                                                                                            Constant( new BasicType( q, BasicType::UnsignedInt ),
    273                                                                                                                  toString( value.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
    274                                                                                    false, false );
    275                         return new ConstantExpr( Constant( at, value ), maybeBuild< Expression >( get_argName() ) );
    276                 }
    277           default:
    278                 return new ConstantExpr( Constant( new BasicType( q, btype ), get_value() ), maybeBuild< Expression >( get_argName() ) );
    279         }
     131        return expr->clone();
    280132}
    281133
  • src/Parser/InitializerNode.cc

    ra43e1d7 r39f04ec  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:20:24 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Jan 07 13:32:57 2016
    13 // Update Count     : 13
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon Jul  4 15:37:15 2016
     13// Update Count     : 15
    1414//
    1515
     
    9999
    100100                if ( get_expression() != 0)
    101                         return new SingleInit( get_expression()->build(), designators, maybeConstructed );
     101                        return new SingleInit( maybeBuild<Expression>( get_expression() ), designators, maybeConstructed );
    102102        } // if
    103103
  • src/Parser/ParseNode.cc

    ra43e1d7 r39f04ec  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:26:29 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 12 13:26:00 2015
    13 // Update Count     : 36
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Jun 30 21:13:12 2016
     13// Update Count     : 52
    1414//
    1515
     16#include <climits>
    1617#include "ParseNode.h"
    1718using namespace std;
     19
     20// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
     21//
     22//              prefix action constant action suffix
     23//
     24// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
     25//
     26//              constant BEGIN CONT ...
     27//              <CONT>(...)? BEGIN 0 ... // possible empty suffix
     28//
     29// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
     30// type.
     31
     32static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
     33static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
     34static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
     35static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
     36static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
     37static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
     38
     39BasicType::Kind literalType( ConstantNode::Type type, string &value ) {
     40        BasicType::Kind btype;
     41
     42        // lexing divides constants into 4 kinds
     43        switch ( type ) {
     44          case ConstantNode::Integer:
     45                {
     46                        static const BasicType::Kind kind[2][3] = {
     47                                { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
     48                                { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
     49                        };
     50                        bool dec = true, Unsigned = false;                      // decimal, unsigned constant
     51                        int size;                                                                       // 0 => int, 1 => long, 2 => long long
     52                        unsigned long long v;                                           // converted integral value
     53                        size_t last = value.length() - 1;                       // last character of constant
     54
     55                        if ( value[0] == '0' ) {                                        // octal constant ?
     56                                dec = false;
     57                                if ( last != 0 && checkX( value[1] ) ) { // hex constant ?
     58                                        sscanf( (char *)value.c_str(), "%llx", &v );
     59                                        //printf( "%llx %llu\n", v, v );
     60                                } else {
     61                                        sscanf( (char *)value.c_str(), "%llo", &v );
     62                                        //printf( "%llo %llu\n", v, v );
     63                                } // if
     64                        } else {                                                                        // decimal constant ?
     65                                sscanf( (char *)value.c_str(), "%llu", &v );
     66                                //printf( "%llu %llu\n", v, v );
     67                        } // if
     68
     69                        if ( v <= INT_MAX ) {                                           // signed int
     70                                size = 0;
     71                        } else if ( v <= UINT_MAX && ! dec ) {          // unsigned int
     72                                size = 0;
     73                                Unsigned = true;                                                // unsigned
     74                        } else if ( v <= LONG_MAX ) {                           // signed long int
     75                                size = 1;
     76                        } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
     77                                size = 1;
     78                                Unsigned = true;                                                // unsigned long int
     79                        } else if ( v <= LLONG_MAX ) {                          // signed long long int
     80                                size = 2;
     81                        } else {                                                                        // unsigned long long int
     82                                size = 2;
     83                                Unsigned = true;                                                // unsigned long long int
     84                        } // if
     85
     86                        if ( checkU( value[last] ) ) {                          // suffix 'u' ?
     87                                Unsigned = true;
     88                                if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'l' ?
     89                                        size = 1;
     90                                        if ( last > 1 && checkL( value[ last - 2 ] ) ) { // suffix 'll' ?
     91                                                size = 2;
     92                                        } // if
     93                                } // if
     94                        } else if ( checkL( value[ last ] ) ) {         // suffix 'l' ?
     95                                size = 1;
     96                                if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'll' ?
     97                                        size = 2;
     98                                        if ( last > 1 && checkU( value[ last - 2 ] ) ) { // suffix 'u' ?
     99                                                Unsigned = true;
     100                                        } // if
     101                                } else {
     102                                        if ( last > 0 && checkU( value[ last - 1 ] ) ) { // suffix 'u' ?
     103                                                Unsigned = true;
     104                                        } // if
     105                                } // if
     106                        } // if
     107                        btype = kind[Unsigned][size];                           // lookup constant type
     108                        break;
     109                }
     110          case ConstantNode::Float:
     111                {
     112                        static const BasicType::Kind kind[2][3] = {
     113                                { BasicType::Float, BasicType::Double, BasicType::LongDouble },
     114                                { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
     115                        };
     116                        bool complx = false;                                            // real, complex
     117                        int size = 1;                                                           // 0 => float, 1 => double (default), 2 => long double
     118                        // floating-point constant has minimum of 2 characters: 1. or .1
     119                        size_t last = value.length() - 1;
     120
     121                        if ( checkI( value[last] ) ) {                          // imaginary ?
     122                                complx = true;
     123                                last -= 1;                                                              // backup one character
     124                        } // if
     125                        if ( checkF( value[last] ) ) {                          // float ?
     126                                size = 0;
     127                        } else if ( checkD( value[last] ) ) {           // double ?
     128                                size = 1;
     129                        } else if ( checkL( value[last] ) ) {           // long double ?
     130                                size = 2;
     131                        } // if
     132                        if ( ! complx && checkI( value[last - 1] ) ) { // imaginary ?
     133                                complx = true;
     134                        } // if
     135                        btype = kind[complx][size];                                     // lookup constant type
     136                        break;
     137                }
     138          case ConstantNode::Character:
     139                btype = BasicType::Char;                                                // default
     140                if ( string( "LUu" ).find( value[0] ) != string::npos ) {
     141                        // ???
     142                } // if
     143                break;
     144          case ConstantNode::String:
     145                assert( false );
     146                // array of char
     147                if ( string( "LUu" ).find( value[0] ) != string::npos ) {
     148                        if ( value[0] == 'u' && value[1] == '8' ) {
     149                                // ???
     150                        } else {
     151                                // ???
     152                        } // if
     153                } // if
     154                break;
     155        } // switch
     156        return btype;
     157} // literalType
     158
     159
     160ConstantNode *makeConstant( ConstantNode::Type type, std::string *str ) {
     161        ::Type::Qualifiers emptyQualifiers;                                     // no qualifiers on constants
     162        return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, literalType( type, *str ) ), *str ), nullptr ) );
     163}
     164
     165ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str ) {
     166        ::Type::Qualifiers emptyQualifiers;                                     // no qualifiers on constants
     167        // string should probably be a primitive type
     168        ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
     169                                                                   new ConstantExpr(
     170                                                                           Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
     171                                                                                                 toString( str->size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
     172                                                                   false, false );
     173        return new ConstantNode( new ConstantExpr( Constant( at, *str ), nullptr ) );
     174}
     175
    18176
    19177// Builder
     
    28186};
    29187
    30 ParseNode *ParseNode::get_link() const {
    31         return next;
    32 }
    33 
    34188ParseNode *ParseNode::get_last() {
    35189        ParseNode *current = this;
     
    43197ParseNode *ParseNode::set_link( ParseNode *next_ ) {
    44198        if ( next_ == 0 ) return this;
    45 
    46199        get_last()->next = next_;
    47 
    48200        return this;
    49201}
  • src/Parser/ParseNode.h

    ra43e1d7 r39f04ec  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun 27 23:28:10 2016
    13 // Update Count     : 242
     12// Last Modified On : Mon Jul  4 15:35:09 2016
     13// Update Count     : 260
    1414//
    1515
     
    4343        ParseNode();
    4444        ParseNode( const std::string * );
    45         ParseNode( const std::string & );  // for copy constructing subclasses
     45        ParseNode( const std::string & );                                       // for copy constructing subclasses
    4646        virtual ~ParseNode();
    4747
    48         ParseNode *get_link() const;
     48        ParseNode *get_link() const { return next; }
    4949        ParseNode *get_last();
    5050        ParseNode *set_link( ParseNode * );
     
    6262  protected:
    6363        std::string name;
     64        static int indent_by;
    6465        ParseNode *next;
    65         static int indent_by;
    6666};
    6767
     
    126126        enum Type { Integer, Float, Character, String };
    127127
    128         ConstantNode( Type, std::string * );
    129         ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype), value( *new std::string( other.value ) ) {};
    130         ~ConstantNode() { delete &value; }
     128        ConstantNode( ConstantExpr * );
     129        ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
     130        ~ConstantNode() { delete expr; }
    131131
    132132        virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
    133         Type get_type( void ) const { return type; }
    134133        virtual void print( std::ostream &, int indent = 0) const;
    135134        virtual void printOneLine( std::ostream &, int indent = 0) const;
    136135
    137         const std::string &get_value() const { return value; }
    138136        ConstantNode *appendstr( const std::string *newValue );
    139137
    140138        Expression *build() const;
    141139  private:
    142         Type type;
    143         BasicType::Kind btype;
    144         std::string &value;
    145 };
     140        ConstantExpr *expr;
     141};
     142
     143ConstantNode *makeConstant( ConstantNode::Type, std::string * );
     144ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str );
    146145
    147146class VarRefNode : public ExpressionNode {
     
    482481        void setCatchRest( bool newVal ) { isCatchRest = newVal; }
    483482
    484         bool get_extension() const { return extension; }
    485         StatementNode *set_extension( bool exten ) { extension = exten; return this; }
    486 
    487483        std::string get_target() const;
    488484
     
    503499        DeclarationNode *decl;
    504500        bool isCatchRest;
    505         bool extension = false;
    506501}; // StatementNode
    507502
  • src/Parser/parser.cc

    ra43e1d7 r39f04ec  
    10301030     613,   614,   615,   616,   617,   618,   619,   620,   624,   625,
    10311031     631,   632,   638,   639,   640,   641,   642,   643,   644,   645,
    1032      646,   656,   663,   665,   675,   676,   681,   683,   685,   687,
    1033      691,   692,   697,   702,   705,   707,   709,   714,   716,   724,
    1034      725,   727,   731,   732,   737,   738,   743,   744,   748,   753,
    1035      754,   758,   760,   766,   767,   771,   773,   775,   777,   783,
    1036      784,   788,   789,   793,   795,   797,   802,   804,   809,   811,
    1037      815,   818,   822,   825,   829,   831,   835,   837,   844,   846,
    1038      848,   857,   859,   861,   863,   865,   870,   872,   874,   876,
    1039      881,   894,   895,   900,   902,   907,   911,   913,   915,   917,
    1040      919,   925,   926,   932,   933,   937,   938,   943,   945,   951,
    1041      952,   954,   959,   961,   968,   970,   974,   975,   980,   982,
    1042      986,   987,   991,   993,   997,   998,  1002,  1003,  1007,  1008,
    1043     1023,  1024,  1025,  1026,  1027,  1031,  1036,  1043,  1053,  1058,
    1044     1063,  1071,  1076,  1081,  1086,  1091,  1099,  1121,  1126,  1133,
    1045     1135,  1142,  1147,  1152,  1163,  1168,  1173,  1178,  1183,  1192,
    1046     1197,  1205,  1206,  1207,  1208,  1214,  1219,  1227,  1228,  1229,
    1047     1230,  1234,  1235,  1236,  1237,  1242,  1243,  1252,  1253,  1258,
    1048     1259,  1264,  1266,  1268,  1270,  1272,  1275,  1274,  1286,  1287,
    1049     1289,  1299,  1300,  1305,  1309,  1311,  1313,  1315,  1317,  1319,
    1050     1321,  1323,  1328,  1330,  1332,  1334,  1336,  1338,  1340,  1342,
    1051     1344,  1346,  1348,  1350,  1352,  1358,  1359,  1361,  1363,  1365,
    1052     1370,  1371,  1377,  1378,  1380,  1382,  1387,  1389,  1391,  1393,
    1053     1398,  1399,  1401,  1403,  1408,  1409,  1411,  1416,  1417,  1419,
    1054     1421,  1426,  1428,  1430,  1435,  1436,  1440,  1442,  1448,  1447,
    1055     1451,  1453,  1458,  1460,  1465,  1467,  1472,  1473,  1475,  1476,
    1056     1481,  1482,  1484,  1486,  1491,  1493,  1499,  1500,  1502,  1505,
    1057     1508,  1513,  1514,  1519,  1524,  1528,  1530,  1536,  1535,  1542,
    1058     1544,  1550,  1551,  1559,  1560,  1564,  1565,  1566,  1568,  1570,
    1059     1577,  1578,  1580,  1582,  1587,  1588,  1594,  1595,  1599,  1600,
    1060     1605,  1606,  1607,  1609,  1617,  1618,  1620,  1623,  1625,  1629,
    1061     1630,  1631,  1633,  1635,  1639,  1644,  1652,  1653,  1662,  1664,
    1062     1669,  1670,  1671,  1675,  1676,  1677,  1681,  1682,  1683,  1687,
    1063     1688,  1689,  1694,  1695,  1696,  1697,  1703,  1704,  1706,  1711,
    1064     1712,  1717,  1718,  1719,  1720,  1721,  1736,  1737,  1742,  1743,
    1065     1751,  1753,  1755,  1758,  1760,  1762,  1785,  1786,  1788,  1790,
    1066     1795,  1796,  1798,  1803,  1808,  1809,  1815,  1814,  1818,  1822,
    1067     1824,  1826,  1832,  1833,  1838,  1843,  1845,  1850,  1852,  1853,
    1068     1855,  1860,  1862,  1864,  1869,  1871,  1876,  1881,  1889,  1895,
    1069     1894,  1908,  1909,  1914,  1915,  1919,  1924,  1929,  1937,  1942,
    1070     1953,  1954,  1965,  1966,  1972,  1973,  1977,  1978,  1979,  1982,
    1071     1981,  1992,  1997,  2003,  2009,  2018,  2024,  2030,  2036,  2042,
    1072     2050,  2056,  2064,  2070,  2079,  2080,  2081,  2085,  2089,  2091,
    1073     2096,  2097,  2101,  2102,  2107,  2113,  2114,  2117,  2119,  2120,
    1074     2124,  2125,  2126,  2127,  2161,  2163,  2164,  2166,  2171,  2176,
    1075     2181,  2183,  2185,  2190,  2192,  2194,  2196,  2201,  2203,  2212,
    1076     2214,  2215,  2220,  2222,  2224,  2229,  2231,  2233,  2238,  2240,
    1077     2242,  2251,  2252,  2253,  2257,  2259,  2261,  2266,  2268,  2270,
    1078     2275,  2277,  2279,  2294,  2296,  2297,  2299,  2304,  2305,  2310,
    1079     2312,  2314,  2319,  2321,  2323,  2325,  2330,  2332,  2334,  2344,
    1080     2346,  2347,  2349,  2354,  2356,  2358,  2363,  2365,  2367,  2369,
    1081     2374,  2376,  2378,  2409,  2411,  2412,  2414,  2419,  2424,  2432,
    1082     2434,  2436,  2441,  2443,  2448,  2450,  2464,  2465,  2467,  2472,
    1083     2474,  2476,  2478,  2480,  2485,  2486,  2488,  2490,  2495,  2497,
    1084     2499,  2505,  2507,  2509,  2513,  2515,  2517,  2519,  2533,  2534,
    1085     2536,  2541,  2543,  2545,  2547,  2549,  2554,  2555,  2557,  2559,
    1086     2564,  2566,  2568,  2574,  2575,  2577,  2586,  2589,  2591,  2594,
    1087     2596,  2598,  2611,  2612,  2614,  2619,  2621,  2623,  2625,  2627,
    1088     2632,  2633,  2635,  2637,  2642,  2644,  2652,  2653,  2654,  2659,
    1089     2660,  2664,  2666,  2668,  2670,  2672,  2674,  2681,  2683,  2685,
    1090     2687,  2689,  2691,  2693,  2695,  2697,  2699,  2704,  2706,  2708,
    1091     2713,  2739,  2740,  2742,  2746,  2747,  2751,  2753,  2755,  2757,
    1092     2759,  2761,  2768,  2770,  2772,  2774,  2776,  2778,  2783,  2788,
    1093     2790,  2792,  2810,  2812,  2817,  2818
     1032     646,   656,   663,   665,   675,   676,   681,   683,   689,   691,
     1033     695,   696,   701,   706,   709,   711,   713,   718,   720,   728,
     1034     729,   731,   735,   736,   741,   742,   747,   748,   752,   757,
     1035     758,   762,   764,   770,   771,   775,   777,   779,   781,   787,
     1036     788,   792,   793,   797,   799,   801,   806,   808,   813,   815,
     1037     819,   822,   826,   829,   833,   835,   839,   841,   848,   850,
     1038     852,   861,   863,   865,   867,   869,   874,   876,   878,   880,
     1039     885,   898,   899,   904,   906,   911,   915,   917,   919,   921,
     1040     923,   929,   930,   936,   937,   941,   942,   947,   949,   955,
     1041     956,   958,   963,   965,   972,   974,   978,   979,   984,   986,
     1042     990,   991,   995,   997,  1001,  1002,  1006,  1007,  1011,  1012,
     1043    1027,  1028,  1029,  1030,  1031,  1035,  1040,  1047,  1057,  1062,
     1044    1067,  1075,  1080,  1085,  1090,  1095,  1103,  1125,  1130,  1137,
     1045    1139,  1146,  1151,  1156,  1167,  1172,  1177,  1182,  1187,  1196,
     1046    1201,  1209,  1210,  1211,  1212,  1218,  1223,  1231,  1232,  1233,
     1047    1234,  1238,  1239,  1240,  1241,  1246,  1247,  1256,  1257,  1262,
     1048    1263,  1268,  1270,  1272,  1274,  1276,  1279,  1278,  1290,  1291,
     1049    1293,  1303,  1304,  1309,  1313,  1315,  1317,  1319,  1321,  1323,
     1050    1325,  1327,  1332,  1334,  1336,  1338,  1340,  1342,  1344,  1346,
     1051    1348,  1350,  1352,  1354,  1356,  1362,  1363,  1365,  1367,  1369,
     1052    1374,  1375,  1381,  1382,  1384,  1386,  1391,  1393,  1395,  1397,
     1053    1402,  1403,  1405,  1407,  1412,  1413,  1415,  1420,  1421,  1423,
     1054    1425,  1430,  1432,  1434,  1439,  1440,  1444,  1446,  1452,  1451,
     1055    1455,  1457,  1462,  1464,  1469,  1471,  1476,  1477,  1479,  1480,
     1056    1489,  1490,  1492,  1494,  1499,  1501,  1507,  1508,  1510,  1513,
     1057    1516,  1521,  1522,  1527,  1532,  1536,  1538,  1544,  1543,  1550,
     1058    1552,  1558,  1559,  1567,  1568,  1572,  1573,  1574,  1576,  1578,
     1059    1585,  1586,  1588,  1590,  1595,  1596,  1602,  1603,  1607,  1608,
     1060    1613,  1614,  1615,  1617,  1625,  1626,  1628,  1631,  1633,  1637,
     1061    1638,  1639,  1641,  1643,  1647,  1652,  1660,  1661,  1670,  1672,
     1062    1677,  1678,  1679,  1683,  1684,  1685,  1689,  1690,  1691,  1695,
     1063    1696,  1697,  1702,  1703,  1704,  1705,  1711,  1712,  1714,  1719,
     1064    1720,  1725,  1726,  1727,  1728,  1729,  1744,  1745,  1750,  1751,
     1065    1759,  1761,  1763,  1766,  1768,  1770,  1793,  1794,  1796,  1798,
     1066    1803,  1804,  1806,  1811,  1816,  1817,  1823,  1822,  1826,  1830,
     1067    1832,  1834,  1840,  1841,  1846,  1851,  1853,  1858,  1860,  1861,
     1068    1863,  1868,  1870,  1872,  1877,  1879,  1884,  1889,  1897,  1903,
     1069    1902,  1916,  1917,  1922,  1923,  1927,  1932,  1937,  1945,  1950,
     1070    1961,  1962,  1973,  1974,  1980,  1981,  1985,  1986,  1987,  1990,
     1071    1989,  2000,  2009,  2015,  2021,  2030,  2036,  2042,  2048,  2054,
     1072    2062,  2068,  2076,  2082,  2091,  2092,  2093,  2097,  2101,  2103,
     1073    2108,  2109,  2113,  2114,  2119,  2125,  2126,  2129,  2131,  2132,
     1074    2136,  2137,  2138,  2139,  2173,  2175,  2176,  2178,  2183,  2188,
     1075    2193,  2195,  2197,  2202,  2204,  2206,  2208,  2213,  2215,  2224,
     1076    2226,  2227,  2232,  2234,  2236,  2241,  2243,  2245,  2250,  2252,
     1077    2254,  2263,  2264,  2265,  2269,  2271,  2273,  2278,  2280,  2282,
     1078    2287,  2289,  2291,  2306,  2308,  2309,  2311,  2316,  2317,  2322,
     1079    2324,  2326,  2331,  2333,  2335,  2337,  2342,  2344,  2346,  2356,
     1080    2358,  2359,  2361,  2366,  2368,  2370,  2375,  2377,  2379,  2381,
     1081    2386,  2388,  2390,  2421,  2423,  2424,  2426,  2431,  2436,  2444,
     1082    2446,  2448,  2453,  2455,  2460,  2462,  2476,  2477,  2479,  2484,
     1083    2486,  2488,  2490,  2492,  2497,  2498,  2500,  2502,  2507,  2509,
     1084    2511,  2517,  2519,  2521,  2525,  2527,  2529,  2531,  2545,  2546,
     1085    2548,  2553,  2555,  2557,  2559,  2561,  2566,  2567,  2569,  2571,
     1086    2576,  2578,  2580,  2586,  2587,  2589,  2598,  2601,  2603,  2606,
     1087    2608,  2610,  2623,  2624,  2626,  2631,  2633,  2635,  2637,  2639,
     1088    2644,  2645,  2647,  2649,  2654,  2656,  2664,  2665,  2666,  2671,
     1089    2672,  2676,  2678,  2680,  2682,  2684,  2686,  2693,  2695,  2697,
     1090    2699,  2701,  2703,  2705,  2707,  2709,  2711,  2716,  2718,  2720,
     1091    2725,  2751,  2752,  2754,  2758,  2759,  2763,  2765,  2767,  2769,
     1092    2771,  2773,  2780,  2782,  2784,  2786,  2788,  2790,  2795,  2800,
     1093    2802,  2804,  2822,  2824,  2829,  2830
    10941094};
    10951095#endif
     
    52375237/* Line 1806 of yacc.c  */
    52385238#line 305 "parser.yy"
    5239     { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     5239    { (yyval.constant) = makeConstant( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
    52405240    break;
    52415241
     
    52445244/* Line 1806 of yacc.c  */
    52455245#line 306 "parser.yy"
    5246     { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     5246    { (yyval.constant) = makeConstant( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
    52475247    break;
    52485248
     
    52515251/* Line 1806 of yacc.c  */
    52525252#line 307 "parser.yy"
    5253     { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
     5253    { (yyval.constant) = makeConstant( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
    52545254    break;
    52555255
     
    52585258/* Line 1806 of yacc.c  */
    52595259#line 332 "parser.yy"
    5260     { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
     5260    { (yyval.constant) = makeConstantStr( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
    52615261    break;
    52625262
     
    59535953/* Line 1806 of yacc.c  */
    59545954#line 684 "parser.yy"
    5955     { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) )/*->set_extension( true )*/; }
     5955    {   // mark all fields in list
     5956                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     5957                                iter->set_extension( true );
     5958                        (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
     5959                }
    59565960    break;
    59575961
     
    59595963
    59605964/* Line 1806 of yacc.c  */
    5961 #line 686 "parser.yy"
     5965#line 690 "parser.yy"
    59625966    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    59635967    break;
     
    59665970
    59675971/* Line 1806 of yacc.c  */
    5968 #line 693 "parser.yy"
     5972#line 697 "parser.yy"
    59695973    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    59705974    break;
     
    59735977
    59745978/* Line 1806 of yacc.c  */
    5975 #line 698 "parser.yy"
     5979#line 702 "parser.yy"
    59765980    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    59775981    break;
     
    59805984
    59815985/* Line 1806 of yacc.c  */
    5982 #line 704 "parser.yy"
     5986#line 708 "parser.yy"
    59835987    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    59845988    break;
     
    59875991
    59885992/* Line 1806 of yacc.c  */
    5989 #line 706 "parser.yy"
     5993#line 710 "parser.yy"
    59905994    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    59915995    break;
     
    59945998
    59955999/* Line 1806 of yacc.c  */
    5996 #line 708 "parser.yy"
     6000#line 712 "parser.yy"
    59976001    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    59986002    break;
     
    60016005
    60026006/* Line 1806 of yacc.c  */
    6003 #line 710 "parser.yy"
     6007#line 714 "parser.yy"
    60046008    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
    60056009    break;
     
    60086012
    60096013/* Line 1806 of yacc.c  */
    6010 #line 715 "parser.yy"
     6014#line 719 "parser.yy"
    60116015    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    60126016    break;
     
    60156019
    60166020/* Line 1806 of yacc.c  */
    6017 #line 717 "parser.yy"
     6021#line 721 "parser.yy"
    60186022    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
    60196023    break;
     
    60226026
    60236027/* Line 1806 of yacc.c  */
    6024 #line 724 "parser.yy"
     6028#line 728 "parser.yy"
    60256029    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    60266030    break;
     
    60296033
    60306034/* Line 1806 of yacc.c  */
    6031 #line 726 "parser.yy"
     6035#line 730 "parser.yy"
    60326036    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    60336037    break;
     
    60366040
    60376041/* Line 1806 of yacc.c  */
    6038 #line 733 "parser.yy"
     6042#line 737 "parser.yy"
    60396043    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    60406044    break;
     
    60436047
    60446048/* Line 1806 of yacc.c  */
    6045 #line 737 "parser.yy"
     6049#line 741 "parser.yy"
    60466050    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    60476051    break;
     
    60506054
    60516055/* Line 1806 of yacc.c  */
    6052 #line 738 "parser.yy"
     6056#line 742 "parser.yy"
    60536057    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    60546058    break;
     
    60576061
    60586062/* Line 1806 of yacc.c  */
    6059 #line 744 "parser.yy"
     6063#line 748 "parser.yy"
    60606064    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    60616065    break;
     
    60646068
    60656069/* Line 1806 of yacc.c  */
    6066 #line 748 "parser.yy"
     6070#line 752 "parser.yy"
    60676071    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    60686072    break;
     
    60716075
    60726076/* Line 1806 of yacc.c  */
    6073 #line 753 "parser.yy"
     6077#line 757 "parser.yy"
    60746078    { (yyval.sn) = 0; }
    60756079    break;
     
    60786082
    60796083/* Line 1806 of yacc.c  */
    6080 #line 759 "parser.yy"
     6084#line 763 "parser.yy"
    60816085    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    60826086    break;
     
    60856089
    60866090/* Line 1806 of yacc.c  */
    6087 #line 761 "parser.yy"
     6091#line 765 "parser.yy"
    60886092    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    60896093    break;
     
    60926096
    60936097/* Line 1806 of yacc.c  */
    6094 #line 766 "parser.yy"
     6098#line 770 "parser.yy"
    60956099    { (yyval.sn) = 0; }
    60966100    break;
     
    60996103
    61006104/* Line 1806 of yacc.c  */
    6101 #line 772 "parser.yy"
     6105#line 776 "parser.yy"
    61026106    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    61036107    break;
     
    61066110
    61076111/* Line 1806 of yacc.c  */
    6108 #line 774 "parser.yy"
     6112#line 778 "parser.yy"
    61096113    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
    61106114    break;
     
    61136117
    61146118/* Line 1806 of yacc.c  */
    6115 #line 776 "parser.yy"
     6119#line 780 "parser.yy"
    61166120    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    61176121    break;
     
    61206124
    61216125/* Line 1806 of yacc.c  */
    6122 #line 778 "parser.yy"
     6126#line 782 "parser.yy"
    61236127    { (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) ))))); }
    61246128    break;
     
    61276131
    61286132/* Line 1806 of yacc.c  */
    6129 #line 783 "parser.yy"
     6133#line 787 "parser.yy"
    61306134    { (yyval.sn) = 0; }
    61316135    break;
     
    61346138
    61356139/* Line 1806 of yacc.c  */
    6136 #line 788 "parser.yy"
     6140#line 792 "parser.yy"
    61376141    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    61386142    break;
     
    61416145
    61426146/* Line 1806 of yacc.c  */
    6143 #line 789 "parser.yy"
     6147#line 793 "parser.yy"
    61446148    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    61456149    break;
     
    61486152
    61496153/* Line 1806 of yacc.c  */
    6150 #line 794 "parser.yy"
     6154#line 798 "parser.yy"
    61516155    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    61526156    break;
     
    61556159
    61566160/* Line 1806 of yacc.c  */
    6157 #line 796 "parser.yy"
     6161#line 800 "parser.yy"
    61586162    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    61596163    break;
     
    61626166
    61636167/* Line 1806 of yacc.c  */
    6164 #line 798 "parser.yy"
     6168#line 802 "parser.yy"
    61656169    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    61666170    break;
     
    61696173
    61706174/* Line 1806 of yacc.c  */
    6171 #line 803 "parser.yy"
     6175#line 807 "parser.yy"
    61726176    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    61736177    break;
     
    61766180
    61776181/* Line 1806 of yacc.c  */
    6178 #line 805 "parser.yy"
     6182#line 809 "parser.yy"
    61796183    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    61806184    break;
     
    61836187
    61846188/* Line 1806 of yacc.c  */
    6185 #line 810 "parser.yy"
     6189#line 814 "parser.yy"
    61866190    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    61876191    break;
     
    61906194
    61916195/* Line 1806 of yacc.c  */
    6192 #line 814 "parser.yy"
     6196#line 818 "parser.yy"
    61936197    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    61946198    break;
     
    61976201
    61986202/* Line 1806 of yacc.c  */
    6199 #line 817 "parser.yy"
     6203#line 821 "parser.yy"
    62006204    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    62016205    break;
     
    62046208
    62056209/* Line 1806 of yacc.c  */
    6206 #line 821 "parser.yy"
     6210#line 825 "parser.yy"
    62076211    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    62086212    break;
     
    62116215
    62126216/* Line 1806 of yacc.c  */
    6213 #line 824 "parser.yy"
     6217#line 828 "parser.yy"
    62146218    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    62156219    break;
     
    62186222
    62196223/* Line 1806 of yacc.c  */
    6220 #line 828 "parser.yy"
     6224#line 832 "parser.yy"
    62216225    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    62226226    break;
     
    62256229
    62266230/* Line 1806 of yacc.c  */
    6227 #line 830 "parser.yy"
     6231#line 834 "parser.yy"
    62286232    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    62296233    break;
    62306234
    62316235  case 195:
    6232 
    6233 /* Line 1806 of yacc.c  */
    6234 #line 832 "parser.yy"
    6235     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    6236     break;
    6237 
    6238   case 196:
    62396236
    62406237/* Line 1806 of yacc.c  */
     
    62436240    break;
    62446241
     6242  case 196:
     6243
     6244/* Line 1806 of yacc.c  */
     6245#line 840 "parser.yy"
     6246    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     6247    break;
     6248
    62456249  case 197:
    62466250
    62476251/* Line 1806 of yacc.c  */
    6248 #line 838 "parser.yy"
     6252#line 842 "parser.yy"
    62496253    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    62506254    break;
     
    62536257
    62546258/* Line 1806 of yacc.c  */
    6255 #line 845 "parser.yy"
     6259#line 849 "parser.yy"
    62566260    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    62576261    break;
     
    62606264
    62616265/* Line 1806 of yacc.c  */
    6262 #line 847 "parser.yy"
     6266#line 851 "parser.yy"
    62636267    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    62646268    break;
     
    62676271
    62686272/* Line 1806 of yacc.c  */
    6269 #line 849 "parser.yy"
     6273#line 853 "parser.yy"
    62706274    {
    62716275                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    62776281
    62786282/* Line 1806 of yacc.c  */
    6279 #line 860 "parser.yy"
    6280     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    6281     break;
    6282 
    6283   case 203:
    6284 
    6285 /* Line 1806 of yacc.c  */
    6286 #line 862 "parser.yy"
    6287     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    6288     break;
    6289 
    6290   case 204:
    6291 
    6292 /* Line 1806 of yacc.c  */
    62936283#line 864 "parser.yy"
    62946284    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    62956285    break;
    62966286
    6297   case 205:
     6287  case 203:
    62986288
    62996289/* Line 1806 of yacc.c  */
     
    63026292    break;
    63036293
     6294  case 204:
     6295
     6296/* Line 1806 of yacc.c  */
     6297#line 868 "parser.yy"
     6298    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     6299    break;
     6300
     6301  case 205:
     6302
     6303/* Line 1806 of yacc.c  */
     6304#line 870 "parser.yy"
     6305    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     6306    break;
     6307
    63046308  case 206:
    6305 
    6306 /* Line 1806 of yacc.c  */
    6307 #line 871 "parser.yy"
    6308     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    6309     break;
    6310 
    6311   case 207:
    6312 
    6313 /* Line 1806 of yacc.c  */
    6314 #line 873 "parser.yy"
    6315     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    6316     break;
    6317 
    6318   case 208:
    63196309
    63206310/* Line 1806 of yacc.c  */
     
    63236313    break;
    63246314
    6325   case 209:
     6315  case 207:
    63266316
    63276317/* Line 1806 of yacc.c  */
     
    63306320    break;
    63316321
     6322  case 208:
     6323
     6324/* Line 1806 of yacc.c  */
     6325#line 879 "parser.yy"
     6326    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     6327    break;
     6328
     6329  case 209:
     6330
     6331/* Line 1806 of yacc.c  */
     6332#line 881 "parser.yy"
     6333    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     6334    break;
     6335
    63326336  case 210:
    63336337
    63346338/* Line 1806 of yacc.c  */
    6335 #line 882 "parser.yy"
     6339#line 886 "parser.yy"
    63366340    {
    63376341                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    63436347
    63446348/* Line 1806 of yacc.c  */
    6345 #line 896 "parser.yy"
     6349#line 900 "parser.yy"
    63466350    {
    63476351                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63536357
    63546358/* Line 1806 of yacc.c  */
    6355 #line 901 "parser.yy"
     6359#line 905 "parser.yy"
    63566360    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    63576361    break;
     
    63606364
    63616365/* Line 1806 of yacc.c  */
    6362 #line 903 "parser.yy"
     6366#line 907 "parser.yy"
    63636367    {
    63646368                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63706374
    63716375/* Line 1806 of yacc.c  */
    6372 #line 912 "parser.yy"
     6376#line 916 "parser.yy"
    63736377    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
    63746378    break;
     
    63776381
    63786382/* Line 1806 of yacc.c  */
    6379 #line 914 "parser.yy"
     6383#line 918 "parser.yy"
    63806384    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
    63816385    break;
     
    63846388
    63856389/* Line 1806 of yacc.c  */
    6386 #line 916 "parser.yy"
     6390#line 920 "parser.yy"
    63876391    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
    63886392    break;
     
    63916395
    63926396/* Line 1806 of yacc.c  */
    6393 #line 918 "parser.yy"
     6397#line 922 "parser.yy"
    63946398    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
    63956399    break;
     
    63986402
    63996403/* Line 1806 of yacc.c  */
    6400 #line 920 "parser.yy"
     6404#line 924 "parser.yy"
    64016405    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
    64026406    break;
     
    64056409
    64066410/* Line 1806 of yacc.c  */
    6407 #line 925 "parser.yy"
     6411#line 929 "parser.yy"
    64086412    { (yyval.flag) = false; }
    64096413    break;
     
    64126416
    64136417/* Line 1806 of yacc.c  */
    6414 #line 927 "parser.yy"
     6418#line 931 "parser.yy"
    64156419    { (yyval.flag) = true; }
    64166420    break;
     
    64196423
    64206424/* Line 1806 of yacc.c  */
    6421 #line 932 "parser.yy"
     6425#line 936 "parser.yy"
    64226426    { (yyval.en) = 0; }
    64236427    break;
     
    64266430
    64276431/* Line 1806 of yacc.c  */
    6428 #line 939 "parser.yy"
     6432#line 943 "parser.yy"
    64296433    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    64306434    break;
     
    64336437
    64346438/* Line 1806 of yacc.c  */
    6435 #line 944 "parser.yy"
     6439#line 948 "parser.yy"
    64366440    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
    64376441    break;
     
    64406444
    64416445/* Line 1806 of yacc.c  */
    6442 #line 946 "parser.yy"
     6446#line 950 "parser.yy"
    64436447    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
    64446448    break;
     
    64476451
    64486452/* Line 1806 of yacc.c  */
    6449 #line 951 "parser.yy"
     6453#line 955 "parser.yy"
    64506454    { (yyval.constant) = 0; }
    64516455    break;
     
    64546458
    64556459/* Line 1806 of yacc.c  */
    6456 #line 953 "parser.yy"
     6460#line 957 "parser.yy"
    64576461    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    64586462    break;
     
    64616465
    64626466/* Line 1806 of yacc.c  */
    6463 #line 955 "parser.yy"
     6467#line 959 "parser.yy"
    64646468    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    64656469    break;
     
    64686472
    64696473/* Line 1806 of yacc.c  */
    6470 #line 960 "parser.yy"
     6474#line 964 "parser.yy"
    64716475    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
    64726476    break;
     
    64756479
    64766480/* Line 1806 of yacc.c  */
    6477 #line 962 "parser.yy"
     6481#line 966 "parser.yy"
    64786482    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
    64796483    break;
     
    64826486
    64836487/* Line 1806 of yacc.c  */
    6484 #line 969 "parser.yy"
     6488#line 973 "parser.yy"
    64856489    { (yyval.decl) = 0; }
    64866490    break;
     
    64896493
    64906494/* Line 1806 of yacc.c  */
    6491 #line 976 "parser.yy"
     6495#line 980 "parser.yy"
    64926496    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    64936497    break;
     
    64966500
    64976501/* Line 1806 of yacc.c  */
    6498 #line 981 "parser.yy"
     6502#line 985 "parser.yy"
    64996503    { (yyval.decl) = 0; }
    65006504    break;
     
    65036507
    65046508/* Line 1806 of yacc.c  */
    6505 #line 988 "parser.yy"
     6509#line 992 "parser.yy"
    65066510    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    65076511    break;
     
    65106514
    65116515/* Line 1806 of yacc.c  */
    6512 #line 1002 "parser.yy"
     6516#line 1006 "parser.yy"
    65136517    {}
    65146518    break;
     
    65176521
    65186522/* Line 1806 of yacc.c  */
    6519 #line 1003 "parser.yy"
     6523#line 1007 "parser.yy"
    65206524    {}
    65216525    break;
     
    65246528
    65256529/* Line 1806 of yacc.c  */
    6526 #line 1032 "parser.yy"
     6530#line 1036 "parser.yy"
    65276531    {
    65286532                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65346538
    65356539/* Line 1806 of yacc.c  */
    6536 #line 1039 "parser.yy"
     6540#line 1043 "parser.yy"
    65376541    {
    65386542                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65446548
    65456549/* Line 1806 of yacc.c  */
    6546 #line 1044 "parser.yy"
     6550#line 1048 "parser.yy"
    65476551    {
    65486552                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    65546558
    65556559/* Line 1806 of yacc.c  */
    6556 #line 1054 "parser.yy"
     6560#line 1058 "parser.yy"
    65576561    {
    65586562                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65646568
    65656569/* Line 1806 of yacc.c  */
    6566 #line 1059 "parser.yy"
     6570#line 1063 "parser.yy"
    65676571    {
    65686572                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65746578
    65756579/* Line 1806 of yacc.c  */
    6576 #line 1064 "parser.yy"
     6580#line 1068 "parser.yy"
    65776581    {
    65786582                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    65846588
    65856589/* Line 1806 of yacc.c  */
    6586 #line 1072 "parser.yy"
     6590#line 1076 "parser.yy"
    65876591    {
    65886592                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65946598
    65956599/* Line 1806 of yacc.c  */
    6596 #line 1077 "parser.yy"
     6600#line 1081 "parser.yy"
    65976601    {
    65986602                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66046608
    66056609/* Line 1806 of yacc.c  */
    6606 #line 1082 "parser.yy"
     6610#line 1086 "parser.yy"
    66076611    {
    66086612                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66146618
    66156619/* Line 1806 of yacc.c  */
    6616 #line 1087 "parser.yy"
     6620#line 1091 "parser.yy"
    66176621    {
    66186622                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66246628
    66256629/* Line 1806 of yacc.c  */
    6626 #line 1092 "parser.yy"
     6630#line 1096 "parser.yy"
    66276631    {
    66286632                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    66346638
    66356639/* Line 1806 of yacc.c  */
    6636 #line 1100 "parser.yy"
     6640#line 1104 "parser.yy"
    66376641    {
    66386642                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    66416645
    66426646  case 267:
    6643 
    6644 /* Line 1806 of yacc.c  */
    6645 #line 1123 "parser.yy"
    6646     {
    6647                         (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
    6648                 }
    6649     break;
    6650 
    6651   case 268:
    66526647
    66536648/* Line 1806 of yacc.c  */
     
    66586653    break;
    66596654
     6655  case 268:
     6656
     6657/* Line 1806 of yacc.c  */
     6658#line 1131 "parser.yy"
     6659    {
     6660                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     6661                }
     6662    break;
     6663
    66606664  case 269:
    66616665
    66626666/* Line 1806 of yacc.c  */
    6663 #line 1134 "parser.yy"
     6667#line 1138 "parser.yy"
    66646668    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    66656669    break;
     
    66686672
    66696673/* Line 1806 of yacc.c  */
    6670 #line 1138 "parser.yy"
     6674#line 1142 "parser.yy"
    66716675    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    66726676    break;
     
    66756679
    66766680/* Line 1806 of yacc.c  */
    6677 #line 1143 "parser.yy"
     6681#line 1147 "parser.yy"
    66786682    {
    66796683                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    66856689
    66866690/* Line 1806 of yacc.c  */
    6687 #line 1148 "parser.yy"
     6691#line 1152 "parser.yy"
    66886692    {
    66896693                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    66956699
    66966700/* Line 1806 of yacc.c  */
    6697 #line 1153 "parser.yy"
     6701#line 1157 "parser.yy"
    66986702    {
    66996703                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    67056709
    67066710/* Line 1806 of yacc.c  */
    6707 #line 1164 "parser.yy"
     6711#line 1168 "parser.yy"
    67086712    {
    67096713                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67156719
    67166720/* Line 1806 of yacc.c  */
    6717 #line 1169 "parser.yy"
     6721#line 1173 "parser.yy"
    67186722    {
    67196723                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67256729
    67266730/* Line 1806 of yacc.c  */
    6727 #line 1174 "parser.yy"
     6731#line 1178 "parser.yy"
    67286732    {
    67296733                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67356739
    67366740/* Line 1806 of yacc.c  */
    6737 #line 1179 "parser.yy"
     6741#line 1183 "parser.yy"
    67386742    {
    67396743                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67456749
    67466750/* Line 1806 of yacc.c  */
    6747 #line 1184 "parser.yy"
     6751#line 1188 "parser.yy"
    67486752    {
    67496753                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67556759
    67566760/* Line 1806 of yacc.c  */
    6757 #line 1193 "parser.yy"
     6761#line 1197 "parser.yy"
    67586762    {
    67596763                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    67656769
    67666770/* Line 1806 of yacc.c  */
    6767 #line 1198 "parser.yy"
     6771#line 1202 "parser.yy"
    67686772    {
    67696773                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    67756779
    67766780/* Line 1806 of yacc.c  */
    6777 #line 1215 "parser.yy"
     6781#line 1219 "parser.yy"
    67786782    {
    67796783                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    67856789
    67866790/* Line 1806 of yacc.c  */
    6787 #line 1220 "parser.yy"
     6791#line 1224 "parser.yy"
    67886792    {
    67896793                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    67956799
    67966800/* Line 1806 of yacc.c  */
    6797 #line 1242 "parser.yy"
     6801#line 1246 "parser.yy"
    67986802    { (yyval.decl) = 0; }
    67996803    break;
     
    68026806
    68036807/* Line 1806 of yacc.c  */
    6804 #line 1254 "parser.yy"
     6808#line 1258 "parser.yy"
    68056809    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68066810    break;
     
    68096813
    68106814/* Line 1806 of yacc.c  */
    6811 #line 1265 "parser.yy"
     6815#line 1269 "parser.yy"
    68126816    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    68136817    break;
     
    68166820
    68176821/* Line 1806 of yacc.c  */
    6818 #line 1267 "parser.yy"
     6822#line 1271 "parser.yy"
    68196823    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    68206824    break;
     
    68236827
    68246828/* Line 1806 of yacc.c  */
    6825 #line 1269 "parser.yy"
     6829#line 1273 "parser.yy"
    68266830    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    68276831    break;
     
    68306834
    68316835/* Line 1806 of yacc.c  */
    6832 #line 1271 "parser.yy"
     6836#line 1275 "parser.yy"
    68336837    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    68346838    break;
     
    68376841
    68386842/* Line 1806 of yacc.c  */
    6839 #line 1273 "parser.yy"
     6843#line 1277 "parser.yy"
    68406844    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    68416845    break;
     
    68446848
    68456849/* Line 1806 of yacc.c  */
    6846 #line 1275 "parser.yy"
     6850#line 1279 "parser.yy"
    68476851    {
    68486852                        typedefTable.enterScope();
     
    68536857
    68546858/* Line 1806 of yacc.c  */
    6855 #line 1279 "parser.yy"
     6859#line 1283 "parser.yy"
    68566860    {
    68576861                        typedefTable.leaveScope();
     
    68636867
    68646868/* Line 1806 of yacc.c  */
    6865 #line 1288 "parser.yy"
     6869#line 1292 "parser.yy"
    68666870    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68676871    break;
     
    68706874
    68716875/* Line 1806 of yacc.c  */
    6872 #line 1290 "parser.yy"
     6876#line 1294 "parser.yy"
    68736877    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68746878    break;
     
    68776881
    68786882/* Line 1806 of yacc.c  */
    6879 #line 1301 "parser.yy"
     6883#line 1305 "parser.yy"
    68806884    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68816885    break;
     
    68846888
    68856889/* Line 1806 of yacc.c  */
    6886 #line 1310 "parser.yy"
     6890#line 1314 "parser.yy"
    68876891    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    68886892    break;
     
    68916895
    68926896/* Line 1806 of yacc.c  */
    6893 #line 1312 "parser.yy"
     6897#line 1316 "parser.yy"
    68946898    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    68956899    break;
     
    68986902
    68996903/* Line 1806 of yacc.c  */
    6900 #line 1314 "parser.yy"
     6904#line 1318 "parser.yy"
    69016905    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    69026906    break;
     
    69056909
    69066910/* Line 1806 of yacc.c  */
    6907 #line 1316 "parser.yy"
     6911#line 1320 "parser.yy"
    69086912    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    69096913    break;
     
    69126916
    69136917/* Line 1806 of yacc.c  */
    6914 #line 1318 "parser.yy"
     6918#line 1322 "parser.yy"
    69156919    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    69166920    break;
     
    69196923
    69206924/* Line 1806 of yacc.c  */
    6921 #line 1320 "parser.yy"
     6925#line 1324 "parser.yy"
    69226926    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    69236927    break;
     
    69266930
    69276931/* Line 1806 of yacc.c  */
    6928 #line 1322 "parser.yy"
     6932#line 1326 "parser.yy"
    69296933    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    69306934    break;
     
    69336937
    69346938/* Line 1806 of yacc.c  */
    6935 #line 1324 "parser.yy"
     6939#line 1328 "parser.yy"
    69366940    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    69376941    break;
     
    69406944
    69416945/* Line 1806 of yacc.c  */
    6942 #line 1329 "parser.yy"
     6946#line 1333 "parser.yy"
    69436947    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    69446948    break;
     
    69476951
    69486952/* Line 1806 of yacc.c  */
    6949 #line 1331 "parser.yy"
     6953#line 1335 "parser.yy"
    69506954    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    69516955    break;
     
    69546958
    69556959/* Line 1806 of yacc.c  */
    6956 #line 1333 "parser.yy"
     6960#line 1337 "parser.yy"
    69576961    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    69586962    break;
     
    69616965
    69626966/* Line 1806 of yacc.c  */
    6963 #line 1335 "parser.yy"
     6967#line 1339 "parser.yy"
    69646968    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    69656969    break;
     
    69686972
    69696973/* Line 1806 of yacc.c  */
    6970 #line 1337 "parser.yy"
     6974#line 1341 "parser.yy"
    69716975    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    69726976    break;
     
    69756979
    69766980/* Line 1806 of yacc.c  */
    6977 #line 1339 "parser.yy"
     6981#line 1343 "parser.yy"
    69786982    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    69796983    break;
     
    69826986
    69836987/* Line 1806 of yacc.c  */
    6984 #line 1341 "parser.yy"
     6988#line 1345 "parser.yy"
    69856989    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    69866990    break;
     
    69896993
    69906994/* Line 1806 of yacc.c  */
    6991 #line 1343 "parser.yy"
     6995#line 1347 "parser.yy"
    69926996    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    69936997    break;
     
    69967000
    69977001/* Line 1806 of yacc.c  */
    6998 #line 1345 "parser.yy"
     7002#line 1349 "parser.yy"
    69997003    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    70007004    break;
     
    70037007
    70047008/* Line 1806 of yacc.c  */
    7005 #line 1347 "parser.yy"
     7009#line 1351 "parser.yy"
    70067010    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    70077011    break;
     
    70107014
    70117015/* Line 1806 of yacc.c  */
    7012 #line 1349 "parser.yy"
     7016#line 1353 "parser.yy"
    70137017    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    70147018    break;
     
    70177021
    70187022/* Line 1806 of yacc.c  */
    7019 #line 1351 "parser.yy"
     7023#line 1355 "parser.yy"
    70207024    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    70217025    break;
     
    70247028
    70257029/* Line 1806 of yacc.c  */
    7026 #line 1353 "parser.yy"
     7030#line 1357 "parser.yy"
    70277031    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    70287032    break;
     
    70317035
    70327036/* Line 1806 of yacc.c  */
    7033 #line 1360 "parser.yy"
     7037#line 1364 "parser.yy"
    70347038    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70357039    break;
     
    70387042
    70397043/* Line 1806 of yacc.c  */
    7040 #line 1362 "parser.yy"
     7044#line 1366 "parser.yy"
    70417045    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70427046    break;
     
    70457049
    70467050/* Line 1806 of yacc.c  */
    7047 #line 1364 "parser.yy"
     7051#line 1368 "parser.yy"
    70487052    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    70497053    break;
     
    70527056
    70537057/* Line 1806 of yacc.c  */
    7054 #line 1366 "parser.yy"
     7058#line 1370 "parser.yy"
    70557059    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    70567060    break;
     
    70597063
    70607064/* Line 1806 of yacc.c  */
    7061 #line 1372 "parser.yy"
     7065#line 1376 "parser.yy"
    70627066    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    70637067    break;
     
    70667070
    70677071/* Line 1806 of yacc.c  */
    7068 #line 1379 "parser.yy"
     7072#line 1383 "parser.yy"
    70697073    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70707074    break;
     
    70737077
    70747078/* Line 1806 of yacc.c  */
    7075 #line 1381 "parser.yy"
     7079#line 1385 "parser.yy"
    70767080    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70777081    break;
     
    70807084
    70817085/* Line 1806 of yacc.c  */
    7082 #line 1383 "parser.yy"
     7086#line 1387 "parser.yy"
    70837087    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    70847088    break;
     
    70877091
    70887092/* Line 1806 of yacc.c  */
    7089 #line 1388 "parser.yy"
     7093#line 1392 "parser.yy"
    70907094    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    70917095    break;
     
    70947098
    70957099/* Line 1806 of yacc.c  */
    7096 #line 1390 "parser.yy"
     7100#line 1394 "parser.yy"
    70977101    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    70987102    break;
     
    71017105
    71027106/* Line 1806 of yacc.c  */
    7103 #line 1392 "parser.yy"
     7107#line 1396 "parser.yy"
    71047108    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    71057109    break;
     
    71087112
    71097113/* Line 1806 of yacc.c  */
    7110 #line 1394 "parser.yy"
     7114#line 1398 "parser.yy"
    71117115    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    71127116    break;
     
    71157119
    71167120/* Line 1806 of yacc.c  */
    7117 #line 1400 "parser.yy"
     7121#line 1404 "parser.yy"
    71187122    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71197123    break;
     
    71227126
    71237127/* Line 1806 of yacc.c  */
    7124 #line 1402 "parser.yy"
     7128#line 1406 "parser.yy"
    71257129    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71267130    break;
     
    71297133
    71307134/* Line 1806 of yacc.c  */
    7131 #line 1404 "parser.yy"
     7135#line 1408 "parser.yy"
    71327136    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    71337137    break;
     
    71367140
    71377141/* Line 1806 of yacc.c  */
    7138 #line 1410 "parser.yy"
     7142#line 1414 "parser.yy"
    71397143    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71407144    break;
     
    71437147
    71447148/* Line 1806 of yacc.c  */
    7145 #line 1412 "parser.yy"
     7149#line 1416 "parser.yy"
    71467150    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71477151    break;
     
    71507154
    71517155/* Line 1806 of yacc.c  */
    7152 #line 1418 "parser.yy"
     7156#line 1422 "parser.yy"
    71537157    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71547158    break;
     
    71577161
    71587162/* Line 1806 of yacc.c  */
    7159 #line 1420 "parser.yy"
     7163#line 1424 "parser.yy"
    71607164    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71617165    break;
     
    71647168
    71657169/* Line 1806 of yacc.c  */
    7166 #line 1422 "parser.yy"
     7170#line 1426 "parser.yy"
    71677171    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    71687172    break;
     
    71717175
    71727176/* Line 1806 of yacc.c  */
    7173 #line 1427 "parser.yy"
     7177#line 1431 "parser.yy"
    71747178    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    71757179    break;
     
    71787182
    71797183/* Line 1806 of yacc.c  */
    7180 #line 1429 "parser.yy"
     7184#line 1433 "parser.yy"
    71817185    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71827186    break;
     
    71857189
    71867190/* Line 1806 of yacc.c  */
    7187 #line 1431 "parser.yy"
     7191#line 1435 "parser.yy"
    71887192    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71897193    break;
     
    71927196
    71937197/* Line 1806 of yacc.c  */
    7194 #line 1441 "parser.yy"
     7198#line 1445 "parser.yy"
    71957199    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    71967200    break;
     
    71997203
    72007204/* Line 1806 of yacc.c  */
    7201 #line 1443 "parser.yy"
     7205#line 1447 "parser.yy"
    72027206    {
    72037207                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    72097213
    72107214/* Line 1806 of yacc.c  */
    7211 #line 1448 "parser.yy"
     7215#line 1452 "parser.yy"
    72127216    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    72137217    break;
     
    72167220
    72177221/* Line 1806 of yacc.c  */
    7218 #line 1450 "parser.yy"
     7222#line 1454 "parser.yy"
    72197223    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }
    72207224    break;
     
    72237227
    72247228/* Line 1806 of yacc.c  */
    7225 #line 1452 "parser.yy"
     7229#line 1456 "parser.yy"
    72267230    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    72277231    break;
     
    72307234
    72317235/* Line 1806 of yacc.c  */
    7232 #line 1454 "parser.yy"
     7236#line 1458 "parser.yy"
    72337237    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    72347238    break;
     
    72377241
    72387242/* Line 1806 of yacc.c  */
    7239 #line 1459 "parser.yy"
     7243#line 1463 "parser.yy"
    72407244    { (yyval.aggKey) = DeclarationNode::Struct; }
    72417245    break;
     
    72447248
    72457249/* Line 1806 of yacc.c  */
    7246 #line 1461 "parser.yy"
     7250#line 1465 "parser.yy"
    72477251    { (yyval.aggKey) = DeclarationNode::Union; }
    72487252    break;
     
    72517255
    72527256/* Line 1806 of yacc.c  */
    7253 #line 1466 "parser.yy"
     7257#line 1470 "parser.yy"
    72547258    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    72557259    break;
     
    72587262
    72597263/* Line 1806 of yacc.c  */
    7260 #line 1468 "parser.yy"
     7264#line 1472 "parser.yy"
    72617265    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    72627266    break;
     
    72657269
    72667270/* Line 1806 of yacc.c  */
    7267 #line 1474 "parser.yy"
    7268     { (yyval.decl) = (yyvsp[(2) - (3)].decl)/*->set_extension( true )*/; }
     7271#line 1478 "parser.yy"
     7272    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
    72697273    break;
    72707274
     
    72727276
    72737277/* Line 1806 of yacc.c  */
    7274 #line 1477 "parser.yy"
    7275     { (yyval.decl) = (yyvsp[(2) - (3)].decl)/*->set_extension( true )*/; }
     7278#line 1481 "parser.yy"
     7279    {   // mark all fields in list
     7280                        for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     7281                                iter->set_extension( true );
     7282                        (yyval.decl) = (yyvsp[(2) - (3)].decl);
     7283                }
    72767284    break;
    72777285
     
    72797287
    72807288/* Line 1806 of yacc.c  */
    7281 #line 1483 "parser.yy"
     7289#line 1491 "parser.yy"
    72827290    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    72837291    break;
     
    72867294
    72877295/* Line 1806 of yacc.c  */
    7288 #line 1485 "parser.yy"
     7296#line 1493 "parser.yy"
    72897297    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    72907298    break;
     
    72937301
    72947302/* Line 1806 of yacc.c  */
    7295 #line 1487 "parser.yy"
     7303#line 1495 "parser.yy"
    72967304    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    72977305    break;
     
    73007308
    73017309/* Line 1806 of yacc.c  */
    7302 #line 1492 "parser.yy"
     7310#line 1500 "parser.yy"
    73037311    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73047312    break;
     
    73077315
    73087316/* Line 1806 of yacc.c  */
    7309 #line 1494 "parser.yy"
     7317#line 1502 "parser.yy"
    73107318    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    73117319    break;
     
    73147322
    73157323/* Line 1806 of yacc.c  */
    7316 #line 1499 "parser.yy"
     7324#line 1507 "parser.yy"
    73177325    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    73187326    break;
     
    73217329
    73227330/* Line 1806 of yacc.c  */
    7323 #line 1501 "parser.yy"
     7331#line 1509 "parser.yy"
    73247332    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    73257333    break;
     
    73287336
    73297337/* Line 1806 of yacc.c  */
    7330 #line 1504 "parser.yy"
     7338#line 1512 "parser.yy"
    73317339    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    73327340    break;
     
    73357343
    73367344/* Line 1806 of yacc.c  */
    7337 #line 1507 "parser.yy"
     7345#line 1515 "parser.yy"
    73387346    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    73397347    break;
     
    73427350
    73437351/* Line 1806 of yacc.c  */
    7344 #line 1513 "parser.yy"
     7352#line 1521 "parser.yy"
    73457353    { (yyval.en) = 0; }
    73467354    break;
     
    73497357
    73507358/* Line 1806 of yacc.c  */
    7351 #line 1515 "parser.yy"
     7359#line 1523 "parser.yy"
    73527360    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    73537361    break;
     
    73567364
    73577365/* Line 1806 of yacc.c  */
    7358 #line 1520 "parser.yy"
     7366#line 1528 "parser.yy"
    73597367    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    73607368    break;
     
    73637371
    73647372/* Line 1806 of yacc.c  */
    7365 #line 1529 "parser.yy"
     7373#line 1537 "parser.yy"
    73667374    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    73677375    break;
     
    73707378
    73717379/* Line 1806 of yacc.c  */
    7372 #line 1531 "parser.yy"
     7380#line 1539 "parser.yy"
    73737381    {
    73747382                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    73807388
    73817389/* Line 1806 of yacc.c  */
    7382 #line 1536 "parser.yy"
     7390#line 1544 "parser.yy"
    73837391    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    73847392    break;
     
    73877395
    73887396/* Line 1806 of yacc.c  */
    7389 #line 1538 "parser.yy"
     7397#line 1546 "parser.yy"
    73907398    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
    73917399    break;
     
    73947402
    73957403/* Line 1806 of yacc.c  */
    7396 #line 1543 "parser.yy"
     7404#line 1551 "parser.yy"
    73977405    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    73987406    break;
     
    74017409
    74027410/* Line 1806 of yacc.c  */
    7403 #line 1545 "parser.yy"
     7411#line 1553 "parser.yy"
    74047412    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    74057413    break;
     
    74087416
    74097417/* Line 1806 of yacc.c  */
    7410 #line 1550 "parser.yy"
     7418#line 1558 "parser.yy"
    74117419    { (yyval.en) = 0; }
    74127420    break;
     
    74157423
    74167424/* Line 1806 of yacc.c  */
    7417 #line 1552 "parser.yy"
     7425#line 1560 "parser.yy"
    74187426    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    74197427    break;
     
    74227430
    74237431/* Line 1806 of yacc.c  */
    7424 #line 1559 "parser.yy"
     7432#line 1567 "parser.yy"
    74257433    { (yyval.decl) = 0; }
    74267434    break;
     
    74297437
    74307438/* Line 1806 of yacc.c  */
    7431 #line 1567 "parser.yy"
     7439#line 1575 "parser.yy"
    74327440    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74337441    break;
     
    74367444
    74377445/* Line 1806 of yacc.c  */
    7438 #line 1569 "parser.yy"
     7446#line 1577 "parser.yy"
    74397447    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74407448    break;
     
    74437451
    74447452/* Line 1806 of yacc.c  */
    7445 #line 1571 "parser.yy"
     7453#line 1579 "parser.yy"
    74467454    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74477455    break;
     
    74507458
    74517459/* Line 1806 of yacc.c  */
    7452 #line 1579 "parser.yy"
     7460#line 1587 "parser.yy"
    74537461    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74547462    break;
    74557463
    74567464  case 412:
    7457 
    7458 /* Line 1806 of yacc.c  */
    7459 #line 1581 "parser.yy"
    7460     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7461     break;
    7462 
    7463   case 413:
    7464 
    7465 /* Line 1806 of yacc.c  */
    7466 #line 1583 "parser.yy"
    7467     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    7468     break;
    7469 
    7470   case 415:
    74717465
    74727466/* Line 1806 of yacc.c  */
     
    74757469    break;
    74767470
     7471  case 413:
     7472
     7473/* Line 1806 of yacc.c  */
     7474#line 1591 "parser.yy"
     7475    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     7476    break;
     7477
     7478  case 415:
     7479
     7480/* Line 1806 of yacc.c  */
     7481#line 1597 "parser.yy"
     7482    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7483    break;
     7484
    74777485  case 416:
    74787486
    74797487/* Line 1806 of yacc.c  */
    7480 #line 1594 "parser.yy"
     7488#line 1602 "parser.yy"
    74817489    { (yyval.decl) = 0; }
    74827490    break;
     
    74857493
    74867494/* Line 1806 of yacc.c  */
    7487 #line 1601 "parser.yy"
     7495#line 1609 "parser.yy"
    74887496    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74897497    break;
     
    74927500
    74937501/* Line 1806 of yacc.c  */
    7494 #line 1608 "parser.yy"
     7502#line 1616 "parser.yy"
    74957503    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74967504    break;
     
    74997507
    75007508/* Line 1806 of yacc.c  */
    7501 #line 1610 "parser.yy"
     7509#line 1618 "parser.yy"
    75027510    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    75037511    break;
     
    75067514
    75077515/* Line 1806 of yacc.c  */
    7508 #line 1619 "parser.yy"
     7516#line 1627 "parser.yy"
    75097517    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    75107518    break;
     
    75137521
    75147522/* Line 1806 of yacc.c  */
    7515 #line 1622 "parser.yy"
     7523#line 1630 "parser.yy"
    75167524    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    75177525    break;
     
    75207528
    75217529/* Line 1806 of yacc.c  */
    7522 #line 1624 "parser.yy"
     7530#line 1632 "parser.yy"
    75237531    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    75247532    break;
     
    75277535
    75287536/* Line 1806 of yacc.c  */
    7529 #line 1634 "parser.yy"
     7537#line 1642 "parser.yy"
    75307538    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75317539    break;
     
    75347542
    75357543/* Line 1806 of yacc.c  */
    7536 #line 1640 "parser.yy"
     7544#line 1648 "parser.yy"
    75377545    {
    75387546                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75447552
    75457553/* Line 1806 of yacc.c  */
    7546 #line 1645 "parser.yy"
     7554#line 1653 "parser.yy"
    75477555    {
    75487556                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75547562
    75557563/* Line 1806 of yacc.c  */
    7556 #line 1654 "parser.yy"
     7564#line 1662 "parser.yy"
    75577565    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    75587566    break;
     
    75617569
    75627570/* Line 1806 of yacc.c  */
    7563 #line 1663 "parser.yy"
     7571#line 1671 "parser.yy"
    75647572    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    75657573    break;
     
    75687576
    75697577/* Line 1806 of yacc.c  */
    7570 #line 1665 "parser.yy"
     7578#line 1673 "parser.yy"
    75717579    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    75727580    break;
    75737581
    75747582  case 451:
    7575 
    7576 /* Line 1806 of yacc.c  */
    7577 #line 1690 "parser.yy"
    7578     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    7579     break;
    7580 
    7581   case 455:
    75827583
    75837584/* Line 1806 of yacc.c  */
     
    75867587    break;
    75877588
     7589  case 455:
     7590
     7591/* Line 1806 of yacc.c  */
     7592#line 1706 "parser.yy"
     7593    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7594    break;
     7595
    75887596  case 456:
    75897597
    75907598/* Line 1806 of yacc.c  */
    7591 #line 1703 "parser.yy"
     7599#line 1711 "parser.yy"
    75927600    { (yyval.in) = 0; }
    75937601    break;
     
    75967604
    75977605/* Line 1806 of yacc.c  */
    7598 #line 1705 "parser.yy"
     7606#line 1713 "parser.yy"
    75997607    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    76007608    break;
     
    76037611
    76047612/* Line 1806 of yacc.c  */
    7605 #line 1707 "parser.yy"
     7613#line 1715 "parser.yy"
    76067614    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
    76077615    break;
     
    76107618
    76117619/* Line 1806 of yacc.c  */
    7612 #line 1711 "parser.yy"
     7620#line 1719 "parser.yy"
    76137621    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    76147622    break;
     
    76177625
    76187626/* Line 1806 of yacc.c  */
    7619 #line 1712 "parser.yy"
     7627#line 1720 "parser.yy"
    76207628    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    76217629    break;
     
    76247632
    76257633/* Line 1806 of yacc.c  */
    7626 #line 1717 "parser.yy"
     7634#line 1725 "parser.yy"
    76277635    { (yyval.in) = 0; }
    76287636    break;
     
    76317639
    76327640/* Line 1806 of yacc.c  */
    7633 #line 1719 "parser.yy"
     7641#line 1727 "parser.yy"
    76347642    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    76357643    break;
     
    76387646
    76397647/* Line 1806 of yacc.c  */
    7640 #line 1720 "parser.yy"
     7648#line 1728 "parser.yy"
    76417649    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    76427650    break;
     
    76457653
    76467654/* Line 1806 of yacc.c  */
    7647 #line 1722 "parser.yy"
     7655#line 1730 "parser.yy"
    76487656    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    76497657    break;
     
    76527660
    76537661/* Line 1806 of yacc.c  */
    7654 #line 1738 "parser.yy"
     7662#line 1746 "parser.yy"
    76557663    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    76567664    break;
     
    76597667
    76607668/* Line 1806 of yacc.c  */
    7661 #line 1744 "parser.yy"
     7669#line 1752 "parser.yy"
    76627670    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    76637671    break;
     
    76667674
    76677675/* Line 1806 of yacc.c  */
    7668 #line 1752 "parser.yy"
     7676#line 1760 "parser.yy"
    76697677    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    76707678    break;
     
    76737681
    76747682/* Line 1806 of yacc.c  */
    7675 #line 1754 "parser.yy"
     7683#line 1762 "parser.yy"
    76767684    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    76777685    break;
     
    76807688
    76817689/* Line 1806 of yacc.c  */
    7682 #line 1757 "parser.yy"
     7690#line 1765 "parser.yy"
    76837691    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    76847692    break;
     
    76877695
    76887696/* Line 1806 of yacc.c  */
    7689 #line 1759 "parser.yy"
     7697#line 1767 "parser.yy"
    76907698    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    76917699    break;
     
    76947702
    76957703/* Line 1806 of yacc.c  */
    7696 #line 1761 "parser.yy"
     7704#line 1769 "parser.yy"
    76977705    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    76987706    break;
     
    77017709
    77027710/* Line 1806 of yacc.c  */
    7703 #line 1763 "parser.yy"
     7711#line 1771 "parser.yy"
    77047712    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    77057713    break;
     
    77087716
    77097717/* Line 1806 of yacc.c  */
    7710 #line 1787 "parser.yy"
     7718#line 1795 "parser.yy"
    77117719    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77127720    break;
     
    77157723
    77167724/* Line 1806 of yacc.c  */
    7717 #line 1789 "parser.yy"
     7725#line 1797 "parser.yy"
    77187726    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77197727    break;
     
    77227730
    77237731/* Line 1806 of yacc.c  */
    7724 #line 1791 "parser.yy"
     7732#line 1799 "parser.yy"
    77257733    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    77267734    break;
     
    77297737
    77307738/* Line 1806 of yacc.c  */
    7731 #line 1797 "parser.yy"
     7739#line 1805 "parser.yy"
    77327740    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77337741    break;
     
    77367744
    77377745/* Line 1806 of yacc.c  */
    7738 #line 1799 "parser.yy"
     7746#line 1807 "parser.yy"
    77397747    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77407748    break;
     
    77437751
    77447752/* Line 1806 of yacc.c  */
    7745 #line 1804 "parser.yy"
     7753#line 1812 "parser.yy"
    77467754    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    77477755    break;
     
    77507758
    77517759/* Line 1806 of yacc.c  */
    7752 #line 1810 "parser.yy"
     7760#line 1818 "parser.yy"
    77537761    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    77547762    break;
     
    77577765
    77587766/* Line 1806 of yacc.c  */
    7759 #line 1815 "parser.yy"
     7767#line 1823 "parser.yy"
    77607768    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    77617769    break;
     
    77647772
    77657773/* Line 1806 of yacc.c  */
    7766 #line 1817 "parser.yy"
     7774#line 1825 "parser.yy"
    77677775    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    77687776    break;
     
    77717779
    77727780/* Line 1806 of yacc.c  */
    7773 #line 1823 "parser.yy"
     7781#line 1831 "parser.yy"
    77747782    { (yyval.tclass) = DeclarationNode::Type; }
    77757783    break;
     
    77787786
    77797787/* Line 1806 of yacc.c  */
    7780 #line 1825 "parser.yy"
     7788#line 1833 "parser.yy"
    77817789    { (yyval.tclass) = DeclarationNode::Ftype; }
    77827790    break;
     
    77857793
    77867794/* Line 1806 of yacc.c  */
    7787 #line 1827 "parser.yy"
     7795#line 1835 "parser.yy"
    77887796    { (yyval.tclass) = DeclarationNode::Dtype; }
    77897797    break;
     
    77927800
    77937801/* Line 1806 of yacc.c  */
    7794 #line 1832 "parser.yy"
     7802#line 1840 "parser.yy"
    77957803    { (yyval.decl) = 0; }
    77967804    break;
     
    77997807
    78007808/* Line 1806 of yacc.c  */
    7801 #line 1834 "parser.yy"
     7809#line 1842 "parser.yy"
    78027810    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    78037811    break;
     
    78067814
    78077815/* Line 1806 of yacc.c  */
    7808 #line 1839 "parser.yy"
     7816#line 1847 "parser.yy"
    78097817    {
    78107818                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    78167824
    78177825/* Line 1806 of yacc.c  */
    7818 #line 1844 "parser.yy"
     7826#line 1852 "parser.yy"
    78197827    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    78207828    break;
     
    78237831
    78247832/* Line 1806 of yacc.c  */
    7825 #line 1846 "parser.yy"
     7833#line 1854 "parser.yy"
    78267834    { (yyval.decl) = 0; }
    78277835    break;
     
    78307838
    78317839/* Line 1806 of yacc.c  */
    7832 #line 1851 "parser.yy"
     7840#line 1859 "parser.yy"
    78337841    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    78347842    break;
     
    78377845
    78387846/* Line 1806 of yacc.c  */
    7839 #line 1854 "parser.yy"
     7847#line 1862 "parser.yy"
    78407848    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    78417849    break;
     
    78447852
    78457853/* Line 1806 of yacc.c  */
    7846 #line 1856 "parser.yy"
     7854#line 1864 "parser.yy"
    78477855    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    78487856    break;
     
    78517859
    78527860/* Line 1806 of yacc.c  */
    7853 #line 1861 "parser.yy"
     7861#line 1869 "parser.yy"
    78547862    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78557863    break;
     
    78587866
    78597867/* Line 1806 of yacc.c  */
    7860 #line 1863 "parser.yy"
     7868#line 1871 "parser.yy"
    78617869    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    78627870    break;
     
    78657873
    78667874/* Line 1806 of yacc.c  */
    7867 #line 1865 "parser.yy"
     7875#line 1873 "parser.yy"
    78687876    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    78697877    break;
     
    78727880
    78737881/* Line 1806 of yacc.c  */
    7874 #line 1870 "parser.yy"
     7882#line 1878 "parser.yy"
    78757883    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    78767884    break;
     
    78797887
    78807888/* Line 1806 of yacc.c  */
    7881 #line 1872 "parser.yy"
     7889#line 1880 "parser.yy"
    78827890    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    78837891    break;
     
    78867894
    78877895/* Line 1806 of yacc.c  */
    7888 #line 1877 "parser.yy"
     7896#line 1885 "parser.yy"
    78897897    {
    78907898                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    78967904
    78977905/* Line 1806 of yacc.c  */
    7898 #line 1882 "parser.yy"
     7906#line 1890 "parser.yy"
    78997907    {
    79007908                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    79067914
    79077915/* Line 1806 of yacc.c  */
    7908 #line 1890 "parser.yy"
     7916#line 1898 "parser.yy"
    79097917    {
    79107918                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    79167924
    79177925/* Line 1806 of yacc.c  */
    7918 #line 1895 "parser.yy"
     7926#line 1903 "parser.yy"
    79197927    {
    79207928                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    79267934
    79277935/* Line 1806 of yacc.c  */
    7928 #line 1900 "parser.yy"
     7936#line 1908 "parser.yy"
    79297937    {
    79307938                        typedefTable.leaveTrait();
     
    79377945
    79387946/* Line 1806 of yacc.c  */
    7939 #line 1910 "parser.yy"
     7947#line 1918 "parser.yy"
    79407948    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    79417949    break;
     
    79447952
    79457953/* Line 1806 of yacc.c  */
    7946 #line 1920 "parser.yy"
     7954#line 1928 "parser.yy"
    79477955    {
    79487956                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79547962
    79557963/* Line 1806 of yacc.c  */
    7956 #line 1925 "parser.yy"
     7964#line 1933 "parser.yy"
    79577965    {
    79587966                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79647972
    79657973/* Line 1806 of yacc.c  */
    7966 #line 1930 "parser.yy"
     7974#line 1938 "parser.yy"
    79677975    {
    79687976                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    79747982
    79757983/* Line 1806 of yacc.c  */
    7976 #line 1938 "parser.yy"
     7984#line 1946 "parser.yy"
    79777985    {
    79787986                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79847992
    79857993/* Line 1806 of yacc.c  */
    7986 #line 1943 "parser.yy"
     7994#line 1951 "parser.yy"
    79877995    {
    79887996                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79948002
    79958003/* Line 1806 of yacc.c  */
    7996 #line 1953 "parser.yy"
     8004#line 1961 "parser.yy"
    79978005    {}
    79988006    break;
     
    80018009
    80028010/* Line 1806 of yacc.c  */
    8003 #line 1955 "parser.yy"
     8011#line 1963 "parser.yy"
    80048012    {
    80058013                        if ( theTree ) {
     
    80148022
    80158023/* Line 1806 of yacc.c  */
    8016 #line 1967 "parser.yy"
     8024#line 1975 "parser.yy"
    80178025    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    80188026    break;
     
    80218029
    80228030/* Line 1806 of yacc.c  */
    8023 #line 1972 "parser.yy"
     8031#line 1980 "parser.yy"
    80248032    { (yyval.decl) = 0; }
    80258033    break;
     
    80288036
    80298037/* Line 1806 of yacc.c  */
    8030 #line 1980 "parser.yy"
     8038#line 1988 "parser.yy"
    80318039    {}
    80328040    break;
     
    80358043
    80368044/* Line 1806 of yacc.c  */
    8037 #line 1982 "parser.yy"
     8045#line 1990 "parser.yy"
    80388046    {
    80398047                        linkageStack.push( linkage );
     
    80458053
    80468054/* Line 1806 of yacc.c  */
    8047 #line 1987 "parser.yy"
     8055#line 1995 "parser.yy"
    80488056    {
    80498057                        linkage = linkageStack.top();
     
    80568064
    80578065/* Line 1806 of yacc.c  */
    8058 #line 1993 "parser.yy"
    8059     { (yyval.decl) = (yyvsp[(2) - (2)].decl)/*->set_extension( true )*/; }
     8066#line 2001 "parser.yy"
     8067    {   // mark all fields in list
     8068                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     8069                                iter->set_extension( true );
     8070                        (yyval.decl) = (yyvsp[(2) - (2)].decl);
     8071                }
    80608072    break;
    80618073
     
    80638075
    80648076/* Line 1806 of yacc.c  */
    8065 #line 2004 "parser.yy"
     8077#line 2016 "parser.yy"
    80668078    {
    80678079                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80748086
    80758087/* Line 1806 of yacc.c  */
    8076 #line 2010 "parser.yy"
     8088#line 2022 "parser.yy"
    80778089    {
    80788090                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80858097
    80868098/* Line 1806 of yacc.c  */
    8087 #line 2019 "parser.yy"
     8099#line 2031 "parser.yy"
    80888100    {
    80898101                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80968108
    80978109/* Line 1806 of yacc.c  */
    8098 #line 2025 "parser.yy"
     8110#line 2037 "parser.yy"
    80998111    {
    81008112                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81078119
    81088120/* Line 1806 of yacc.c  */
    8109 #line 2031 "parser.yy"
     8121#line 2043 "parser.yy"
    81108122    {
    81118123                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81188130
    81198131/* Line 1806 of yacc.c  */
    8120 #line 2037 "parser.yy"
     8132#line 2049 "parser.yy"
    81218133    {
    81228134                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81298141
    81308142/* Line 1806 of yacc.c  */
    8131 #line 2043 "parser.yy"
     8143#line 2055 "parser.yy"
    81328144    {
    81338145                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81408152
    81418153/* Line 1806 of yacc.c  */
    8142 #line 2051 "parser.yy"
     8154#line 2063 "parser.yy"
    81438155    {
    81448156                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81518163
    81528164/* Line 1806 of yacc.c  */
    8153 #line 2057 "parser.yy"
     8165#line 2069 "parser.yy"
    81548166    {
    81558167                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81628174
    81638175/* Line 1806 of yacc.c  */
    8164 #line 2065 "parser.yy"
     8176#line 2077 "parser.yy"
    81658177    {
    81668178                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81738185
    81748186/* Line 1806 of yacc.c  */
    8175 #line 2071 "parser.yy"
     8187#line 2083 "parser.yy"
    81768188    {
    81778189                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81848196
    81858197/* Line 1806 of yacc.c  */
    8186 #line 2086 "parser.yy"
     8198#line 2098 "parser.yy"
    81878199    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    81888200    break;
     
    81918203
    81928204/* Line 1806 of yacc.c  */
    8193 #line 2096 "parser.yy"
     8205#line 2108 "parser.yy"
    81948206    { (yyval.decl) = 0; }
    81958207    break;
     
    81988210
    81998211/* Line 1806 of yacc.c  */
    8200 #line 2103 "parser.yy"
     8212#line 2115 "parser.yy"
    82018213    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    82028214    break;
     
    82058217
    82068218/* Line 1806 of yacc.c  */
    8207 #line 2109 "parser.yy"
     8219#line 2121 "parser.yy"
    82088220    { (yyval.decl) = 0; }
    82098221    break;
     
    82128224
    82138225/* Line 1806 of yacc.c  */
    8214 #line 2124 "parser.yy"
     8226#line 2136 "parser.yy"
    82158227    {}
    82168228    break;
     
    82198231
    82208232/* Line 1806 of yacc.c  */
    8221 #line 2125 "parser.yy"
     8233#line 2137 "parser.yy"
    82228234    {}
    82238235    break;
     
    82268238
    82278239/* Line 1806 of yacc.c  */
    8228 #line 2126 "parser.yy"
     8240#line 2138 "parser.yy"
    82298241    {}
    82308242    break;
     
    82338245
    82348246/* Line 1806 of yacc.c  */
    8235 #line 2127 "parser.yy"
     8247#line 2139 "parser.yy"
    82368248    {}
    82378249    break;
     
    82408252
    82418253/* Line 1806 of yacc.c  */
    8242 #line 2162 "parser.yy"
     8254#line 2174 "parser.yy"
    82438255    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82448256    break;
     
    82478259
    82488260/* Line 1806 of yacc.c  */
    8249 #line 2165 "parser.yy"
     8261#line 2177 "parser.yy"
    82508262    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82518263    break;
     
    82548266
    82558267/* Line 1806 of yacc.c  */
    8256 #line 2167 "parser.yy"
     8268#line 2179 "parser.yy"
    82578269    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82588270    break;
     
    82618273
    82628274/* Line 1806 of yacc.c  */
    8263 #line 2172 "parser.yy"
     8275#line 2184 "parser.yy"
    82648276    {
    82658277                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    82718283
    82728284/* Line 1806 of yacc.c  */
    8273 #line 2177 "parser.yy"
     8285#line 2189 "parser.yy"
    82748286    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82758287    break;
     
    82788290
    82798291/* Line 1806 of yacc.c  */
    8280 #line 2182 "parser.yy"
     8292#line 2194 "parser.yy"
    82818293    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82828294    break;
     
    82858297
    82868298/* Line 1806 of yacc.c  */
    8287 #line 2184 "parser.yy"
     8299#line 2196 "parser.yy"
    82888300    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82898301    break;
     
    82928304
    82938305/* Line 1806 of yacc.c  */
    8294 #line 2186 "parser.yy"
     8306#line 2198 "parser.yy"
    82958307    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82968308    break;
     
    82998311
    83008312/* Line 1806 of yacc.c  */
    8301 #line 2191 "parser.yy"
     8313#line 2203 "parser.yy"
    83028314    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83038315    break;
     
    83068318
    83078319/* Line 1806 of yacc.c  */
    8308 #line 2193 "parser.yy"
     8320#line 2205 "parser.yy"
    83098321    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83108322    break;
     
    83138325
    83148326/* Line 1806 of yacc.c  */
    8315 #line 2195 "parser.yy"
     8327#line 2207 "parser.yy"
    83168328    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83178329    break;
     
    83208332
    83218333/* Line 1806 of yacc.c  */
    8322 #line 2197 "parser.yy"
     8334#line 2209 "parser.yy"
    83238335    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83248336    break;
     
    83278339
    83288340/* Line 1806 of yacc.c  */
    8329 #line 2202 "parser.yy"
     8341#line 2214 "parser.yy"
    83308342    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83318343    break;
     
    83348346
    83358347/* Line 1806 of yacc.c  */
    8336 #line 2204 "parser.yy"
     8348#line 2216 "parser.yy"
    83378349    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83388350    break;
     
    83418353
    83428354/* Line 1806 of yacc.c  */
    8343 #line 2213 "parser.yy"
     8355#line 2225 "parser.yy"
    83448356    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83458357    break;
     
    83488360
    83498361/* Line 1806 of yacc.c  */
    8350 #line 2216 "parser.yy"
     8362#line 2228 "parser.yy"
    83518363    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83528364    break;
     
    83558367
    83568368/* Line 1806 of yacc.c  */
    8357 #line 2221 "parser.yy"
     8369#line 2233 "parser.yy"
    83588370    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83598371    break;
     
    83628374
    83638375/* Line 1806 of yacc.c  */
    8364 #line 2223 "parser.yy"
     8376#line 2235 "parser.yy"
    83658377    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83668378    break;
     
    83698381
    83708382/* Line 1806 of yacc.c  */
    8371 #line 2225 "parser.yy"
     8383#line 2237 "parser.yy"
    83728384    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83738385    break;
     
    83768388
    83778389/* Line 1806 of yacc.c  */
    8378 #line 2230 "parser.yy"
     8390#line 2242 "parser.yy"
    83798391    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83808392    break;
     
    83838395
    83848396/* Line 1806 of yacc.c  */
    8385 #line 2232 "parser.yy"
     8397#line 2244 "parser.yy"
    83868398    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83878399    break;
     
    83908402
    83918403/* Line 1806 of yacc.c  */
    8392 #line 2234 "parser.yy"
     8404#line 2246 "parser.yy"
    83938405    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83948406    break;
     
    83978409
    83988410/* Line 1806 of yacc.c  */
    8399 #line 2239 "parser.yy"
     8411#line 2251 "parser.yy"
    84008412    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84018413    break;
     
    84048416
    84058417/* Line 1806 of yacc.c  */
    8406 #line 2241 "parser.yy"
     8418#line 2253 "parser.yy"
    84078419    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84088420    break;
     
    84118423
    84128424/* Line 1806 of yacc.c  */
    8413 #line 2243 "parser.yy"
     8425#line 2255 "parser.yy"
    84148426    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84158427    break;
     
    84188430
    84198431/* Line 1806 of yacc.c  */
    8420 #line 2258 "parser.yy"
     8432#line 2270 "parser.yy"
    84218433    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    84228434    break;
     
    84258437
    84268438/* Line 1806 of yacc.c  */
    8427 #line 2260 "parser.yy"
     8439#line 2272 "parser.yy"
    84288440    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    84298441    break;
     
    84328444
    84338445/* Line 1806 of yacc.c  */
    8434 #line 2262 "parser.yy"
     8446#line 2274 "parser.yy"
    84358447    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84368448    break;
     
    84398451
    84408452/* Line 1806 of yacc.c  */
    8441 #line 2267 "parser.yy"
     8453#line 2279 "parser.yy"
    84428454    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84438455    break;
     
    84468458
    84478459/* Line 1806 of yacc.c  */
    8448 #line 2269 "parser.yy"
     8460#line 2281 "parser.yy"
    84498461    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84508462    break;
     
    84538465
    84548466/* Line 1806 of yacc.c  */
    8455 #line 2271 "parser.yy"
     8467#line 2283 "parser.yy"
    84568468    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84578469    break;
     
    84608472
    84618473/* Line 1806 of yacc.c  */
    8462 #line 2276 "parser.yy"
     8474#line 2288 "parser.yy"
    84638475    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84648476    break;
     
    84678479
    84688480/* Line 1806 of yacc.c  */
    8469 #line 2278 "parser.yy"
     8481#line 2290 "parser.yy"
    84708482    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84718483    break;
     
    84748486
    84758487/* Line 1806 of yacc.c  */
    8476 #line 2280 "parser.yy"
     8488#line 2292 "parser.yy"
    84778489    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84788490    break;
     
    84818493
    84828494/* Line 1806 of yacc.c  */
    8483 #line 2295 "parser.yy"
     8495#line 2307 "parser.yy"
    84848496    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84858497    break;
     
    84888500
    84898501/* Line 1806 of yacc.c  */
    8490 #line 2298 "parser.yy"
     8502#line 2310 "parser.yy"
    84918503    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84928504    break;
     
    84958507
    84968508/* Line 1806 of yacc.c  */
    8497 #line 2300 "parser.yy"
     8509#line 2312 "parser.yy"
    84988510    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84998511    break;
     
    85028514
    85038515/* Line 1806 of yacc.c  */
    8504 #line 2306 "parser.yy"
     8516#line 2318 "parser.yy"
    85058517    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85068518    break;
     
    85098521
    85108522/* Line 1806 of yacc.c  */
    8511 #line 2311 "parser.yy"
     8523#line 2323 "parser.yy"
    85128524    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85138525    break;
     
    85168528
    85178529/* Line 1806 of yacc.c  */
    8518 #line 2313 "parser.yy"
     8530#line 2325 "parser.yy"
    85198531    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85208532    break;
     
    85238535
    85248536/* Line 1806 of yacc.c  */
    8525 #line 2315 "parser.yy"
     8537#line 2327 "parser.yy"
    85268538    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85278539    break;
     
    85308542
    85318543/* Line 1806 of yacc.c  */
    8532 #line 2320 "parser.yy"
     8544#line 2332 "parser.yy"
    85338545    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    85348546    break;
     
    85378549
    85388550/* Line 1806 of yacc.c  */
    8539 #line 2322 "parser.yy"
     8551#line 2334 "parser.yy"
    85408552    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85418553    break;
     
    85448556
    85458557/* Line 1806 of yacc.c  */
    8546 #line 2324 "parser.yy"
     8558#line 2336 "parser.yy"
    85478559    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85488560    break;
     
    85518563
    85528564/* Line 1806 of yacc.c  */
    8553 #line 2326 "parser.yy"
     8565#line 2338 "parser.yy"
    85548566    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85558567    break;
     
    85588570
    85598571/* Line 1806 of yacc.c  */
    8560 #line 2331 "parser.yy"
     8572#line 2343 "parser.yy"
    85618573    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85628574    break;
     
    85658577
    85668578/* Line 1806 of yacc.c  */
    8567 #line 2333 "parser.yy"
     8579#line 2345 "parser.yy"
    85688580    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85698581    break;
     
    85728584
    85738585/* Line 1806 of yacc.c  */
    8574 #line 2335 "parser.yy"
     8586#line 2347 "parser.yy"
    85758587    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85768588    break;
     
    85798591
    85808592/* Line 1806 of yacc.c  */
    8581 #line 2345 "parser.yy"
     8593#line 2357 "parser.yy"
    85828594    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85838595    break;
     
    85868598
    85878599/* Line 1806 of yacc.c  */
    8588 #line 2348 "parser.yy"
     8600#line 2360 "parser.yy"
    85898601    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85908602    break;
     
    85938605
    85948606/* Line 1806 of yacc.c  */
    8595 #line 2350 "parser.yy"
     8607#line 2362 "parser.yy"
    85968608    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85978609    break;
     
    86008612
    86018613/* Line 1806 of yacc.c  */
    8602 #line 2355 "parser.yy"
     8614#line 2367 "parser.yy"
    86038615    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86048616    break;
     
    86078619
    86088620/* Line 1806 of yacc.c  */
    8609 #line 2357 "parser.yy"
     8621#line 2369 "parser.yy"
    86108622    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86118623    break;
     
    86148626
    86158627/* Line 1806 of yacc.c  */
    8616 #line 2359 "parser.yy"
     8628#line 2371 "parser.yy"
    86178629    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86188630    break;
     
    86218633
    86228634/* Line 1806 of yacc.c  */
    8623 #line 2364 "parser.yy"
     8635#line 2376 "parser.yy"
    86248636    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    86258637    break;
     
    86288640
    86298641/* Line 1806 of yacc.c  */
    8630 #line 2366 "parser.yy"
     8642#line 2378 "parser.yy"
    86318643    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86328644    break;
     
    86358647
    86368648/* Line 1806 of yacc.c  */
    8637 #line 2368 "parser.yy"
     8649#line 2380 "parser.yy"
    86388650    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86398651    break;
     
    86428654
    86438655/* Line 1806 of yacc.c  */
    8644 #line 2370 "parser.yy"
     8656#line 2382 "parser.yy"
    86458657    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86468658    break;
     
    86498661
    86508662/* Line 1806 of yacc.c  */
    8651 #line 2375 "parser.yy"
     8663#line 2387 "parser.yy"
    86528664    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    86538665    break;
     
    86568668
    86578669/* Line 1806 of yacc.c  */
    8658 #line 2377 "parser.yy"
     8670#line 2389 "parser.yy"
    86598671    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86608672    break;
     
    86638675
    86648676/* Line 1806 of yacc.c  */
    8665 #line 2379 "parser.yy"
     8677#line 2391 "parser.yy"
    86668678    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86678679    break;
     
    86708682
    86718683/* Line 1806 of yacc.c  */
    8672 #line 2410 "parser.yy"
     8684#line 2422 "parser.yy"
    86738685    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86748686    break;
     
    86778689
    86788690/* Line 1806 of yacc.c  */
    8679 #line 2413 "parser.yy"
     8691#line 2425 "parser.yy"
    86808692    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86818693    break;
     
    86848696
    86858697/* Line 1806 of yacc.c  */
    8686 #line 2415 "parser.yy"
     8698#line 2427 "parser.yy"
    86878699    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86888700    break;
     
    86918703
    86928704/* Line 1806 of yacc.c  */
    8693 #line 2420 "parser.yy"
     8705#line 2432 "parser.yy"
    86948706    {
    86958707                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87018713
    87028714/* Line 1806 of yacc.c  */
    8703 #line 2425 "parser.yy"
     8715#line 2437 "parser.yy"
    87048716    {
    87058717                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87118723
    87128724/* Line 1806 of yacc.c  */
    8713 #line 2433 "parser.yy"
     8725#line 2445 "parser.yy"
    87148726    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87158727    break;
     
    87188730
    87198731/* Line 1806 of yacc.c  */
    8720 #line 2435 "parser.yy"
     8732#line 2447 "parser.yy"
    87218733    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87228734    break;
     
    87258737
    87268738/* Line 1806 of yacc.c  */
    8727 #line 2437 "parser.yy"
     8739#line 2449 "parser.yy"
    87288740    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87298741    break;
     
    87328744
    87338745/* Line 1806 of yacc.c  */
    8734 #line 2442 "parser.yy"
     8746#line 2454 "parser.yy"
    87358747    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87368748    break;
     
    87398751
    87408752/* Line 1806 of yacc.c  */
    8741 #line 2444 "parser.yy"
     8753#line 2456 "parser.yy"
    87428754    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87438755    break;
     
    87468758
    87478759/* Line 1806 of yacc.c  */
    8748 #line 2449 "parser.yy"
     8760#line 2461 "parser.yy"
    87498761    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    87508762    break;
     
    87538765
    87548766/* Line 1806 of yacc.c  */
    8755 #line 2451 "parser.yy"
     8767#line 2463 "parser.yy"
    87568768    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87578769    break;
     
    87608772
    87618773/* Line 1806 of yacc.c  */
    8762 #line 2466 "parser.yy"
     8774#line 2478 "parser.yy"
    87638775    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87648776    break;
     
    87678779
    87688780/* Line 1806 of yacc.c  */
    8769 #line 2468 "parser.yy"
     8781#line 2480 "parser.yy"
    87708782    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87718783    break;
     
    87748786
    87758787/* Line 1806 of yacc.c  */
    8776 #line 2473 "parser.yy"
     8788#line 2485 "parser.yy"
    87778789    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    87788790    break;
     
    87818793
    87828794/* Line 1806 of yacc.c  */
    8783 #line 2475 "parser.yy"
     8795#line 2487 "parser.yy"
    87848796    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    87858797    break;
     
    87888800
    87898801/* Line 1806 of yacc.c  */
    8790 #line 2477 "parser.yy"
     8802#line 2489 "parser.yy"
    87918803    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87928804    break;
     
    87958807
    87968808/* Line 1806 of yacc.c  */
    8797 #line 2479 "parser.yy"
     8809#line 2491 "parser.yy"
    87988810    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87998811    break;
     
    88028814
    88038815/* Line 1806 of yacc.c  */
    8804 #line 2481 "parser.yy"
     8816#line 2493 "parser.yy"
    88058817    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88068818    break;
     
    88098821
    88108822/* Line 1806 of yacc.c  */
    8811 #line 2487 "parser.yy"
     8823#line 2499 "parser.yy"
    88128824    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88138825    break;
     
    88168828
    88178829/* Line 1806 of yacc.c  */
    8818 #line 2489 "parser.yy"
     8830#line 2501 "parser.yy"
    88198831    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88208832    break;
     
    88238835
    88248836/* Line 1806 of yacc.c  */
    8825 #line 2491 "parser.yy"
     8837#line 2503 "parser.yy"
    88268838    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88278839    break;
     
    88308842
    88318843/* Line 1806 of yacc.c  */
    8832 #line 2496 "parser.yy"
     8844#line 2508 "parser.yy"
    88338845    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    88348846    break;
     
    88378849
    88388850/* Line 1806 of yacc.c  */
    8839 #line 2498 "parser.yy"
     8851#line 2510 "parser.yy"
    88408852    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    88418853    break;
     
    88448856
    88458857/* Line 1806 of yacc.c  */
    8846 #line 2500 "parser.yy"
     8858#line 2512 "parser.yy"
    88478859    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88488860    break;
     
    88518863
    88528864/* Line 1806 of yacc.c  */
    8853 #line 2506 "parser.yy"
     8865#line 2518 "parser.yy"
    88548866    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    88558867    break;
     
    88588870
    88598871/* Line 1806 of yacc.c  */
    8860 #line 2508 "parser.yy"
     8872#line 2520 "parser.yy"
    88618873    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    88628874    break;
     
    88658877
    88668878/* Line 1806 of yacc.c  */
    8867 #line 2514 "parser.yy"
     8879#line 2526 "parser.yy"
    88688880    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    88698881    break;
     
    88728884
    88738885/* Line 1806 of yacc.c  */
    8874 #line 2516 "parser.yy"
     8886#line 2528 "parser.yy"
    88758887    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    88768888    break;
     
    88798891
    88808892/* Line 1806 of yacc.c  */
    8881 #line 2518 "parser.yy"
     8893#line 2530 "parser.yy"
    88828894    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    88838895    break;
     
    88868898
    88878899/* Line 1806 of yacc.c  */
    8888 #line 2520 "parser.yy"
     8900#line 2532 "parser.yy"
    88898901    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    88908902    break;
     
    88938905
    88948906/* Line 1806 of yacc.c  */
    8895 #line 2535 "parser.yy"
     8907#line 2547 "parser.yy"
    88968908    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    88978909    break;
     
    89008912
    89018913/* Line 1806 of yacc.c  */
    8902 #line 2537 "parser.yy"
     8914#line 2549 "parser.yy"
    89038915    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    89048916    break;
     
    89078919
    89088920/* Line 1806 of yacc.c  */
    8909 #line 2542 "parser.yy"
     8921#line 2554 "parser.yy"
    89108922    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    89118923    break;
     
    89148926
    89158927/* Line 1806 of yacc.c  */
    8916 #line 2544 "parser.yy"
     8928#line 2556 "parser.yy"
    89178929    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    89188930    break;
     
    89218933
    89228934/* Line 1806 of yacc.c  */
    8923 #line 2546 "parser.yy"
     8935#line 2558 "parser.yy"
    89248936    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    89258937    break;
     
    89288940
    89298941/* Line 1806 of yacc.c  */
    8930 #line 2548 "parser.yy"
     8942#line 2560 "parser.yy"
    89318943    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    89328944    break;
     
    89358947
    89368948/* Line 1806 of yacc.c  */
    8937 #line 2550 "parser.yy"
     8949#line 2562 "parser.yy"
    89388950    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89398951    break;
     
    89428954
    89438955/* Line 1806 of yacc.c  */
    8944 #line 2556 "parser.yy"
     8956#line 2568 "parser.yy"
    89458957    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    89468958    break;
     
    89498961
    89508962/* Line 1806 of yacc.c  */
    8951 #line 2558 "parser.yy"
     8963#line 2570 "parser.yy"
    89528964    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    89538965    break;
     
    89568968
    89578969/* Line 1806 of yacc.c  */
    8958 #line 2560 "parser.yy"
     8970#line 2572 "parser.yy"
    89598971    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89608972    break;
     
    89638975
    89648976/* Line 1806 of yacc.c  */
    8965 #line 2565 "parser.yy"
     8977#line 2577 "parser.yy"
    89668978    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    89678979    break;
     
    89708982
    89718983/* Line 1806 of yacc.c  */
    8972 #line 2567 "parser.yy"
     8984#line 2579 "parser.yy"
    89738985    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    89748986    break;
     
    89778989
    89788990/* Line 1806 of yacc.c  */
    8979 #line 2569 "parser.yy"
     8991#line 2581 "parser.yy"
    89808992    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89818993    break;
     
    89848996
    89858997/* Line 1806 of yacc.c  */
    8986 #line 2576 "parser.yy"
     8998#line 2588 "parser.yy"
    89878999    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    89889000    break;
     
    89919003
    89929004/* Line 1806 of yacc.c  */
    8993 #line 2587 "parser.yy"
     9005#line 2599 "parser.yy"
    89949006    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    89959007    break;
     
    89989010
    89999011/* Line 1806 of yacc.c  */
    9000 #line 2590 "parser.yy"
     9012#line 2602 "parser.yy"
    90019013    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    90029014    break;
     
    90059017
    90069018/* Line 1806 of yacc.c  */
    9007 #line 2592 "parser.yy"
     9019#line 2604 "parser.yy"
    90089020    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    90099021    break;
     
    90129024
    90139025/* Line 1806 of yacc.c  */
    9014 #line 2595 "parser.yy"
     9026#line 2607 "parser.yy"
    90159027    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    90169028    break;
     
    90199031
    90209032/* Line 1806 of yacc.c  */
    9021 #line 2597 "parser.yy"
     9033#line 2609 "parser.yy"
    90229034    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    90239035    break;
     
    90269038
    90279039/* Line 1806 of yacc.c  */
    9028 #line 2599 "parser.yy"
     9040#line 2611 "parser.yy"
    90299041    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    90309042    break;
     
    90339045
    90349046/* Line 1806 of yacc.c  */
    9035 #line 2613 "parser.yy"
     9047#line 2625 "parser.yy"
    90369048    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    90379049    break;
     
    90409052
    90419053/* Line 1806 of yacc.c  */
    9042 #line 2615 "parser.yy"
     9054#line 2627 "parser.yy"
    90439055    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    90449056    break;
     
    90479059
    90489060/* Line 1806 of yacc.c  */
    9049 #line 2620 "parser.yy"
     9061#line 2632 "parser.yy"
    90509062    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    90519063    break;
     
    90549066
    90559067/* Line 1806 of yacc.c  */
    9056 #line 2622 "parser.yy"
     9068#line 2634 "parser.yy"
    90579069    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    90589070    break;
     
    90619073
    90629074/* Line 1806 of yacc.c  */
    9063 #line 2624 "parser.yy"
     9075#line 2636 "parser.yy"
    90649076    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    90659077    break;
     
    90689080
    90699081/* Line 1806 of yacc.c  */
    9070 #line 2626 "parser.yy"
     9082#line 2638 "parser.yy"
    90719083    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    90729084    break;
     
    90759087
    90769088/* Line 1806 of yacc.c  */
    9077 #line 2628 "parser.yy"
     9089#line 2640 "parser.yy"
    90789090    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    90799091    break;
     
    90829094
    90839095/* Line 1806 of yacc.c  */
    9084 #line 2634 "parser.yy"
     9096#line 2646 "parser.yy"
    90859097    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    90869098    break;
     
    90899101
    90909102/* Line 1806 of yacc.c  */
    9091 #line 2636 "parser.yy"
     9103#line 2648 "parser.yy"
    90929104    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    90939105    break;
     
    90969108
    90979109/* Line 1806 of yacc.c  */
    9098 #line 2638 "parser.yy"
     9110#line 2650 "parser.yy"
    90999111    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    91009112    break;
     
    91039115
    91049116/* Line 1806 of yacc.c  */
    9105 #line 2643 "parser.yy"
     9117#line 2655 "parser.yy"
    91069118    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    91079119    break;
     
    91109122
    91119123/* Line 1806 of yacc.c  */
    9112 #line 2645 "parser.yy"
     9124#line 2657 "parser.yy"
    91139125    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    91149126    break;
     
    91179129
    91189130/* Line 1806 of yacc.c  */
    9119 #line 2655 "parser.yy"
     9131#line 2667 "parser.yy"
    91209132    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    91219133    break;
     
    91249136
    91259137/* Line 1806 of yacc.c  */
    9126 #line 2665 "parser.yy"
     9138#line 2677 "parser.yy"
    91279139    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91289140    break;
     
    91319143
    91329144/* Line 1806 of yacc.c  */
    9133 #line 2667 "parser.yy"
     9145#line 2679 "parser.yy"
    91349146    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91359147    break;
     
    91389150
    91399151/* Line 1806 of yacc.c  */
    9140 #line 2669 "parser.yy"
     9152#line 2681 "parser.yy"
    91419153    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91429154    break;
     
    91459157
    91469158/* Line 1806 of yacc.c  */
    9147 #line 2671 "parser.yy"
     9159#line 2683 "parser.yy"
    91489160    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91499161    break;
     
    91529164
    91539165/* Line 1806 of yacc.c  */
    9154 #line 2673 "parser.yy"
     9166#line 2685 "parser.yy"
    91559167    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91569168    break;
     
    91599171
    91609172/* Line 1806 of yacc.c  */
    9161 #line 2675 "parser.yy"
     9173#line 2687 "parser.yy"
    91629174    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91639175    break;
     
    91669178
    91679179/* Line 1806 of yacc.c  */
    9168 #line 2682 "parser.yy"
     9180#line 2694 "parser.yy"
    91699181    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91709182    break;
     
    91739185
    91749186/* Line 1806 of yacc.c  */
    9175 #line 2684 "parser.yy"
     9187#line 2696 "parser.yy"
    91769188    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91779189    break;
     
    91809192
    91819193/* Line 1806 of yacc.c  */
    9182 #line 2686 "parser.yy"
     9194#line 2698 "parser.yy"
    91839195    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91849196    break;
     
    91879199
    91889200/* Line 1806 of yacc.c  */
    9189 #line 2688 "parser.yy"
     9201#line 2700 "parser.yy"
    91909202    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    91919203    break;
     
    91949206
    91959207/* Line 1806 of yacc.c  */
    9196 #line 2690 "parser.yy"
     9208#line 2702 "parser.yy"
    91979209    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91989210    break;
     
    92019213
    92029214/* Line 1806 of yacc.c  */
    9203 #line 2692 "parser.yy"
     9215#line 2704 "parser.yy"
    92049216    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92059217    break;
     
    92089220
    92099221/* Line 1806 of yacc.c  */
    9210 #line 2694 "parser.yy"
     9222#line 2706 "parser.yy"
    92119223    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92129224    break;
     
    92159227
    92169228/* Line 1806 of yacc.c  */
    9217 #line 2696 "parser.yy"
     9229#line 2708 "parser.yy"
    92189230    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92199231    break;
     
    92229234
    92239235/* Line 1806 of yacc.c  */
    9224 #line 2698 "parser.yy"
     9236#line 2710 "parser.yy"
    92259237    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    92269238    break;
     
    92299241
    92309242/* Line 1806 of yacc.c  */
    9231 #line 2700 "parser.yy"
     9243#line 2712 "parser.yy"
    92329244    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92339245    break;
     
    92369248
    92379249/* Line 1806 of yacc.c  */
    9238 #line 2705 "parser.yy"
     9250#line 2717 "parser.yy"
    92399251    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    92409252    break;
     
    92439255
    92449256/* Line 1806 of yacc.c  */
    9245 #line 2707 "parser.yy"
     9257#line 2719 "parser.yy"
    92469258    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    92479259    break;
     
    92509262
    92519263/* Line 1806 of yacc.c  */
    9252 #line 2712 "parser.yy"
     9264#line 2724 "parser.yy"
    92539265    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    92549266    break;
     
    92579269
    92589270/* Line 1806 of yacc.c  */
    9259 #line 2714 "parser.yy"
     9271#line 2726 "parser.yy"
    92609272    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    92619273    break;
     
    92649276
    92659277/* Line 1806 of yacc.c  */
    9266 #line 2741 "parser.yy"
     9278#line 2753 "parser.yy"
    92679279    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    92689280    break;
     
    92719283
    92729284/* Line 1806 of yacc.c  */
    9273 #line 2752 "parser.yy"
     9285#line 2764 "parser.yy"
    92749286    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    92759287    break;
     
    92789290
    92799291/* Line 1806 of yacc.c  */
    9280 #line 2754 "parser.yy"
     9292#line 2766 "parser.yy"
    92819293    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    92829294    break;
     
    92859297
    92869298/* Line 1806 of yacc.c  */
    9287 #line 2756 "parser.yy"
     9299#line 2768 "parser.yy"
    92889300    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    92899301    break;
     
    92929304
    92939305/* Line 1806 of yacc.c  */
    9294 #line 2758 "parser.yy"
     9306#line 2770 "parser.yy"
    92959307    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    92969308    break;
     
    92999311
    93009312/* Line 1806 of yacc.c  */
    9301 #line 2760 "parser.yy"
     9313#line 2772 "parser.yy"
    93029314    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    93039315    break;
     
    93069318
    93079319/* Line 1806 of yacc.c  */
    9308 #line 2762 "parser.yy"
     9320#line 2774 "parser.yy"
    93099321    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    93109322    break;
     
    93139325
    93149326/* Line 1806 of yacc.c  */
    9315 #line 2769 "parser.yy"
     9327#line 2781 "parser.yy"
    93169328    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93179329    break;
     
    93209332
    93219333/* Line 1806 of yacc.c  */
    9322 #line 2771 "parser.yy"
     9334#line 2783 "parser.yy"
    93239335    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93249336    break;
     
    93279339
    93289340/* Line 1806 of yacc.c  */
    9329 #line 2773 "parser.yy"
     9341#line 2785 "parser.yy"
    93309342    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    93319343    break;
     
    93349346
    93359347/* Line 1806 of yacc.c  */
    9336 #line 2775 "parser.yy"
     9348#line 2787 "parser.yy"
    93379349    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93389350    break;
     
    93419353
    93429354/* Line 1806 of yacc.c  */
    9343 #line 2777 "parser.yy"
     9355#line 2789 "parser.yy"
    93449356    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93459357    break;
     
    93489360
    93499361/* Line 1806 of yacc.c  */
    9350 #line 2779 "parser.yy"
     9362#line 2791 "parser.yy"
    93519363    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    93529364    break;
     
    93559367
    93569368/* Line 1806 of yacc.c  */
    9357 #line 2784 "parser.yy"
     9369#line 2796 "parser.yy"
    93589370    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    93599371    break;
     
    93629374
    93639375/* Line 1806 of yacc.c  */
    9364 #line 2789 "parser.yy"
     9376#line 2801 "parser.yy"
    93659377    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    93669378    break;
     
    93699381
    93709382/* Line 1806 of yacc.c  */
    9371 #line 2791 "parser.yy"
     9383#line 2803 "parser.yy"
    93729384    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    93739385    break;
     
    93769388
    93779389/* Line 1806 of yacc.c  */
    9378 #line 2793 "parser.yy"
     9390#line 2805 "parser.yy"
    93799391    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    93809392    break;
     
    93839395
    93849396/* Line 1806 of yacc.c  */
    9385 #line 2817 "parser.yy"
     9397#line 2829 "parser.yy"
    93869398    { (yyval.en) = 0; }
    93879399    break;
     
    93909402
    93919403/* Line 1806 of yacc.c  */
    9392 #line 2819 "parser.yy"
     9404#line 2831 "parser.yy"
    93939405    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    93949406    break;
     
    93979409
    93989410/* Line 1806 of yacc.c  */
    9399 #line 9400 "Parser/parser.cc"
     9411#line 9412 "Parser/parser.cc"
    94009412      default: break;
    94019413    }
     
    96289640
    96299641/* Line 2067 of yacc.c  */
    9630 #line 2822 "parser.yy"
     9642#line 2834 "parser.yy"
    96319643
    96329644// ----end of grammar----
  • src/Parser/parser.yy

    ra43e1d7 r39f04ec  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun 27 17:47:56 2016
    13 // Update Count     : 1627
     12// Last Modified On : Thu Jun 30 21:15:54 2016
     13// Update Count     : 1657
    1414//
    1515
     
    303303constant:
    304304                // ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
    305         INTEGERconstant                                                         { $$ = new ConstantNode( ConstantNode::Integer, $1 ); }
    306         | FLOATINGconstant                                                      { $$ = new ConstantNode( ConstantNode::Float, $1 ); }
    307         | CHARACTERconstant                                                     { $$ = new ConstantNode( ConstantNode::Character, $1 ); }
     305INTEGERconstant                                                                 { $$ = makeConstant( ConstantNode::Integer, $1 ); }
     306        | FLOATINGconstant                                                      { $$ = makeConstant( ConstantNode::Float, $1 ); }
     307        | CHARACTERconstant                                                     { $$ = makeConstant( ConstantNode::Character, $1 ); }
    308308        ;
    309309
     
    330330
    331331string_literal_list:                                                                    // juxtaposed strings are concatenated
    332         STRINGliteral                                                           { $$ = new ConstantNode( ConstantNode::String, $1 ); }
     332        STRINGliteral                                                           { $$ = makeConstantStr( ConstantNode::String, $1 ); }
    333333        | string_literal_list STRINGliteral                     { $$ = $1->appendstr( $2 ); }
    334334        ;
     
    682682                { $$ = new StatementNode( $1 ); }
    683683        | EXTENSION declaration                                                         // GCC
    684                 { $$ = new StatementNode( $2 )/*->set_extension( true )*/; }
     684                {       // mark all fields in list
     685                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     686                                iter->set_extension( true );
     687                        $$ = new StatementNode( $2 );
     688                }
    685689        | function_definition
    686690                { $$ = new StatementNode( $1 ); }
     
    14721476        new_field_declaring_list ';'                                            // CFA, new style field declaration
    14731477        | EXTENSION new_field_declaring_list ';'                        // GCC
    1474                 { $$ = $2/*->set_extension( true )*/; }
     1478                { $$ = $2->set_extension( true ); }
    14751479        | field_declaring_list ';'
    14761480        | EXTENSION field_declaring_list ';'                            // GCC
    1477                 { $$ = $2/*->set_extension( true )*/; }
     1481                {       // mark all fields in list
     1482                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     1483                                iter->set_extension( true );
     1484                        $$ = $2;
     1485                }
    14781486        ;
    14791487
     
    19911999                }
    19922000        | EXTENSION external_definition
    1993                 { $$ = $2/*->set_extension( true )*/; }
     2001                {       // mark all fields in list
     2002                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     2003                                iter->set_extension( true );
     2004                        $$ = $2;
     2005                }
    19942006        ;
    19952007
  • src/ResolvExpr/AlternativeFinder.cc

    ra43e1d7 r39f04ec  
    1010// Created On       : Sat May 16 23:52:08 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun 13 16:13:54 2016
    13 // Update Count     : 25
     12// Last Modified On : Mon Jul  4 17:02:51 2016
     13// Update Count     : 29
    1414//
    1515
     
    227227                        std::cerr << "there are " << alternatives.size() << " alternatives after elimination" << std::endl;
    228228                )
     229
     230                // Central location to handle gcc extension keyword for all expression types.
     231                for ( Alternative &iter: alternatives ) {
     232                        iter.expr->set_extension( expr->get_extension() );
     233                } // for
    229234        }
    230235
     
    772777                for ( std::list< DeclarationWithType* >::iterator i = declList.begin(); i != declList.end(); ++i ) {
    773778                        VariableExpr newExpr( *i, nameExpr->get_argName() );
    774                         newExpr.set_extension( nameExpr->get_extension() );
    775779                        alternatives.push_back( Alternative( newExpr.clone(), env, Cost() ) );
    776780                        PRINT(
  • src/SynTree/Constant.h

    ra43e1d7 r39f04ec  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 30 15:19:16 2015
    13 // Update Count     : 5
     12// Last Modified On : Thu Jun 30 13:33:17 2016
     13// Update Count     : 6
    1414//
    1515
     
    2929        Type *get_type() { return type; }
    3030        void set_type( Type *newValue ) { type = newValue; }
    31         std::string get_value() { return value; }
     31        std::string &get_value() { return value; }
    3232        void set_value( std::string newValue ) { value = newValue; }
    3333
  • src/SynTree/Declaration.h

    ra43e1d7 r39f04ec  
    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 : Fri May 06 16:26:12 2016
    13 // Update Count     : 33
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Jun 30 21:17:24 2016
     13// Update Count     : 38
    1414//
    1515
     
    4141        void set_isNoreturn( bool newValue ) { isNoreturn = newValue; }
    4242        UniqueId get_uniqueId() const { return uniqueId; }
     43        bool get_extension() const { return extension; }
     44        Declaration *set_extension( bool exten ) { extension = exten; return this; }
    4345
    4446        void fixUniqueId( void );
     
    5759        bool isInline, isNoreturn;
    5860        UniqueId uniqueId;
     61        bool extension = false;
    5962};
    6063
  • src/SynTree/Expression.h

    ra43e1d7 r39f04ec  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun  8 17:05:30 2016
    13 // Update Count     : 22
     12// Last Modified On : Mon Jul  4 14:45:32 2016
     13// Update Count     : 23
    1414//
    1515
     
    3939        void set_argName( Expression *name ) { argName = name; }
    4040        bool get_extension() const { return extension; }
    41         void set_extension( bool exten ) { extension = exten; }
     41        Expression * set_extension( bool exten ) { extension = exten; return this; }
    4242
    4343        virtual Expression *clone() const = 0;
  • src/driver/cfa.cc

    ra43e1d7 r39f04ec  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jun 10 09:26:19 2016
    13 // Update Count     : 138
     12// Last Modified On : Mon Jul  4 11:33:15 2016
     13// Update Count     : 139
    1414//
    1515
     
    246246        args[nargs] = "-I" CFA_INCDIR;
    247247        nargs += 1;
     248        args[nargs] = "-I" CFA_INCDIR "/containers";
     249        nargs += 1;
    248250
    249251        args[nargs] = "-I" CFA_INCDIR "/containers";
  • src/libcfa/builtins.cf

    ra43e1d7 r39f04ec  
    584584int __builtin_LINE();
    585585extern const char *__PRETTY_FUNCTION__;
     586typedef int wchar_t;
     587int atexit( void (*)(void) );
  • src/libcfa/stdlib

    ra43e1d7 r39f04ec  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 27 22:03:29 2016
    13 // Update Count     : 96
     12// Last Modified On : Thu Jun 30 15:04:18 2016
     13// Update Count     : 97
    1414//
    1515
     
    129129T max( const T t1, const T t2 );
    130130
     131forall( otype T | { T min( T, T ); T max( T, T ); } )
     132T clamp( const T value, const T min_val, const T max_val );
     133
    131134forall( otype T )
    132135void swap( T * t1, T * t2 );
  • src/libcfa/stdlib.c

    ra43e1d7 r39f04ec  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr 28 07:54:21 2016
    13 // Update Count     : 166
     12// Last Modified On : Thu Jun 30 15:04:25 2016
     13// Update Count     : 168
    1414//
    1515
     
    254254} // max
    255255
     256forall( otype T | { T min( T, T ); T max( T, T ); } )
     257T clamp( const T value, const T min_val, const T max_val ) {
     258        return max( min_val, min( value, max_val ) );
     259} // clamp
     260
    256261forall( otype T )
    257262void swap( T * t1, T * t2 ) {
  • src/tests/quoted_keyword.c

    ra43e1d7 r39f04ec  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jun 25 08:02:58 2016
    13 // Update Count     : 16
     12// Last Modified On : Thu Jun 30 14:03:59 2016
     13// Update Count     : 19
    1414//
    1515
     
    3737int main() {
    3838        int `if` = 0;
     39        `catch` = 1;
     40        st.`otype` = 2;
     41        st.`struct` = 3;
     42        `throw` = 4;
    3943        sout | `catch` + st.`otype` + st.`struct` + `throw` | endl;
    4044}
Note: See TracChangeset for help on using the changeset viewer.