Changeset 907eccb for src/ResolvExpr


Ignore:
Timestamp:
Dec 22, 2016, 3:23:49 PM (8 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
4c8621ac
Parents:
0c286cf
Message:

added UntypedTupleExpr? to better differentiate typed and untyped contexts, simplifying some code

Location:
src/ResolvExpr
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    r0c286cf r907eccb  
    351351                if ( TupleType * tupleType = dynamic_cast< TupleType * >( formalType ) ) {
    352352                        // formalType is a TupleType - group actuals into a TupleExpr whose type unifies with the TupleType
    353                         TupleExpr * tupleExpr = new TupleExpr();
     353                        std::list< Expression * > exprs;
    354354                        for ( Type * type : *tupleType ) {
    355                                 if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( tupleExpr->get_exprs() ) ) ) {
    356                                         delete tupleExpr;
     355                                if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( exprs ) ) ) {
     356                                        deleteAll( exprs );
    357357                                        return false;
    358358                                }
    359359                        }
    360                         tupleExpr->set_result( Tuples::makeTupleType( tupleExpr->get_exprs() ) );
    361                         *out++ = tupleExpr;
     360                        *out++ = new TupleExpr( exprs );
    362361                } else if ( actualIt != actualEnd ) {
    363362                        if ( TypeInstType * ttype = Tuples::isTtype( formalType ) ) {
     
    10581057        }
    10591058
    1060         void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
     1059        void AlternativeFinder::visit( UntypedTupleExpr *tupleExpr ) {
    10611060                std::list< AlternativeFinder > subExprAlternatives;
    10621061                findSubExprs( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end(), back_inserter( subExprAlternatives ) );
     
    10641063                combos( subExprAlternatives.begin(), subExprAlternatives.end(), back_inserter( possibilities ) );
    10651064                for ( std::list< AltList >::const_iterator i = possibilities.begin(); i != possibilities.end(); ++i ) {
    1066                         TupleExpr *newExpr = new TupleExpr;
    1067                         makeExprList( *i, newExpr->get_exprs() );
    1068                         newExpr->set_result( Tuples::makeTupleType( newExpr->get_exprs() ) );
     1065                        std::list< Expression * > exprs;
     1066                        makeExprList( *i, exprs );
    10691067
    10701068                        TypeEnvironment compositeEnv;
    10711069                        simpleCombineEnvironments( i->begin(), i->end(), compositeEnv );
    1072                         alternatives.push_back( Alternative( newExpr, compositeEnv, sumCost( *i ) ) );
     1070                        alternatives.push_back( Alternative( new TupleExpr( exprs ) , compositeEnv, sumCost( *i ) ) );
    10731071                } // for
     1072        }
     1073
     1074        void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
     1075                alternatives.push_back( Alternative( tupleExpr->clone(), env, Cost::zero ) );
    10741076        }
    10751077
  • src/ResolvExpr/AlternativeFinder.h

    r0c286cf r907eccb  
    6464                virtual void visit( ConditionalExpr *conditionalExpr );
    6565                virtual void visit( CommaExpr *commaExpr );
    66                 virtual void visit( TupleExpr *tupleExpr );
    6766                virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr );
    6867                virtual void visit( ConstructorExpr * ctorExpr );
     68                virtual void visit( UntypedTupleExpr *tupleExpr );
     69                virtual void visit( TupleExpr *tupleExpr );
    6970                virtual void visit( TupleIndexExpr *tupleExpr );
    7071                virtual void visit( TupleAssignExpr *tupleExpr );
Note: See TracChangeset for help on using the changeset viewer.