Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/InitializerNode.cc

    re4d829b rfaddbd8  
    7474
    7575        InitializerNode *moreInit;
    76         if ( (moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) ) {
     76        if  ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) )
    7777                moreInit->printOneLine( os );
    78         }
    7978}
    8079
    8180Initializer *InitializerNode::build() const {
    8281        if ( aggregate ) {
    83                 // steal designators from children
    84                 std::list< Designation * > designlist;
    85                 InitializerNode * child = next_init();
    86                 for ( ; child != nullptr; child = dynamic_cast< InitializerNode * >( child->get_next() ) ) {
    87                         std::list< Expression * > desList;
    88                         buildList< Expression, ExpressionNode >( child->designator, desList );
    89                         designlist.push_back( new Designation( desList ) );
    90                 } // for
    9182                std::list< Initializer * > initlist;
    9283                buildList< Initializer, InitializerNode >( next_init(), initlist );
     84
     85                std::list< Expression * > designlist;
     86
     87                if ( designator != 0 ) {
     88                        buildList< Expression, ExpressionNode >( designator, designlist );
     89                } // if
     90
    9391                return new ListInit( initlist, designlist, maybeConstructed );
    9492        } else {
    95                 if ( get_expression() != 0) {
    96                         return new SingleInit( maybeBuild< Expression >( get_expression() ), maybeConstructed );
    97                 }
     93                std::list< Expression * > designators;
     94
     95                if ( designator != 0 )
     96                        buildList< Expression, ExpressionNode >( designator, designators );
     97
     98                if ( get_expression() != 0)
     99                        return new SingleInit( maybeBuild< Expression >( get_expression() ), designators, maybeConstructed );
    98100        } // if
     101
    99102        return 0;
    100103}
Note: See TracChangeset for help on using the changeset viewer.