Changeset e6d39fe for src/ResolvExpr/AlternativeFinder.cc
- Timestamp:
- Apr 20, 2018, 9:04:41 AM (6 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, with_gc
- Children:
- 22bdc34
- Parents:
- 9181f1d (diff), 88f15ae (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/AlternativeFinder.cc
r9181f1d re6d39fe 1247 1247 } 1248 1248 1249 Expression * restructureCast( Expression * argExpr, Type * toType ) {1249 Expression * restructureCast( Expression * argExpr, Type * toType, bool isGenerated ) { 1250 1250 if ( argExpr->get_result()->size() > 1 && ! toType->isVoid() && ! dynamic_cast<ReferenceType *>( toType ) ) { 1251 1251 // Argument expression is a tuple and the target type is not void and not a reference type. … … 1262 1262 // cast each component 1263 1263 TupleIndexExpr * idx = new TupleIndexExpr( argExpr->clone(), i ); 1264 componentExprs.push_back( restructureCast( idx, toType->getComponent( i ) ) );1264 componentExprs.push_back( restructureCast( idx, toType->getComponent( i ), isGenerated ) ); 1265 1265 } 1266 1266 delete argExpr; … … 1270 1270 } else { 1271 1271 // handle normally 1272 return new CastExpr( argExpr, toType->clone() ); 1272 CastExpr * ret = new CastExpr( argExpr, toType->clone() ); 1273 ret->isGenerated = isGenerated; 1274 return ret; 1273 1275 } 1274 1276 } … … 1314 1316 // count one safe conversion for each value that is thrown away 1315 1317 thisCost.incSafe( discardedValues ); 1316 Alternative newAlt( restructureCast( alt.expr->clone(), toType ), alt.env,1318 Alternative newAlt( restructureCast( alt.expr->clone(), toType, castExpr->isGenerated ), alt.env, 1317 1319 alt.cost, thisCost ); 1318 1320 inferParameters( needAssertions, haveAssertions, newAlt, openVars, … … 1730 1732 // count one safe conversion for each value that is thrown away 1731 1733 thisCost.incSafe( discardedValues ); 1732 Alternative newAlt( new InitExpr( restructureCast( alt.expr->clone(), toType ), initAlt.designation->clone() ), newEnv, alt.cost, thisCost );1734 Alternative newAlt( new InitExpr( restructureCast( alt.expr->clone(), toType, true ), initAlt.designation->clone() ), newEnv, alt.cost, thisCost ); 1733 1735 inferParameters( needAssertions, haveAssertions, newAlt, openVars, back_inserter( candidates ) ); 1734 1736 }
Note: See TracChangeset
for help on using the changeset viewer.