Ignore:
Timestamp:
Feb 17, 2017, 2:20:25 PM (5 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
11f95ee
Parents:
e6512c8
Message:

resolve case labels and case ranges

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Resolver.cc

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