summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorajreynol <andrew.j.reynolds@gmail.com>2016-11-01 14:23:30 -0500
committerajreynol <andrew.j.reynolds@gmail.com>2016-11-01 14:23:30 -0500
commit9b3c5499d253e964c7bf0239271940ac756a67fb (patch)
tree456727dbcf64624bcb91d4d01bfb19627633d559
parentf4c783f97201753bf63c70c5c16b7861a236d57c (diff)
Revert change to Datatypes API to return vector of DatatypeTypes, as before. ASAN failures with datatypes should now be mostly fixed.
-rw-r--r--src/compat/cvc3_compat.cpp3
-rw-r--r--src/expr/expr_manager_template.cpp11
-rw-r--r--src/expr/expr_manager_template.h4
-rw-r--r--src/expr/node_manager.h2
-rw-r--r--src/parser/cvc/Cvc.g4
-rw-r--r--src/parser/parser.cpp8
-rw-r--r--src/parser/parser.h3
-rw-r--r--src/parser/smt2/Smt2.g7
-rw-r--r--src/smt/boolean_terms.cpp4
9 files changed, 23 insertions, 23 deletions
diff --git a/src/compat/cvc3_compat.cpp b/src/compat/cvc3_compat.cpp
index 5de62a458..8c9992164 100644
--- a/src/compat/cvc3_compat.cpp
+++ b/src/compat/cvc3_compat.cpp
@@ -1415,8 +1415,7 @@ void ValidityChecker::dataType(const std::vector<std::string>& names,
}
// Make the datatypes.
- vector<CVC4::DatatypeType> dtts;
- d_em->mkMutualDatatypeTypes(dv, dtts);
+ vector<CVC4::DatatypeType> dtts = d_em->mkMutualDatatypeTypes(dv);
// Post-process to register the names of everything with this validity checker.
// This is necessary for the compatibility layer because cons/sel operations are
diff --git a/src/expr/expr_manager_template.cpp b/src/expr/expr_manager_template.cpp
index d36ff5a3d..1eb94140d 100644
--- a/src/expr/expr_manager_template.cpp
+++ b/src/expr/expr_manager_template.cpp
@@ -650,20 +650,20 @@ DatatypeType ExprManager::mkDatatypeType(Datatype& datatype) {
// code anyway.
vector<Datatype> datatypes;
datatypes.push_back(datatype);
- std::vector<DatatypeType> result;
- mkMutualDatatypeTypes(datatypes, result);
+ std::vector<DatatypeType> result = mkMutualDatatypeTypes(datatypes);
Assert(result.size() == 1);
return result.front();
}
-void ExprManager::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::vector<DatatypeType>& dtts) {
+std::vector<DatatypeType> ExprManager::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes) {
std::set<Type> unresolvedTypes;
- return mkMutualDatatypeTypes(datatypes, unresolvedTypes, dtts);
+ return mkMutualDatatypeTypes(datatypes, unresolvedTypes);
}
-void ExprManager::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::set<Type>& unresolvedTypes, std::vector<DatatypeType>& dtts) {
+std::vector<DatatypeType> ExprManager::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::set<Type>& unresolvedTypes) {
NodeManagerScope nms(d_nodeManager);
std::map<std::string, DatatypeType> nameResolutions;
+ std::vector<DatatypeType> dtts;
Trace("ajr-temp") << "Build datatypes..." << std::endl;
//have to build deep copy so that datatypes will live in NodeManager
@@ -778,6 +778,7 @@ void ExprManager::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::s
}
Trace("ajr-temp") << "Finish..." << std::endl;
+ return dtts;
}
void ExprManager::checkResolvedDatatype(DatatypeType dtt) const {
diff --git a/src/expr/expr_manager_template.h b/src/expr/expr_manager_template.h
index d08c53e3d..ed9247e5e 100644
--- a/src/expr/expr_manager_template.h
+++ b/src/expr/expr_manager_template.h
@@ -380,7 +380,7 @@ public:
* Make a set of types representing the given datatypes, which may be
* mutually recursive.
*/
- void mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::vector<DatatypeType>& dtts);
+ std::vector<DatatypeType> mkMutualDatatypeTypes(std::vector<Datatype>& datatypes);
/**
* Make a set of types representing the given datatypes, which may
@@ -411,7 +411,7 @@ public:
* then no complicated Type needs to be created, and the above,
* simpler form of mkMutualDatatypeTypes() is enough.
*/
- void mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::set<Type>& unresolvedTypes, std::vector<DatatypeType>& dtts);
+ std::vector<DatatypeType> mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::set<Type>& unresolvedTypes);
/**
* Make a type representing a constructor with the given parameterization.
diff --git a/src/expr/node_manager.h b/src/expr/node_manager.h
index 5e6fcf3d3..0b3830f4b 100644
--- a/src/expr/node_manager.h
+++ b/src/expr/node_manager.h
@@ -84,7 +84,7 @@ class NodeManager {
friend Expr ExprManager::mkVar(Type, uint32_t flags);
// friend so it can access NodeManager's d_listeners and notify clients
- friend void ExprManager::mkMutualDatatypeTypes(std::vector<Datatype>&, std::set<Type>&, std::vector<DatatypeType>&);
+ friend std::vector<DatatypeType> ExprManager::mkMutualDatatypeTypes(std::vector<Datatype>&, std::set<Type>&);
/** Predicate for use with STL algorithms */
struct NodeValueReferenceCountNonZero {
diff --git a/src/parser/cvc/Cvc.g b/src/parser/cvc/Cvc.g
index 8c5d97254..e6d7f9d86 100644
--- a/src/parser/cvc/Cvc.g
+++ b/src/parser/cvc/Cvc.g
@@ -769,9 +769,7 @@ mainCommand[CVC4::Command*& cmd]
( COMMA datatypeDef[dts] )*
END_TOK
{ PARSER_STATE->popScope();
- std::vector<DatatypeType> dtts;
- PARSER_STATE->mkMutualDatatypeTypes(dts, dtts);
- cmd = new DatatypeDeclarationCommand(dtts); }
+ cmd = new DatatypeDeclarationCommand(PARSER_STATE->mkMutualDatatypeTypes(dts)); }
| CONTEXT_TOK
( ( str[s] | IDENTIFIER { s = AntlrInput::tokenText($IDENTIFIER); } )
diff --git a/src/parser/parser.cpp b/src/parser/parser.cpp
index cef8c4be4..c3c533576 100644
--- a/src/parser/parser.cpp
+++ b/src/parser/parser.cpp
@@ -303,10 +303,12 @@ bool Parser::isUnresolvedType(const std::string& name) {
return d_unresolved.find(getSort(name)) != d_unresolved.end();
}
-void Parser::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::vector<DatatypeType>& types) {
+std::vector<DatatypeType>
+Parser::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes) {
try {
- d_exprManager->mkMutualDatatypeTypes(datatypes, d_unresolved, types);
+ std::vector<DatatypeType> types =
+ d_exprManager->mkMutualDatatypeTypes(datatypes, d_unresolved);
assert(datatypes.size() == types.size());
@@ -371,6 +373,8 @@ void Parser::mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::vector
throw ParserException(dt.getName() + " is not well-founded");
}
}
+
+ return types;
} catch(IllegalArgumentException& ie) {
throw ParserException(ie.getMessage());
}
diff --git a/src/parser/parser.h b/src/parser/parser.h
index 7c9870edb..351aa858a 100644
--- a/src/parser/parser.h
+++ b/src/parser/parser.h
@@ -501,7 +501,8 @@ public:
/**
* Create sorts of mutually-recursive datatypes.
*/
- void mkMutualDatatypeTypes(std::vector<Datatype>& datatypes, std::vector<DatatypeType>& dtts);
+ std::vector<DatatypeType>
+ mkMutualDatatypeTypes(std::vector<Datatype>& datatypes);
/**
* Add an operator to the current legal set.
diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g
index 3bd308559..f88b30212 100644
--- a/src/parser/smt2/Smt2.g
+++ b/src/parser/smt2/Smt2.g
@@ -640,8 +640,7 @@ sygusCommand returns [CVC4::Command* cmd = NULL]
Debug("parser-sygus") << " " << i << " : " << datatypes[i].getName() << std::endl;
}
seq = new CommandSequence();
- std::vector<DatatypeType> datatypeTypes;
- PARSER_STATE->mkMutualDatatypeTypes(datatypes, datatypeTypes);
+ std::vector<DatatypeType> datatypeTypes = PARSER_STATE->mkMutualDatatypeTypes(datatypes);
seq->addCommand(new DatatypeDeclarationCommand(datatypeTypes));
std::map<DatatypeType, Expr> evals;
if( sorts[0]!=range ){
@@ -1326,7 +1325,6 @@ extendedCommand[CVC4::Command*& cmd]
datatypesDefCommand[bool isCo, CVC4::Command*& cmd]
@declarations {
std::vector<CVC4::Datatype> dts;
- std::vector<CVC4::DatatypeType> dtts;
std::string name;
std::vector<Type> sorts;
}
@@ -1340,8 +1338,7 @@ datatypesDefCommand[bool isCo, CVC4::Command*& cmd]
RPAREN_TOK
LPAREN_TOK ( LPAREN_TOK datatypeDef[isCo, dts, sorts] RPAREN_TOK )+ RPAREN_TOK
{ PARSER_STATE->popScope();
- PARSER_STATE->mkMutualDatatypeTypes(dts, dtts);
- cmd = new DatatypeDeclarationCommand(dtts); }
+ cmd = new DatatypeDeclarationCommand(PARSER_STATE->mkMutualDatatypeTypes(dts)); }
;
rewriterulesCommand[CVC4::Command*& cmd]
diff --git a/src/smt/boolean_terms.cpp b/src/smt/boolean_terms.cpp
index 0771cfc06..51ae0fd11 100644
--- a/src/smt/boolean_terms.cpp
+++ b/src/smt/boolean_terms.cpp
@@ -288,8 +288,8 @@ const Datatype& BooleanTermConverter::convertDatatype(const Datatype& dt) throw(
}
newDt.addConstructor(ctor);
}
- vector<DatatypeType> newDttVector;
- NodeManager::currentNM()->toExprManager()->mkMutualDatatypeTypes(newDtVector, unresolvedTypes, newDttVector);
+ vector<DatatypeType> newDttVector =
+ NodeManager::currentNM()->toExprManager()->mkMutualDatatypeTypes(newDtVector, unresolvedTypes);
DatatypeType& newDtt = newDttVector.front();
const Datatype& newD = newDtt.getDatatype();
for(c = dt.begin(); c != dt.end(); ++c) {
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback