diff options
author | ajreynol <andrew.j.reynolds@gmail.com> | 2016-11-01 13:20:49 -0500 |
---|---|---|
committer | ajreynol <andrew.j.reynolds@gmail.com> | 2016-11-01 13:20:49 -0500 |
commit | 8e0fce94790249ff7aff84ff4500bb96e2ebb9e9 (patch) | |
tree | 25e65718cff712f13688e452ffc1d4b459cd7367 /src/smt | |
parent | 3506b13f4d298095e8405b32b05e838f17dbe809 (diff) |
Working memory leak free version, changes interface to pointers.
Diffstat (limited to 'src/smt')
-rw-r--r-- | src/smt/boolean_terms.cpp | 20 | ||||
-rw-r--r-- | src/smt/smt_engine.cpp | 3 |
2 files changed, 13 insertions, 10 deletions
diff --git a/src/smt/boolean_terms.cpp b/src/smt/boolean_terms.cpp index 51ae0fd11..e9b51c47b 100644 --- a/src/smt/boolean_terms.cpp +++ b/src/smt/boolean_terms.cpp @@ -60,10 +60,10 @@ BooleanTermConverter::BooleanTermConverter(SmtEngine& smt) : d_ffDt = d_ff; d_ttDt = d_tt; } else { - Datatype spec("BooleanTerm"); + Datatype* spec = new Datatype("BooleanTerm"); // don't change the order; false is assumed to come first by the model postprocessor - spec.addConstructor(DatatypeConstructor("BT_False")); - spec.addConstructor(DatatypeConstructor("BT_True")); + spec->addConstructor(DatatypeConstructor("BT_False")); + spec->addConstructor(DatatypeConstructor("BT_True")); const Datatype& dt = NodeManager::currentNM()->toExprManager()->mkDatatypeType(spec).getDatatype(); d_ffDt = NodeManager::currentNM()->mkNode(kind::APPLY_CONSTRUCTOR, Node::fromExpr(dt["BT_False"].getConstructor())); d_ttDt = NodeManager::currentNM()->mkNode(kind::APPLY_CONSTRUCTOR, Node::fromExpr(dt["BT_True"].getConstructor())); @@ -255,13 +255,13 @@ const Datatype& BooleanTermConverter::convertDatatype(const Datatype& dt) throw( mySelfType = NodeManager::currentNM()->toExprManager()->mkSortConstructor(dt.getName() + "'", dt.getNumParameters()); unresolvedTypes.insert(mySelfType); } - vector<Datatype> newDtVector; + vector<Datatype*> newDtVector; if(dt.isParametric()) { - newDtVector.push_back(Datatype(dt.getName() + "'", dt.getParameters(), false)); + newDtVector.push_back(new Datatype(dt.getName() + "'", dt.getParameters(), false)); } else { - newDtVector.push_back(Datatype(dt.getName() + "'", false)); + newDtVector.push_back(new Datatype(dt.getName() + "'", false)); } - Datatype& newDt = newDtVector.front(); + Datatype * newDt = newDtVector.front(); Debug("boolean-terms") << "found a Boolean arg in constructor " << (*c).getName() << endl; for(c = dt.begin(); c != dt.end(); ++c) { DatatypeConstructor ctor((*c).getName() + "'", (*c).getTesterName() + "'"); @@ -286,10 +286,10 @@ const Datatype& BooleanTermConverter::convertDatatype(const Datatype& dt) throw( } } } - newDt.addConstructor(ctor); + newDt->addConstructor(ctor); } - vector<DatatypeType> newDttVector = - NodeManager::currentNM()->toExprManager()->mkMutualDatatypeTypes(newDtVector, unresolvedTypes); + vector<DatatypeType> newDttVector; + NodeManager::currentNM()->toExprManager()->mkMutualDatatypeTypes(newDtVector, unresolvedTypes, newDttVector); DatatypeType& newDtt = newDttVector.front(); const Datatype& newD = newDtt.getDatatype(); for(c = dt.begin(); c != dt.end(); ++c) { diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index e3a0533af..1e5ac84b4 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -784,8 +784,11 @@ public: } void nmNotifyNewDatatypes(const std::vector<DatatypeType>& dtts) { + Trace("ajr-temp") << "Notify " << dtts.size() << " datatypes." << std::endl; DatatypeDeclarationCommand c(dtts); + Trace("ajr-temp") << "dump command" << std::endl; d_smt.addToModelCommandAndDump(c); + Trace("ajr-temp") << "Finish" << std::endl; } void nmNotifyNewVar(TNode n, uint32_t flags) { |