Changeset aefcc3b for src/ResolvExpr/Alternative.h
- Timestamp:
- Sep 20, 2016, 4:14:13 PM (10 years ago)
- 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, stuck-waitfor-destruct, with_gc
- Children:
- 23b6643f
- Parents:
- 8c49c0e
- File:
-
- 1 edited
-
src/ResolvExpr/Alternative.h (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/Alternative.h
r8c49c0e raefcc3b 32 32 Alternative( const Alternative &other ); 33 33 Alternative &operator=( const Alternative &other ); 34 Alternative( Alternative && other ); 35 Alternative &operator=( Alternative && other ); 34 36 ~Alternative(); 35 37 … … 49 51 Type * res = expr->get_result(); 50 52 if ( TupleType * tupleType = dynamic_cast< TupleType * > ( res ) ) { 51 if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( alt.expr ) ) { 53 if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( expr ) ) { 54 // can open tuple expr and dump its exploded components 52 55 for ( Expression * expr : tupleExpr->get_exprs() ) { 53 56 explodeUnique( expr, alt, out ); 54 57 } 55 58 } else { 59 // tuple type, but not tuple expr - need to refer to single instance of the argument 60 // expression and index into its components 56 61 UniqueExpr * unq = new UniqueExpr( expr->clone() ); 57 62 for ( unsigned int i = 0; i < tupleType->size(); i++ ) { … … 63 68 } 64 69 } else { 70 // atomic (non-tuple) type - output a clone of the expression in a new alternative 65 71 *out++ = Alternative( expr->clone(), alt.env, alt.cost, alt.cvtCost ); 66 72 } … … 69 75 /// expands a tuple-valued alternative into multiple alternatives, each with a non-tuple-type 70 76 template< typename OutputIterator > 71 void explode( Alternative &alt, OutputIterator out ) {77 void explode( const Alternative &alt, OutputIterator out ) { 72 78 explodeUnique( alt.expr, alt, out ); 73 79 } … … 75 81 // explode list of alternatives 76 82 template< typename OutputIterator > 77 void explode( AltList & alts, OutputIterator out ) {78 for ( Alternative & alt : alts ) {83 void explode( const AltList & alts, OutputIterator out ) { 84 for ( const Alternative & alt : alts ) { 79 85 explode( alt, out ); 80 86 }
Note:
See TracChangeset
for help on using the changeset viewer.