Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/StatementNode.cc

    r59db689 r1db21619  
    1010// Created On       : Sat May 16 14:59:41 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jun  6 23:25:41 2015
    13 // Update Count     : 19
     12// Last Modified On : Thu Jul 16 16:20:24 2015
     13// Update Count     : 30
    1414//
    1515
     
    7272        delete control;
    7373        delete block;
    74         delete labels;
    7574        delete target;
    7675        delete decl;
     
    103102}
    104103
    105 void StatementNode::set_control( ExpressionNode *c ) {
    106         control = c;
    107 }
    108 
    109 StatementNode * StatementNode::set_block( StatementNode *b ) {
    110         block = b;
    111 
    112         return this;
    113 }
    114 
    115 ExpressionNode *StatementNode::get_control() const {
    116         return control;
    117 }
    118 
    119 StatementNode *StatementNode::get_block() const {
    120         return block;
    121 }
    122 
    123 StatementNode::Type StatementNode::get_type() const {
    124         return type;
    125 }
    126 
    127104StatementNode *StatementNode::add_label( const std::string *l ) {
    128105        if ( l != 0 ) {
    129                 if ( labels == 0 )
    130                         labels = new std::list<std::string>();
    131 
    132                 labels->push_front(*l );
     106                labels.push_front( *l );
    133107                delete l;
    134108        } // if
    135109        return this;
    136110}
    137 
    138 std::list<std::string> *StatementNode::get_labels() const { return labels; }
    139111
    140112StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
     
    170142
    171143void StatementNode::print( std::ostream &os, int indent ) const {
    172         if ( labels != 0 ) {
    173                 if ( ! labels->empty()) {
    174                         std::list<std::string>::const_iterator i;
    175 
    176                         os << string( indent, ' ' );
    177                         for ( i = labels->begin(); i != labels->end(); i++ )
    178                                 os << *i << ":";
    179                         os << endl;
    180                 } // if
     144        if ( ! labels.empty()) {
     145                std::list<std::string>::const_iterator i;
     146
     147                os << string( indent, ' ' );
     148                for ( i = labels.begin(); i != labels.end(); i++ )
     149                        os << *i << ":";
     150                os << endl;
    181151        } // if
    182152
     
    225195        std::list<Label> labs;
    226196
    227         if ( labels != 0 ) {
     197        if ( ! labels.empty() ) {
    228198                std::back_insert_iterator< std::list<Label> > lab_it( labs );
    229                 copy( labels->begin(), labels->end(), lab_it );
     199                copy( labels.begin(), labels.end(), lab_it );
    230200        } // if
    231201
     
    271241                        assert( ctl != 0 );
    272242
    273                         Statement *stmt = 0;
    274                         if ( ctl->get_init() != 0 )
    275                                 stmt = ctl->get_init()->build();
     243                        std::list<Statement *> init;
     244                        if ( ctl->get_init() != 0 ) {
     245                                buildList( ctl->get_init(), init );
     246                        } // if
    276247
    277248                        Expression *cond = 0;
     
    283254                                incr = ctl->get_change()->build();
    284255
    285                         return new ForStmt( labs, stmt, cond, incr, branches.front() );
     256                        return new ForStmt( labs, init, cond, incr, branches.front() );
    286257                }
    287258          case Switch:
     
    377348Statement *CompoundStmtNode::build() const {
    378349        std::list<Label> labs;
    379         std::list<std::string> *labels = get_labels();
    380 
    381         if ( labels != 0 ) {
     350        const std::list<std::string> &labels = get_labels();
     351
     352        if ( ! labels.empty() ) {
    382353                std::back_insert_iterator< std::list<Label> > lab_it( labs );
    383                 copy( labels->begin(), labels->end(), lab_it );
     354                copy( labels.begin(), labels.end(), lab_it );
    384355        } // if
    385356
Note: See TracChangeset for help on using the changeset viewer.