Ignore:
Timestamp:
Mar 20, 2018, 5:12:25 PM (6 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
new-env, with_gc
Children:
7e4b44db
Parents:
68f9c43
Message:

First compiling build of CFA-CC with GC

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    r68f9c43 r8d7bef2  
    2121#include <list>                    // for _List_iterator, list, _List_const_...
    2222#include <map>                     // for _Rb_tree_iterator, map, _Rb_tree_c...
    23 #include <memory>                  // for allocator_traits<>::value_type, unique_ptr
     23#include <memory>                  // for allocator_traits<>::value_type
    2424#include <utility>                 // for pair
    2525#include <vector>                  // for vector
     
    296296                // adds anonymous member interpretations whenever an aggregate value type is seen.
    297297                // 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();
    299299                alt.env.apply( aggrExpr->get_result() );
    300300                Type * aggrType = aggrExpr->get_result();
    301301                if ( dynamic_cast< ReferenceType * >( aggrType ) ) {
    302302                        aggrType = aggrType->stripReferences();
    303                         aggrExpr.reset( new CastExpr( aggrExpr.release(), aggrType->clone() ) );
     303                        aggrExpr = new CastExpr{ aggrExpr, aggrType->clone() };
    304304                }
    305305
    306306                if ( StructInstType *structInst = dynamic_cast< StructInstType* >( aggrExpr->get_result() ) ) {
    307307                        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 );
    309309                } else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( aggrExpr->get_result() ) ) {
    310310                        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 );
    312312                } // if
    313313        }
     
    630630        struct ArgPack {
    631631                std::size_t parent;                ///< Index of parent pack
    632                 std::unique_ptr<Expression> expr;  ///< The argument stored here
     632                Expression* expr;                  ///< The argument stored here
    633633                Cost cost;                         ///< The cost of this argument
    634634                TypeEnvironment env;               ///< Environment for this pack
     
    677677                        std::list<Expression*> exprs;
    678678                        const ArgPack* pack = this;
    679                         if ( expr ) { exprs.push_front( expr.release() ); }
     679                        if ( expr ) { exprs.push_front( expr ); }
    680680                        while ( pack->tupleStart == 0 ) {
    681681                                pack = &packs[pack->parent];
     
    684684                        }
    685685                        // reset pack to appropriate tuple
    686                         expr.reset( new TupleExpr( exprs ) );
     686                        expr = new TupleExpr{ exprs };
    687687                        tupleStart = pack->tupleStart - 1;
    688688                        parent = pack->parent;
     
    736736
    737737                                                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),
    739739                                                        copy(results[i].need), copy(results[i].have),
    740740                                                        copy(results[i].openVars), nextArg, nTuples, Cost::zero, nextExpl,
     
    757757                                                        newResult.parent = i;
    758758                                                        std::list<Expression*> emptyList;
    759                                                         newResult.expr.reset( new TupleExpr( emptyList ) );
     759                                                        newResult.expr = new TupleExpr{ emptyList };
    760760                                                        argType = newResult.expr->get_result();
    761761                                                } else {
     
    764764                                                        newResult.cost = results[i].cost;
    765765                                                        newResult.tupleStart = results[i].tupleStart;
    766                                                         newResult.expr.reset( results[i].expr->clone() );
     766                                                        newResult.expr = results[i].expr->clone();
    767767                                                        argType = newResult.expr->get_result();
    768768
     
    814814                                                // add new result
    815815                                                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),
    817817                                                        copy(results[i].have), move(openVars), nextArg + 1,
    818818                                                        nTuples, expl.cost, expl.exprs.size() == 1 ? 0 : 1, j );
     
    840840                        if ( results[i].hasExpl() ) {
    841841                                const ExplodedActual& expl = results[i].getExpl( args );
    842                                 Expression* expr = expl.exprs[results[i].nextExpl].get();
     842                                Expression* expr = expl.exprs[results[i].nextExpl];
    843843
    844844                                TypeEnvironment env = results[i].env;
     
    911911
    912912                                // consider only first exploded actual
    913                                 Expression* expr = expl.exprs.front().get();
     913                                Expression* expr = expl.exprs.front();
    914914                                Type* actualType = expr->get_result()->clone();
    915915
     
    10141014
    10151015                                                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),
    10171017                                                        copy(results[i].need), copy(results[i].have),
    10181018                                                        copy(results[i].openVars), nextArg, 0, Cost::zero, nextExpl,
     
    10501050                                                // add new result
    10511051                                                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),
    10531053                                                        copy(results[i].have), move(openVars), nextArg + 1, 0,
    10541054                                                        expl.cost, expl.exprs.size() == 1 ? 0 : 1, j );
     
    13441344                        Expression * aggrExpr = agg->expr->clone();
    13451345                        referenceToRvalueConversion( aggrExpr, cost );
    1346                         std::unique_ptr<Expression> guard( aggrExpr );
    13471346
    13481347                        // find member of the given type
Note: See TracChangeset for help on using the changeset viewer.