Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Resolver.cc

    r32b8144 reeaea53  
    8686                Resolver resolver;
    8787                acceptAll( translationUnit, resolver );
     88#if 0
     89                resolver.print( cerr );
     90                for ( std::list< Declaration * >::iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
     91                        (*i)->print( std::cerr );
     92                        (*i)->accept( resolver );
     93                } // for
     94#endif
    8895        }
    8996
     
    302309        }
    303310
    304         void Resolver::visit( SwitchStmt *switchStmt ) {
    305                 ValueGuard< Type * > oldInitContext( initContext );
     311        template< typename SwitchClass >
     312        void handleSwitchStmt( SwitchClass *switchStmt, SymTab::Indexer &visitor ) {
    306313                Expression *newExpr;
    307                 newExpr = findIntegralExpression( switchStmt->get_condition(), *this );
     314                newExpr = findIntegralExpression( switchStmt->get_condition(), visitor );
    308315                delete switchStmt->get_condition();
    309316                switchStmt->set_condition( newExpr );
    310317
    311                 initContext = newExpr->get_result();
    312                 Parent::visit( switchStmt );
     318                visitor.Visitor::visit( switchStmt );
     319        }
     320
     321        void Resolver::visit( SwitchStmt *switchStmt ) {
     322                handleSwitchStmt( switchStmt, *this );
    313323        }
    314324
    315325        void Resolver::visit( CaseStmt *caseStmt ) {
    316                 if ( caseStmt->get_condition() ) {
    317                         assert( initContext );
    318                         CastExpr * castExpr = new CastExpr( caseStmt->get_condition(), initContext->clone() );
    319                         Expression * newExpr = findSingleExpression( castExpr, *this );
    320                         castExpr = safe_dynamic_cast< CastExpr * >( newExpr );
    321                         caseStmt->set_condition( castExpr->get_arg() );
    322                         castExpr->set_arg( nullptr );
    323                         delete castExpr;
    324                 }
    325326                Parent::visit( caseStmt );
    326327        }
Note: See TracChangeset for help on using the changeset viewer.