Changeset 8d7bef2 for src/ResolvExpr/AlternativeFinder.cc
- Timestamp:
- Mar 20, 2018, 5:12:25 PM (6 years ago)
- Branches:
- new-env, with_gc
- Children:
- 7e4b44db
- Parents:
- 68f9c43
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/AlternativeFinder.cc
r68f9c43 r8d7bef2 21 21 #include <list> // for _List_iterator, list, _List_const_... 22 22 #include <map> // for _Rb_tree_iterator, map, _Rb_tree_c... 23 #include <memory> // for allocator_traits<>::value_type , unique_ptr23 #include <memory> // for allocator_traits<>::value_type 24 24 #include <utility> // for pair 25 25 #include <vector> // for vector … … 296 296 // adds anonymous member interpretations whenever an aggregate value type is seen. 297 297 // it's okay for the aggregate expression to have reference type -- cast it to the base type to treat the aggregate as the referenced value 298 std::unique_ptr<Expression> aggrExpr( alt.expr->clone());298 Expression* aggrExpr = alt.expr->clone(); 299 299 alt.env.apply( aggrExpr->get_result() ); 300 300 Type * aggrType = aggrExpr->get_result(); 301 301 if ( dynamic_cast< ReferenceType * >( aggrType ) ) { 302 302 aggrType = aggrType->stripReferences(); 303 aggrExpr .reset( new CastExpr( aggrExpr.release(), aggrType->clone() ) );303 aggrExpr = new CastExpr{ aggrExpr, aggrType->clone() }; 304 304 } 305 305 306 306 if ( StructInstType *structInst = dynamic_cast< StructInstType* >( aggrExpr->get_result() ) ) { 307 307 NameExpr nameExpr( "" ); 308 addAggMembers( structInst, aggrExpr .get(), alt.cost+Cost::safe, alt.env, &nameExpr );308 addAggMembers( structInst, aggrExpr, alt.cost+Cost::safe, alt.env, &nameExpr ); 309 309 } else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( aggrExpr->get_result() ) ) { 310 310 NameExpr nameExpr( "" ); 311 addAggMembers( unionInst, aggrExpr .get(), alt.cost+Cost::safe, alt.env, &nameExpr );311 addAggMembers( unionInst, aggrExpr, alt.cost+Cost::safe, alt.env, &nameExpr ); 312 312 } // if 313 313 } … … 630 630 struct ArgPack { 631 631 std::size_t parent; ///< Index of parent pack 632 std::unique_ptr<Expression> expr;///< The argument stored here632 Expression* expr; ///< The argument stored here 633 633 Cost cost; ///< The cost of this argument 634 634 TypeEnvironment env; ///< Environment for this pack … … 677 677 std::list<Expression*> exprs; 678 678 const ArgPack* pack = this; 679 if ( expr ) { exprs.push_front( expr .release()); }679 if ( expr ) { exprs.push_front( expr ); } 680 680 while ( pack->tupleStart == 0 ) { 681 681 pack = &packs[pack->parent]; … … 684 684 } 685 685 // reset pack to appropriate tuple 686 expr .reset( new TupleExpr( exprs ) );686 expr = new TupleExpr{ exprs }; 687 687 tupleStart = pack->tupleStart - 1; 688 688 parent = pack->parent; … … 736 736 737 737 results.emplace_back( 738 i, expl.exprs[results[i].nextExpl] .get(), copy(results[i].env),738 i, expl.exprs[results[i].nextExpl], copy(results[i].env), 739 739 copy(results[i].need), copy(results[i].have), 740 740 copy(results[i].openVars), nextArg, nTuples, Cost::zero, nextExpl, … … 757 757 newResult.parent = i; 758 758 std::list<Expression*> emptyList; 759 newResult.expr .reset( new TupleExpr( emptyList ) );759 newResult.expr = new TupleExpr{ emptyList }; 760 760 argType = newResult.expr->get_result(); 761 761 } else { … … 764 764 newResult.cost = results[i].cost; 765 765 newResult.tupleStart = results[i].tupleStart; 766 newResult.expr .reset( results[i].expr->clone());766 newResult.expr = results[i].expr->clone(); 767 767 argType = newResult.expr->get_result(); 768 768 … … 814 814 // add new result 815 815 results.emplace_back( 816 i, expl.exprs.front() .get(), move(env), copy(results[i].need),816 i, expl.exprs.front(), move(env), copy(results[i].need), 817 817 copy(results[i].have), move(openVars), nextArg + 1, 818 818 nTuples, expl.cost, expl.exprs.size() == 1 ? 0 : 1, j ); … … 840 840 if ( results[i].hasExpl() ) { 841 841 const ExplodedActual& expl = results[i].getExpl( args ); 842 Expression* expr = expl.exprs[results[i].nextExpl] .get();842 Expression* expr = expl.exprs[results[i].nextExpl]; 843 843 844 844 TypeEnvironment env = results[i].env; … … 911 911 912 912 // consider only first exploded actual 913 Expression* expr = expl.exprs.front() .get();913 Expression* expr = expl.exprs.front(); 914 914 Type* actualType = expr->get_result()->clone(); 915 915 … … 1014 1014 1015 1015 results.emplace_back( 1016 i, expl.exprs[results[i].nextExpl] .get(), copy(results[i].env),1016 i, expl.exprs[results[i].nextExpl], copy(results[i].env), 1017 1017 copy(results[i].need), copy(results[i].have), 1018 1018 copy(results[i].openVars), nextArg, 0, Cost::zero, nextExpl, … … 1050 1050 // add new result 1051 1051 results.emplace_back( 1052 i, expl.exprs.front() .get(), move(env), copy(results[i].need),1052 i, expl.exprs.front(), move(env), copy(results[i].need), 1053 1053 copy(results[i].have), move(openVars), nextArg + 1, 0, 1054 1054 expl.cost, expl.exprs.size() == 1 ? 0 : 1, j ); … … 1344 1344 Expression * aggrExpr = agg->expr->clone(); 1345 1345 referenceToRvalueConversion( aggrExpr, cost ); 1346 std::unique_ptr<Expression> guard( aggrExpr );1347 1346 1348 1347 // find member of the given type
Note: See TracChangeset
for help on using the changeset viewer.