Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Resolver.cc

    r32b8144 r138e29e  
    302302        }
    303303
    304         void Resolver::visit( SwitchStmt *switchStmt ) {
    305                 ValueGuard< Type * > oldInitContext( initContext );
     304        template< typename SwitchClass >
     305        void handleSwitchStmt( SwitchClass *switchStmt, SymTab::Indexer &visitor ) {
    306306                Expression *newExpr;
    307                 newExpr = findIntegralExpression( switchStmt->get_condition(), *this );
     307                newExpr = findIntegralExpression( switchStmt->get_condition(), visitor );
    308308                delete switchStmt->get_condition();
    309309                switchStmt->set_condition( newExpr );
    310310
    311                 initContext = newExpr->get_result();
    312                 Parent::visit( switchStmt );
     311                visitor.Visitor::visit( switchStmt );
     312        }
     313
     314        void Resolver::visit( SwitchStmt *switchStmt ) {
     315                handleSwitchStmt( switchStmt, *this );
    313316        }
    314317
    315318        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                 }
    325319                Parent::visit( caseStmt );
    326320        }
Note: See TracChangeset for help on using the changeset viewer.