Add ExprManager as argument to Datatype (#3535)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Fri, 6 Dec 2019 17:00:33 +0000 (11:00 -0600)
committerGitHub <noreply@github.com>
Fri, 6 Dec 2019 17:00:33 +0000 (11:00 -0600)
19 files changed:
examples/api/datatypes-new.cpp
examples/api/datatypes.cpp
examples/api/java/Datatypes.java
src/api/cvc4cpp.cpp
src/api/cvc4cpp.h
src/expr/datatype.cpp
src/expr/datatype.h
src/expr/node_manager.cpp
src/expr/sygus_datatype.cpp
src/parser/cvc/Cvc.g
src/parser/smt2/Smt2.g
src/parser/smt2/smt2.cpp
src/parser/smt2/smt2.h
test/unit/api/datatype_api_black.h
test/unit/api/solver_black.h
test/unit/api/sort_black.h
test/unit/expr/expr_public.h
test/unit/theory/type_enumerator_white.h
test/unit/util/datatype_black.h

index 9ff05ac0d8c08c3e7f90a22cafee9ffb68b7ddae..43f97796e3e3264d4213f9b468e218fc95508d89 100644 (file)
@@ -85,8 +85,9 @@ void test(Solver& slv, Sort& consListSort)
   // This example builds a simple parameterized list of sort T, with one
   // constructor "cons".
   Sort sort = slv.mkParamSort("T");
-  DatatypeDecl paramConsListSpec("paramlist",
-                                 sort);  // give the datatype a name
+  DatatypeDecl paramConsListSpec =
+      slv.mkDatatypeDecl("paramlist",
+                         sort);  // give the datatype a name
   DatatypeConstructorDecl paramCons("cons");
   DatatypeConstructorDecl paramNil("nil");
   DatatypeSelectorDecl paramHead("head", sort);
@@ -139,7 +140,8 @@ int main()
   // Second, it is "resolved" to an actual sort, at which point function
   // symbols are assigned to its constructors, selectors, and testers.
 
-  DatatypeDecl consListSpec("list");  // give the datatype a name
+  DatatypeDecl consListSpec =
+      slv.mkDatatypeDecl("list");  // give the datatype a name
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", slv.getIntegerSort());
   DatatypeSelectorDecl tail("tail", DatatypeDeclSelfSort());
index 34d440e3ea48c25eb6afb2407b87c0e7b2a8eb12..a749f0a0f75b28eb0b5479012091157388c4a271 100644 (file)
@@ -31,7 +31,7 @@ int main() {
   // is specified.  Second, it is "resolved"---at which point function
   // symbols are assigned to its constructors, selectors, and testers.
 
-  Datatype consListSpec("list"); // give the datatype a name
+  Datatype consListSpec(&em, "list");  // give the datatype a name
   DatatypeConstructor cons("cons");
   cons.addArg("head", em.integerType());
   cons.addArg("tail", DatatypeSelfType()); // a list
@@ -103,7 +103,7 @@ int main() {
   // This example builds a simple parameterized list of sort T, with one
   // constructor "cons".
   Type sort = em.mkSort("T", ExprManager::SORT_FLAG_PLACEHOLDER);
-  Datatype paramConsListSpec("list", std::vector<Type>{sort});
+  Datatype paramConsListSpec(&em, "list", std::vector<Type>{sort});
   DatatypeConstructor paramCons("cons");
   DatatypeConstructor paramNil("nil");
   paramCons.addArg("head", sort);
index 2c79bb75f580ebd408078b939f760502f09194b6..c5efe3d06ccb2d83bcd97355f43869b867b8b75d 100644 (file)
@@ -31,7 +31,7 @@ public class Datatypes {
     // is specified.  Second, it is "resolved"---at which point function
     // symbols are assigned to its constructors, selectors, and testers.
 
-    Datatype consListSpec = new Datatype("list"); // give the datatype a name
+    Datatype consListSpec = new Datatype(em, "list"); // give a name
     DatatypeConstructor cons = new DatatypeConstructor("cons");
     cons.addArg("head", em.integerType());
     cons.addArg("tail", new DatatypeSelfType()); // a list
index 7a3577e0dc23a68bff0813980dcf8f9a6a339642..f7ffe850a781503610cd163bcc3c54d67df83fbe 100644 (file)
@@ -1680,20 +1680,26 @@ std::ostream& operator<<(std::ostream& out,
 
 /* DatatypeDecl ------------------------------------------------------------- */
 
-DatatypeDecl::DatatypeDecl(const std::string& name, bool isCoDatatype)
-    : d_dtype(new CVC4::Datatype(name, isCoDatatype))
+DatatypeDecl::DatatypeDecl(const Solver* s,
+                           const std::string& name,
+                           bool isCoDatatype)
+    : d_dtype(new CVC4::Datatype(s->getExprManager(), name, isCoDatatype))
 {
 }
 
-DatatypeDecl::DatatypeDecl(const std::string& name,
+DatatypeDecl::DatatypeDecl(const Solver* s,
+                           const std::string& name,
                            Sort param,
                            bool isCoDatatype)
-    : d_dtype(new CVC4::Datatype(
-          name, std::vector<Type>{*param.d_type}, isCoDatatype))
+    : d_dtype(new CVC4::Datatype(s->getExprManager(),
+                                 name,
+                                 std::vector<Type>{*param.d_type},
+                                 isCoDatatype))
 {
 }
 
-DatatypeDecl::DatatypeDecl(const std::string& name,
+DatatypeDecl::DatatypeDecl(const Solver* s,
+                           const std::string& name,
                            const std::vector<Sort>& params,
                            bool isCoDatatype)
 {
@@ -1703,7 +1709,7 @@ DatatypeDecl::DatatypeDecl(const std::string& name,
     tparams.push_back(*s.d_type);
   }
   d_dtype = std::shared_ptr<CVC4::Datatype>(
-      new CVC4::Datatype(name, tparams, isCoDatatype));
+      new CVC4::Datatype(s->getExprManager(), name, tparams, isCoDatatype));
 }
 
 DatatypeDecl::~DatatypeDecl() {}
@@ -2867,6 +2873,28 @@ Term Solver::mkVar(Sort sort, const std::string& symbol) const
   CVC4_API_SOLVER_TRY_CATCH_END;
 }
 
+/* Create datatype declarations                                               */
+/* -------------------------------------------------------------------------- */
+
+DatatypeDecl Solver::mkDatatypeDecl(const std::string& name, bool isCoDatatype)
+{
+  return DatatypeDecl(this, name, isCoDatatype);
+}
+
+DatatypeDecl Solver::mkDatatypeDecl(const std::string& name,
+                                    Sort param,
+                                    bool isCoDatatype)
+{
+  return DatatypeDecl(this, name, param, isCoDatatype);
+}
+
+DatatypeDecl Solver::mkDatatypeDecl(const std::string& name,
+                                    const std::vector<Sort>& params,
+                                    bool isCoDatatype)
+{
+  return DatatypeDecl(this, name, params, isCoDatatype);
+}
+
 /* Create terms                                                               */
 /* -------------------------------------------------------------------------- */
 
@@ -3409,7 +3437,7 @@ Sort Solver::declareDatatype(
 {
   CVC4_API_ARG_CHECK_EXPECTED(ctors.size() > 0, ctors)
       << "a datatype declaration with at least one constructor";
-  DatatypeDecl dtdecl(symbol);
+  DatatypeDecl dtdecl(this, symbol);
   for (const DatatypeConstructorDecl& ctor : ctors)
   {
     dtdecl.addConstructor(ctor);
index 8c9bdc10cfe9562907c5e6da3230d4c752180b51..e05c228bcdc8e1cb3eaab5714b186421662200d6 100644 (file)
@@ -1093,6 +1093,7 @@ class CVC4_PUBLIC DatatypeConstructorDecl
   std::shared_ptr<CVC4::DatatypeConstructor> d_ctor;
 };
 
+class Solver;
 /**
  * A CVC4 datatype declaration.
  */
@@ -1100,36 +1101,7 @@ class CVC4_PUBLIC DatatypeDecl
 {
   friend class DatatypeConstructorArg;
   friend class Solver;
-
  public:
-  /**
-   * Constructor.
-   * @param name the name of the datatype
-   * @param isCoDatatype true if a codatatype is to be constructed
-   * @return the DatatypeDecl
-   */
-  DatatypeDecl(const std::string& name, bool isCoDatatype = false);
-
-  /**
-   * Constructor for parameterized datatype declaration.
-   * Create sorts parameter with Solver::mkParamSort().
-   * @param name the name of the datatype
-   * @param param the sort parameter
-   * @param isCoDatatype true if a codatatype is to be constructed
-   */
-  DatatypeDecl(const std::string& name, Sort param, bool isCoDatatype = false);
-
-  /**
-   * Constructor for parameterized datatype declaration.
-   * Create sorts parameter with Solver::mkParamSort().
-   * @param name the name of the datatype
-   * @param params a list of sort parameters
-   * @param isCoDatatype true if a codatatype is to be constructed
-   */
-  DatatypeDecl(const std::string& name,
-               const std::vector<Sort>& params,
-               bool isCoDatatype = false);
-
   /**
    * Destructor.
    */
@@ -1157,6 +1129,42 @@ class CVC4_PUBLIC DatatypeDecl
   const CVC4::Datatype& getDatatype(void) const;
 
  private:
+  /**
+   * Constructor.
+   * @param s the solver that created this datatype declaration
+   * @param name the name of the datatype
+   * @param isCoDatatype true if a codatatype is to be constructed
+   * @return the DatatypeDecl
+   */
+  DatatypeDecl(const Solver* s,
+               const std::string& name,
+               bool isCoDatatype = false);
+
+  /**
+   * Constructor for parameterized datatype declaration.
+   * Create sorts parameter with Solver::mkParamSort().
+   * @param s the solver that created this datatype declaration
+   * @param name the name of the datatype
+   * @param param the sort parameter
+   * @param isCoDatatype true if a codatatype is to be constructed
+   */
+  DatatypeDecl(const Solver* s,
+               const std::string& name,
+               Sort param,
+               bool isCoDatatype = false);
+
+  /**
+   * Constructor for parameterized datatype declaration.
+   * Create sorts parameter with Solver::mkParamSort().
+   * @param s the solver that created this datatype declaration
+   * @param name the name of the datatype
+   * @param params a list of sort parameters
+   * @param isCoDatatype true if a codatatype is to be constructed
+   */
+  DatatypeDecl(const Solver* s,
+               const std::string& name,
+               const std::vector<Sort>& params,
+               bool isCoDatatype = false);
   /* The internal (intermediate) datatype wrapped by this datatype
    * declaration
    * This is a shared_ptr rather than a unique_ptr since CVC4::Datatype is
@@ -2292,6 +2300,43 @@ class CVC4_PUBLIC Solver
    */
   Term mkVar(Sort sort, const std::string& symbol = std::string()) const;
 
+  /* .................................................................... */
+  /* Create datatype declarations                                         */
+  /* .................................................................... */
+
+  /**
+   * Create a datatype declaration.
+   * @param name the name of the datatype
+   * @param isCoDatatype true if a codatatype is to be constructed
+   * @return the DatatypeDecl
+   */
+  DatatypeDecl mkDatatypeDecl(const std::string& name,
+                              bool isCoDatatype = false);
+
+  /**
+   * Create a datatype declaration.
+   * Create sorts parameter with Solver::mkParamSort().
+   * @param name the name of the datatype
+   * @param param the sort parameter
+   * @param isCoDatatype true if a codatatype is to be constructed
+   * @return the DatatypeDecl
+   */
+  DatatypeDecl mkDatatypeDecl(const std::string& name,
+                              Sort param,
+                              bool isCoDatatype = false);
+
+  /**
+   * Create a datatype declaration.
+   * Create sorts parameter with Solver::mkParamSort().
+   * @param name the name of the datatype
+   * @param params a list of sort parameters
+   * @param isCoDatatype true if a codatatype is to be constructed
+   * @return the DatatypeDecl
+   */
+  DatatypeDecl mkDatatypeDecl(const std::string& name,
+                              const std::vector<Sort>& params,
+                              bool isCoDatatype = false);
+
   /* .................................................................... */
   /* Formula Handling                                                     */
   /* .................................................................... */
index f3f4c10d3f5185fa02e2e1b9ec111cfdb6523787..07af9617d092987b81c47dd58d9beb3acf3ddf54 100644 (file)
@@ -55,8 +55,8 @@ typedef expr::Attribute<expr::attr::DatatypeFiniteComputedTag, bool> DatatypeFin
 typedef expr::Attribute<expr::attr::DatatypeUFiniteTag, bool> DatatypeUFiniteAttr;
 typedef expr::Attribute<expr::attr::DatatypeUFiniteComputedTag, bool> DatatypeUFiniteComputedAttr;
 
-Datatype::Datatype(std::string name, bool isCo)
-    : d_internal(nullptr),  // until the Node-level datatype API is activated
+Datatype::Datatype(ExprManager* em, std::string name, bool isCo)
+    : d_em(em),
       d_name(name),
       d_params(),
       d_isCo(isCo),
@@ -75,10 +75,11 @@ Datatype::Datatype(std::string name, bool isCo)
 {
 }
 
-Datatype::Datatype(std::string name,
+Datatype::Datatype(ExprManager* em,
+                   std::string name,
                    const std::vector<Type>& params,
                    bool isCo)
-    : d_internal(nullptr),  // until the Node-level datatype API is activated
+    : d_em(em),
       d_name(name),
       d_params(params),
       d_isCo(isCo),
index c78fbc4369ae5e3e33a0917b62f5ad029176d2e2..c9191aadf395a9fa7c26de869fecab0c70976c4f 100644 (file)
@@ -656,13 +656,14 @@ class CVC4_PUBLIC Datatype {
   typedef DatatypeConstructorIterator const_iterator;
 
   /** Create a new Datatype of the given name. */
-  explicit Datatype(std::string name, bool isCo = false);
+  explicit Datatype(ExprManager* em, std::string name, bool isCo = false);
 
   /**
    * Create a new Datatype of the given name, with the given
    * parameterization.
    */
-  Datatype(std::string name,
+  Datatype(ExprManager* em,
+           std::string name,
            const std::vector<Type>& params,
            bool isCo = false);
 
@@ -976,6 +977,8 @@ class CVC4_PUBLIC Datatype {
   void toStream(std::ostream& out) const;
 
  private:
+  /** The expression manager that created this datatype */
+  ExprManager* d_em;
   /** The internal representation */
   std::shared_ptr<DType> d_internal;
   /** name of this datatype */
index 201e428de3623bf652c77c00b322c6df0861584a..1142da4297b205ce4c30ee506b9e6487e005875f 100644 (file)
@@ -545,7 +545,7 @@ TypeNode NodeManager::TupleTypeCache::getTupleType( NodeManager * nm, std::vecto
       for (unsigned i = 0; i < types.size(); ++ i) {
         sst << "_" << types[i];
       }
-      Datatype dt(sst.str());
+      Datatype dt(nm->toExprManager(), sst.str());
       dt.setTuple();
       std::stringstream ssc;
       ssc << sst.str() << "_ctor";
@@ -574,7 +574,7 @@ TypeNode NodeManager::RecTypeCache::getRecordType( NodeManager * nm, const Recor
       for(Record::FieldVector::const_iterator i = fields.begin(); i != fields.end(); ++i) {
         sst << "_" << (*i).first << "_" << (*i).second;
       }
-      Datatype dt(sst.str());
+      Datatype dt(nm->toExprManager(), sst.str());
       dt.setRecord();
       std::stringstream ssc;
       ssc << sst.str() << "_ctor";
index 73f7c5769415db3c67413990f2df1d498ef35dd6..bea8a41b834405f6e14efdb3b97663ded3988325 100644 (file)
@@ -20,7 +20,10 @@ using namespace CVC4::kind;
 
 namespace CVC4 {
 
-SygusDatatype::SygusDatatype(const std::string& name) : d_dt(Datatype(name)) {}
+SygusDatatype::SygusDatatype(const std::string& name)
+    : d_dt(Datatype(NodeManager::currentNM()->toExprManager(), name))
+{
+}
 
 std::string SygusDatatype::getName() const { return d_dt.getName(); }
 
index 94bb87fdbd48f8fbc24afdfee27c55f6c742bcfe..e4849aae64e82c180b9b539e32771356329c4f1b 100644 (file)
@@ -2294,7 +2294,7 @@ datatypeDef[std::vector<CVC4::Datatype>& datatypes]
         params.push_back( t ); }
       )* RBRACKET
     )?
-    { datatypes.push_back(Datatype(id, params, false));
+    { datatypes.push_back(Datatype(EXPR_MANAGER, id, params, false));
       if(!PARSER_STATE->isUnresolvedType(id)) {
         // if not unresolved, must be undeclared
         PARSER_STATE->checkDeclaration(id, CHECK_UNDECLARED, SYM_SORT);
index c1a9df887424b01783cdadd54c997bf78595db92..96ac7d48e9022c165b31a63d11fcaaaab86d365f 100644 (file)
@@ -959,7 +959,7 @@ sygusGrammar[CVC4::Type & ret,
       std::stringstream ss;
       ss << "dt_" << fun << "_" << i.first;
       std::string dname = ss.str();
-      datatypes.push_back(Datatype(dname));
+      datatypes.push_back(Datatype(EXPR_MANAGER, dname));
       // make its unresolved type, used for referencing the final version of
       // the datatype
       PARSER_STATE->checkDeclaration(dname, CHECK_UNDECLARED, SYM_SORT);
@@ -1523,7 +1523,7 @@ datatypesDef[bool isCo,
           PARSER_STATE->parseError("Wrong number of parameters for datatype.");
         }
         Debug("parser-dt") << params.size() << " parameters for " << dnames[dts.size()] << std::endl;
-        dts.push_back(Datatype(dnames[dts.size()],params,isCo));
+        dts.push_back(Datatype(EXPR_MANAGER, dnames[dts.size()],params,isCo));
       }
       LPAREN_TOK
       ( LPAREN_TOK constructorDef[dts.back()] RPAREN_TOK )+
@@ -1533,7 +1533,7 @@ datatypesDef[bool isCo,
           PARSER_STATE->parseError("No parameters given for datatype.");
         }
         Debug("parser-dt") << params.size() << " parameters for " << dnames[dts.size()] << std::endl;
-        dts.push_back(Datatype(dnames[dts.size()],params,isCo));
+        dts.push_back(Datatype(EXPR_MANAGER, dnames[dts.size()],params,isCo));
       }
       ( LPAREN_TOK constructorDef[dts.back()] RPAREN_TOK )+
     )
@@ -2596,7 +2596,7 @@ datatypeDef[bool isCo, std::vector<CVC4::Datatype>& datatypes,
         params.push_back( t ); }
       )* ']'
     )?*/ //AJR: this isn't necessary if we use z3's style
-    { datatypes.push_back(Datatype(id,params,isCo));
+    { datatypes.push_back(Datatype(EXPR_MANAGER, id, params, isCo));
       if(!PARSER_STATE->isUnresolvedType(id)) {
         // if not unresolved, must be undeclared
         PARSER_STATE->checkDeclaration(id, CHECK_UNDECLARED, SYM_SORT);
index c7e70495e533a28bb00eff4b7730b24fb27e36a6..73dea766a018b8ad11bb3e0e0ba0d081cbb66b7e 100644 (file)
@@ -1099,7 +1099,7 @@ bool Smt2::pushSygusDatatypeDef( Type t, std::string& dname,
                                   std::vector< bool >& allow_const,
                                   std::vector< std::vector< std::string > >& unresolved_gterm_sym ){
   sorts.push_back(t);
-  datatypes.push_back(Datatype(dname));
+  datatypes.push_back(Datatype(getExprManager(), dname));
   ops.push_back(std::vector<Expr>());
   cnames.push_back(std::vector<std::string>());
   cargs.push_back(std::vector<std::vector<CVC4::Type> >());
index 215f565cd9faf59053e77aa5e50d1308afa4b355..efdb0c70f6b21aa0f306a8f305902ebc70210d68 100644 (file)
@@ -383,22 +383,25 @@ class Smt2 : public Parser
       CVC4::Type& ret,
       bool isNested = false);
 
-  static bool pushSygusDatatypeDef( Type t, std::string& dname,
-                                    std::vector< CVC4::Datatype >& datatypes,
-                                    std::vector< CVC4::Type>& sorts,
-                                    std::vector< std::vector<CVC4::Expr> >& ops,
-                                    std::vector< std::vector<std::string> >& cnames,
-                                    std::vector< std::vector< std::vector< CVC4::Type > > >& cargs,
-                                    std::vector< bool >& allow_const,
-                                    std::vector< std::vector< std::string > >& unresolved_gterm_sym );
-
-  static bool popSygusDatatypeDef( std::vector< CVC4::Datatype >& datatypes,
-                                   std::vector< CVC4::Type>& sorts,
-                                   std::vector< std::vector<CVC4::Expr> >& ops,
-                                   std::vector< std::vector<std::string> >& cnames,
-                                   std::vector< std::vector< std::vector< CVC4::Type > > >& cargs,
-                                   std::vector< bool >& allow_const,
-                                   std::vector< std::vector< std::string > >& unresolved_gterm_sym );
+  bool pushSygusDatatypeDef(
+      Type t,
+      std::string& dname,
+      std::vector<CVC4::Datatype>& datatypes,
+      std::vector<CVC4::Type>& sorts,
+      std::vector<std::vector<CVC4::Expr>>& ops,
+      std::vector<std::vector<std::string>>& cnames,
+      std::vector<std::vector<std::vector<CVC4::Type>>>& cargs,
+      std::vector<bool>& allow_const,
+      std::vector<std::vector<std::string>>& unresolved_gterm_sym);
+
+  bool popSygusDatatypeDef(
+      std::vector<CVC4::Datatype>& datatypes,
+      std::vector<CVC4::Type>& sorts,
+      std::vector<std::vector<CVC4::Expr>>& ops,
+      std::vector<std::vector<std::string>>& cnames,
+      std::vector<std::vector<std::vector<CVC4::Type>>>& cargs,
+      std::vector<bool>& allow_const,
+      std::vector<std::vector<std::string>>& unresolved_gterm_sym);
 
   void setSygusStartIndex(const std::string& fun,
                           int startIndex,
index 6a5f3eb7b4939a76240322706f74b46b5cfd728d..b9c671a3040f7e1180dbba030672cfe673761100 100644 (file)
@@ -38,7 +38,7 @@ void DatatypeBlack::tearDown() {}
 
 void DatatypeBlack::testMkDatatypeSort()
 {
-  DatatypeDecl dtypeSpec("list");
+  DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver.getIntegerSort());
   cons.addSelector(head);
index 92313ac3ccef45f82c7d183f06719680609d6ea6..2831b840d400c215c71ba32d469f4bdc6f20bcfe 100644 (file)
@@ -179,7 +179,7 @@ void SolverBlack::testMkFloatingPointSort()
 
 void SolverBlack::testMkDatatypeSort()
 {
-  DatatypeDecl dtypeSpec("list");
+  DatatypeDecl dtypeSpec = d_solver->mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver->getIntegerSort());
   cons.addSelector(head);
@@ -187,7 +187,7 @@ void SolverBlack::testMkDatatypeSort()
   DatatypeConstructorDecl nil("nil");
   dtypeSpec.addConstructor(nil);
   TS_ASSERT_THROWS_NOTHING(d_solver->mkDatatypeSort(dtypeSpec));
-  DatatypeDecl throwsDtypeSpec("list");
+  DatatypeDecl throwsDtypeSpec = d_solver->mkDatatypeDecl("list");
   TS_ASSERT_THROWS(d_solver->mkDatatypeSort(throwsDtypeSpec),
                    CVC4ApiException&);
 }
@@ -627,7 +627,7 @@ void SolverBlack::testMkTermFromOp()
   // list datatype
 
   Sort sort = d_solver->mkParamSort("T");
-  DatatypeDecl listDecl("paramlist", sort);
+  DatatypeDecl listDecl = d_solver->mkDatatypeDecl("paramlist", sort);
   DatatypeConstructorDecl cons("cons");
   DatatypeConstructorDecl nil("nil");
   DatatypeSelectorDecl head("head", sort);
@@ -930,7 +930,7 @@ void SolverBlack::testGetOp()
   TS_ASSERT_EQUALS(exta.getOp(), ext);
 
   // Test Datatypes -- more complicated
-  DatatypeDecl consListSpec("list");
+  DatatypeDecl consListSpec = d_solver->mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver->getIntegerSort());
   DatatypeSelectorDecl tail("tail", DatatypeDeclSelfSort());
@@ -1036,7 +1036,7 @@ void SolverBlack::testSimplify()
   Sort uSort = d_solver->mkUninterpretedSort("u");
   Sort funSort1 = d_solver->mkFunctionSort({bvSort, bvSort}, bvSort);
   Sort funSort2 = d_solver->mkFunctionSort(uSort, d_solver->getIntegerSort());
-  DatatypeDecl consListSpec("list");
+  DatatypeDecl consListSpec = d_solver->mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver->getIntegerSort());
   DatatypeSelectorDecl tail("tail", DatatypeDeclSelfSort());
index 73eb3df88cc4fea716750e08debdb397a96779f1..4ea29b8d7d6373f6f07628351b0d287d8cae0088 100644 (file)
@@ -58,7 +58,7 @@ void SortBlack::tearDown() {}
 void SortBlack::testGetDatatype()
 {
   // create datatype sort, check should not fail
-  DatatypeDecl dtypeSpec("list");
+  DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver.getIntegerSort());
   cons.addSelector(head);
@@ -76,7 +76,7 @@ void SortBlack::testInstantiate()
 {
   // instantiate parametric datatype, check should not fail
   Sort sort = d_solver.mkParamSort("T");
-  DatatypeDecl paramDtypeSpec("paramlist", sort);
+  DatatypeDecl paramDtypeSpec = d_solver.mkDatatypeDecl("paramlist", sort);
   DatatypeConstructorDecl paramCons("cons");
   DatatypeConstructorDecl paramNil("nil");
   DatatypeSelectorDecl paramHead("head", sort);
@@ -87,7 +87,7 @@ void SortBlack::testInstantiate()
   TS_ASSERT_THROWS_NOTHING(
       paramDtypeSort.instantiate(std::vector<Sort>{d_solver.getIntegerSort()}));
   // instantiate non-parametric datatype sort, check should fail
-  DatatypeDecl dtypeSpec("list");
+  DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver.getIntegerSort());
   cons.addSelector(head);
@@ -222,7 +222,7 @@ void SortBlack::testGetDatatypeParamSorts()
 {
   // create parametric datatype, check should not fail
   Sort sort = d_solver.mkParamSort("T");
-  DatatypeDecl paramDtypeSpec("paramlist", sort);
+  DatatypeDecl paramDtypeSpec = d_solver.mkDatatypeDecl("paramlist", sort);
   DatatypeConstructorDecl paramCons("cons");
   DatatypeConstructorDecl paramNil("nil");
   DatatypeSelectorDecl paramHead("head", sort);
@@ -232,7 +232,7 @@ void SortBlack::testGetDatatypeParamSorts()
   Sort paramDtypeSort = d_solver.mkDatatypeSort(paramDtypeSpec);
   TS_ASSERT_THROWS_NOTHING(paramDtypeSort.getDatatypeParamSorts());
   // create non-parametric datatype sort, check should fail
-  DatatypeDecl dtypeSpec("list");
+  DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver.getIntegerSort());
   cons.addSelector(head);
@@ -246,7 +246,7 @@ void SortBlack::testGetDatatypeParamSorts()
 void SortBlack::testGetDatatypeArity()
 {
   // create datatype sort, check should not fail
-  DatatypeDecl dtypeSpec("list");
+  DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
   DatatypeConstructorDecl cons("cons");
   DatatypeSelectorDecl head("head", d_solver.getIntegerSort());
   cons.addSelector(head);
index 82cf10a9bf6ebdf167f2fc64d7675216e9fd7057..da9434d7953b3810176ef1f7a535dafe4f755c63 100644 (file)
@@ -370,7 +370,7 @@ private:
     TS_ASSERT(!null->isConst());
 
     // more complicated "constants" exist in datatypes and arrays theories
-    Datatype list("list");
+    Datatype list(d_em, "list");
     DatatypeConstructor consC("cons");
     consC.addArg("car", d_em->integerType());
     consC.addArg("cdr", DatatypeSelfType());
index 2c3f09ce0a984633510d2198903f5162d1dcd532..da915b7ee87a1826cae8783130e820c0c69b76c9 100644 (file)
@@ -146,7 +146,7 @@ class TypeEnumeratorWhite : public CxxTest::TestSuite {
   }
 
   void testDatatypesFinite() {
-    Datatype dt("Colors");
+    Datatype dt(d_em, "Colors");
     dt.addConstructor(DatatypeConstructor("red"));
     dt.addConstructor(DatatypeConstructor("orange"));
     dt.addConstructor(DatatypeConstructor("yellow"));
@@ -167,7 +167,7 @@ class TypeEnumeratorWhite : public CxxTest::TestSuite {
   }
 
   void testDatatypesInfinite1() {
-    Datatype colors("Colors");
+    Datatype colors(d_em, "Colors");
     colors.addConstructor(DatatypeConstructor("red"));
     colors.addConstructor(DatatypeConstructor("orange"));
     colors.addConstructor(DatatypeConstructor("yellow"));
@@ -175,7 +175,7 @@ class TypeEnumeratorWhite : public CxxTest::TestSuite {
     colors.addConstructor(DatatypeConstructor("blue"));
     colors.addConstructor(DatatypeConstructor("violet"));
     TypeNode colorsType = TypeNode::fromType(d_em->mkDatatypeType(colors));
-    Datatype listColors("ListColors");
+    Datatype listColors(d_em, "ListColors");
     DatatypeConstructor consC("cons");
     consC.addArg("car", colorsType.toType());
     consC.addArg("cdr", DatatypeSelfType());
index 6df18fd44c401cacb9a3e17dfe1b58a0c94b3f56..e81caf36fb4e7066d47b882bb5c91554092e9c44 100644 (file)
@@ -47,7 +47,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
 
   void testEnumeration() {
-    Datatype colors("colors");
+    Datatype colors(d_em, "colors");
 
     DatatypeConstructor yellow("yellow", "is_yellow");
     DatatypeConstructor blue("blue", "is_blue");
@@ -85,7 +85,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
 
   void testNat() {
-    Datatype nat("nat");
+    Datatype nat(d_em, "nat");
 
     DatatypeConstructor succ("succ", "is_succ");
     succ.addArg("pred", DatatypeSelfType());
@@ -112,7 +112,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
 
   void testTree() {
-    Datatype tree("tree");
+    Datatype tree(d_em, "tree");
     Type integerType = d_em->integerType();
 
     DatatypeConstructor node("node", "is_node");
@@ -144,7 +144,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
 
   void testListInt() {
-    Datatype list("list");
+    Datatype list(d_em, "list");
     Type integerType = d_em->integerType();
 
     DatatypeConstructor cons("cons", "is_cons");
@@ -169,7 +169,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
 
   void testListReal() {
-    Datatype list("list");
+    Datatype list(d_em, "list");
     Type realType = d_em->realType();
 
     DatatypeConstructor cons("cons", "is_cons");
@@ -194,7 +194,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
 
   void testListBoolean() {
-    Datatype list("list");
+    Datatype list(d_em, "list");
     Type booleanType = d_em->booleanType();
 
     DatatypeConstructor cons("cons", "is_cons");
@@ -226,7 +226,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
      *     list = cons(car: tree, cdr: list) | nil
      *   END;
      */
-    Datatype tree("tree");
+    Datatype tree(d_em, "tree");
     DatatypeConstructor node("node", "is_node");
     node.addArg("left", DatatypeSelfType());
     node.addArg("right", DatatypeSelfType());
@@ -238,7 +238,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
 
     Debug("datatypes") << tree << std::endl;
 
-    Datatype list("list");
+    Datatype list(d_em, "list");
     DatatypeConstructor cons("cons", "is_cons");
     cons.addArg("car", DatatypeUnresolvedType("tree"));
     cons.addArg("cdr", DatatypeSelfType());
@@ -280,7 +280,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
   void testMutualListTrees2()
   {
-    Datatype tree("tree");
+    Datatype tree(d_em, "tree");
     DatatypeConstructor node("node", "is_node");
     node.addArg("left", DatatypeSelfType());
     node.addArg("right", DatatypeSelfType());
@@ -290,7 +290,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
     leaf.addArg("leaf", DatatypeUnresolvedType("list"));
     tree.addConstructor(leaf);
 
-    Datatype list("list");
+    Datatype list(d_em, "list");
     DatatypeConstructor cons("cons", "is_cons");
     cons.addArg("car", DatatypeUnresolvedType("tree"));
     cons.addArg("cdr", DatatypeSelfType());
@@ -327,7 +327,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
   }
 
   void testNotSoWellFounded() {
-    Datatype tree("tree");
+    Datatype tree(d_em, "tree");
 
     DatatypeConstructor node("node", "is_node");
     node.addArg("left", DatatypeSelfType());
@@ -351,7 +351,7 @@ class DatatypeBlack : public CxxTest::TestSuite {
     Type t1, t2;
     v.push_back(t1 = d_em->mkSort("T1"));
     v.push_back(t2 = d_em->mkSort("T2"));
-    Datatype pair("pair", v);
+    Datatype pair(d_em, "pair", v);
 
     DatatypeConstructor mkpair("mk-pair");
     mkpair.addArg("first", t1);