* test/unit/context/context_black.h: Test CDList<>. In particular,
authorMorgan Deters <mdeters@gmail.com>
Fri, 26 Feb 2010 21:44:42 +0000 (21:44 +0000)
committerMorgan Deters <mdeters@gmail.com>
Fri, 26 Feb 2010 21:44:42 +0000 (21:44 +0000)
  test behavior of grow(), which was previously very broken, fixed by
  Tim earlier this afternoon.

* add the notion of a "private header".  Private header files (those
  not intended for distribution) should now #include "cvc4_private.h"
  (or "cvc4parser_private.h" for the parser code).  When not actually
  building libcvc4 (resp. libcvc4parser), or associated unit tests, a
  warning is emitted by the preprocessor.  This should make it easier
  to notice (and disentangle early) any unwanted public/private
  mixing.  Currently the warning identifies a couple places where we
  need to fix things.

* added directory infrastructure for arrays and BV theories.

* the Theory inheritance hierarchy makes some assumptions about the
  way inheritance is done.  These are checked at runtime when
  CVC4_ASSERTIONS is on.  See src/theory/theory.h's TheoryImpl<>
  definition for details.

* src/theory/booleans/theory_bool.h, src/theory/booleans/theory_def.h,
  src/theory/arith/theory_arith.h, src/theory/arith/theory_def.h,
  src/theory/uf/theory_uf.h, src/theory/uf/theory_def.h,
  src/parser/antlr_parser.h: minor code formatting fixes as per
  policy.

* src/theory/uf/theory_uf.cpp: fix for non-debug builds.

* src/util/options.h, src/util/model.h, src/util/result.h,
  src/expr/type.h: make CVC4_PUBLIC.

* src/util/decision_engine.h: no longer CVC4_PUBLIC.

* src/expr/expr_manager.cpp: ExprManager::booleanType() and
  ExprManager::kindType() weren't returning a value ?!  Fixed.

* src/expr/expr_manager.h, src/expr/node_manager.h: ExprManager no
  longer depends on NodeManager (public/private interface mixing).
  ExprManagerScope is an internal implementation detail, and is moved
  to node_manager.h.

* src/expr/node.h: mark gdb debug routines as "used" so that GCC
  always emits code for them (even though its static analysis shows
  they're unused).

52 files changed:
src/context/context.h
src/context/context_mm.h
src/expr/attribute.h
src/expr/expr_manager.cpp
src/expr/expr_manager.h
src/expr/node.h
src/expr/node_builder.h
src/expr/node_manager.h
src/expr/node_value.h
src/expr/type.h
src/include/cvc4_private.h [new file with mode: 0644]
src/include/cvc4parser_private.h [new file with mode: 0644]
src/parser/antlr_parser.h
src/parser/symbol_table.h
src/prop/cnf_conversion.h
src/prop/cnf_stream.h
src/prop/minisat/core/Solver.h
src/prop/minisat/core/SolverTypes.h
src/prop/minisat/simp/SimpSolver.h
src/prop/prop_engine.h
src/prop/sat.h
src/smt/smt_engine.h
src/theory/Makefile.am
src/theory/arith/theory_arith.h
src/theory/arith/theory_def.h
src/theory/arrays/Makefile [new file with mode: 0644]
src/theory/arrays/Makefile.am [new file with mode: 0644]
src/theory/arrays/kinds [new file with mode: 0644]
src/theory/arrays/theory_arrays.h [new file with mode: 0644]
src/theory/arrays/theory_def.h [new file with mode: 0644]
src/theory/booleans/theory_bool.h
src/theory/booleans/theory_def.h
src/theory/bv/Makefile [new file with mode: 0644]
src/theory/bv/Makefile.am [new file with mode: 0644]
src/theory/bv/kinds [new file with mode: 0644]
src/theory/bv/theory_bv.h [new file with mode: 0644]
src/theory/bv/theory_def.h [new file with mode: 0644]
src/theory/output_channel.h
src/theory/theory.h
src/theory/theory_engine.h
src/theory/theoryof_table_prologue.h
src/theory/uf/ecdata.h
src/theory/uf/theory_def.h
src/theory/uf/theory_uf.cpp
src/theory/uf/theory_uf.h
src/util/decision_engine.h
src/util/model.h
src/util/options.h
src/util/result.h
src/util/unique_id.h
test/unit/Makefile.am
test/unit/context/context_black.h

index a12eb11a53561d2a288dd59e420d997829ce96dd..6462cccaa2d1d784005b2e4e3e4e17dbfe140e63 100644 (file)
@@ -13,6 +13,8 @@
  ** Context class and context manager.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__CONTEXT__CONTEXT_H
 #define __CVC4__CONTEXT__CONTEXT_H
 
index c5149897971f22026e3f26c5eb391b7542a50b2f..c4e5aba4f83c7bf8bc7f861a150303dc6d6c5d5f 100644 (file)
@@ -14,6 +14,8 @@
  ** for use by ContextManager.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__CONTEXT__CONTEXT_MM_H
 #define __CVC4__CONTEXT__CONTEXT_MM_H
 
index d7514d50ce6c3fe9193a7fb636affab4eabb0da6..522427c035e79cda9864837b832b4e6710fe7229 100644 (file)
@@ -13,6 +13,8 @@
  ** Node attributes.
  **/
 
+#include "cvc4_private.h"
+
 /* There are strong constraints on ordering of declarations of
  * attributes and nodes due to template use */
 #include "expr/node.h"
index 993bf3483b3b79f1b01817b1027550eb2cf121f5..232a903e9b0ffac1a7280157ed718ac796784f41 100644 (file)
@@ -40,12 +40,12 @@ ExprManager::~ExprManager() {
 
 const BooleanType* ExprManager::booleanType() const {
   NodeManagerScope nms(d_nodeManager);
-  d_nodeManager->booleanType();
+  return d_nodeManager->booleanType();
 }
 
 const KindType* ExprManager::kindType() const {
   NodeManagerScope nms(d_nodeManager);
-  d_nodeManager->kindType();
+  return d_nodeManager->kindType();
 }
 
 Expr ExprManager::mkExpr(Kind kind) {
index 3ea1b581a78ae6ba5adcd095d12ba9b7a7028fc8..67fa0664aab2029a4a2d16b23a5d5f6bd99fc6a8 100644 (file)
@@ -18,7 +18,6 @@
 
 #include "cvc4_config.h"
 #include "expr/kind.h"
-#include "expr/node_manager.h"
 #include <vector>
 
 namespace CVC4 {
@@ -29,6 +28,7 @@ class BooleanType;
 class FunctionType; 
 class KindType;
 class SmtEngine;
+class NodeManager;
 
 class CVC4_PUBLIC ExprManager {
 
@@ -126,24 +126,5 @@ private:
 
 }/* CVC4 namespace */
 
-#include "expr/expr.h"
-
-namespace CVC4 {
-
-/**
- * A wrapper (essentially) for NodeManagerScope.  Without this, we'd
- * need Expr to be a friend of ExprManager.
- */
-class ExprManagerScope {
-  NodeManagerScope d_nms;
-public:
-  inline ExprManagerScope(const Expr& e) :
-    d_nms(e.getExprManager() == NULL ?
-          NodeManager::currentNM() : e.getExprManager()->getNodeManager()) {
-  }
-};
-
-}/* CVC4 namespace */
-
 #endif /* __CVC4__EXPR_MANAGER_H */
 
index 25f0b7453f3a8fc671be51229583abacd02a0f04..fe20167471f399ff46fb9b2f8c1db23c5ec36fc2 100644 (file)
@@ -13,6 +13,8 @@
  ** Reference-counted encapsulation of a pointer to node information.
  **/
 
+#include "cvc4_private.h"
+
 #include "expr/node_value.h"
 
 #ifndef __CVC4__NODE_H
@@ -690,12 +692,12 @@ template<bool ref_count>
  * to find the symbol, and use it, which is the first standard this code needs
  * to meet. A cleaner solution is welcomed.
  */
-static void CVC4_PUBLIC debugPrintNode(const NodeTemplate<true>& n) {
+static void __attribute__((used)) debugPrintNode(const NodeTemplate<true>& n) {
   n.printAst(Warning(), 0);
   Warning().flush();
 }
 
-static void CVC4_PUBLIC debugPrintTNode(const NodeTemplate<false>& n) {
+static void __attribute__((used)) debugPrintTNode(const NodeTemplate<false>& n) {
   n.printAst(Warning(), 0);
   Warning().flush();
 }
index 03936c89aa1e0feabaefb9ad7c29242650cbaf42..c1b2a87d289bb073084cfcd02e34c514869945a5 100644 (file)
@@ -13,6 +13,8 @@
  ** A builder interface for nodes.
  **/
 
+#include "cvc4_private.h"
+
 /* strong dependency; make sure node is included first */
 #include "node.h"
 
index 9d2b0947e9bdea8a464fa64399ef03fc5411ae16..00fcf52c468708776beccbdf3a496af052513d29 100644 (file)
@@ -13,6 +13,8 @@
  ** A manager for Nodes.
  **/
 
+#include "cvc4_private.h"
+
 /* circular dependency; force node.h first */
 #include "expr/attribute.h"
 #include "expr/node.h"
@@ -25,6 +27,7 @@
 #include <ext/hash_set>
 
 #include "expr/kind.h"
+#include "expr/expr.h"
 
 namespace __gnu_cxx {
   template<>
@@ -155,6 +158,19 @@ public:
   }
 };
 
+/**
+ * A wrapper (essentially) for NodeManagerScope.  Without this, we'd
+ * need Expr to be a friend of ExprManager.
+ */
+class ExprManagerScope {
+  NodeManagerScope d_nms;
+public:
+  inline ExprManagerScope(const Expr& e) :
+    d_nms(e.getExprManager() == NULL ?
+          NodeManager::currentNM() : e.getExprManager()->getNodeManager()) {
+  }
+};
+
 template <class AttrKind>
 inline typename AttrKind::value_type NodeManager::getAttribute(TNode n,
                                                                const AttrKind&) const {
index 85b8a6d60fc66c256329951594bb2f684b7e6541..e8435df266eb2a0177fed44a5c1402d740b3dd30 100644 (file)
@@ -17,9 +17,7 @@
  ** reference count on NodeValue instances and
  **/
 
-/* this must be above the check for __CVC4__EXPR__NODE_VALUE_H */
-/* to resolve a circular dependency */
-//#include "expr/node.h"
+#include "cvc4_private.h"
 
 #ifndef __CVC4__EXPR__NODE_VALUE_H
 #define __CVC4__EXPR__NODE_VALUE_H
index 77994eec56a03a893ea7a32f365918fb6bfe5576..7009ed50462e27172566e907b92b0cddcbc8c74e 100644 (file)
@@ -28,7 +28,7 @@ class NodeManager;
 /**
  * Class encapsulating CVC4 expression types.
  */
-class Type {
+class CVC4_PUBLIC Type {
 public:
   /** Comparision for equality */
   bool operator==(const Type& t) const;
diff --git a/src/include/cvc4_private.h b/src/include/cvc4_private.h
new file mode 100644 (file)
index 0000000..df5dd4a
--- /dev/null
@@ -0,0 +1,24 @@
+/*********************                                                        */
+/** cvc4_private.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** #inclusion of this file marks a header as private and generates a
+ ** warning when the file is included improperly.
+ **/
+
+#ifndef __CVC4_PRIVATE_H
+#define __CVC4_PRIVATE_H
+
+#if ! (defined(__BUILDING_CVC4LIB) || defined(__BUILDING_CVC4LIB_UNIT_TEST))
+#  warning A private CVC4 header was included when not building the library or private unit test code.
+#endif /* ! (__BUILDING_CVC4LIB || __BUILDING_CVC4LIB_UNIT_TEST) */
+
+#endif /* __CVC4_PRIVATE_H */
diff --git a/src/include/cvc4parser_private.h b/src/include/cvc4parser_private.h
new file mode 100644 (file)
index 0000000..72d942e
--- /dev/null
@@ -0,0 +1,24 @@
+/*********************                                                        */
+/** cvc4parser_private.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** #inclusion of this file marks a header as private and generates a
+ ** warning when the file is included improperly.
+ **/
+
+#ifndef __CVC4PARSER_PRIVATE_H
+#define __CVC4PARSER_PRIVATE_H
+
+#if ! (defined(__BUILDING_CVC4PARSERLIB) || defined(__BUILDING_CVC4PARSERLIB_UNIT_TEST))
+#  warning A private CVC4 parser header was included when not building the parser library or private unit test code.
+#endif /* ! (__BUILDING_CVC4PARSERLIB || __BUILDING_CVC4PARSERLIB_UNIT_TEST) */
+
+#endif /* __CVC4PARSER_PRIVATE_H */
index 3fd94f82bcf2671e989dbe55629334516ef05934..8f1f3fa1dd71225f27788265b188242735d4692d 100644 (file)
  ** Base for ANTLR parser classes.
  **/
 
-#ifndef CVC4_PARSER_H_
-#define CVC4_PARSER_H_
+#include "cvc4parser_private.h"
+
+#ifndef __CVC4__PARSER__ANTLR_PARSER_H
+#define __CVC4__PARSER__ANTLR_PARSER_H
 
 #include <vector>
 #include <string>
@@ -342,10 +344,7 @@ private:
   Expr getSymbol(const std::string& var_name, SymbolType type);
 };
 
-
-
-
 }/* CVC4::parser namespace */
 }/* CVC4 namespace */
 
-#endif /* CVC4_PARSER_H_ */
+#endif /* __CVC4__PARSER__ANTLR_PARSER_H */
index 1f43dbda67e95e6c4022d152f60e618ba6945b40..bfa38ec289154ebb500eda8425ff8bee6a7eb68a 100644 (file)
@@ -13,6 +13,8 @@
  ** A symbol table for the parsers' use.
  **/
 
+#include "cvc4parser_private.h"
+
 #ifndef __CVC4__PARSER__SYMBOL_TABLE_H
 #define __CVC4__PARSER__SYMBOL_TABLE_H
 
index 4ddfd3c06e6eb6b35d3ddd98182f44f86876d4ab..d66e721db3241cb286eeaaa48fa1b5120bf88630 100644 (file)
@@ -13,6 +13,8 @@
  ** A type for describing possible CNF conversions.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__CNF_CONVERSION_H
 #define __CVC4__CNF_CONVERSION_H
 
index 83a6aa68fba36d64a5e5fa2b18a2e04820c6fd48..da3f7b1ed42a465037081f13a7ce059034ff75d6 100644 (file)
  ** internals such as the representation and translation of 
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__CNF_STREAM_H
 #define __CVC4__CNF_STREAM_H
 
-
 #include "expr/node.h"
 #include "prop/sat.h"
 
index 5e51e5f5aebd1a5baac581c8168f0ae471ae0e7c..44499246e8d24bc303b61a15e550a98ccebe6b21 100644 (file)
@@ -17,6 +17,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 **************************************************************************************************/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__PROP__MINISAT__SOLVER_H
 #define __CVC4__PROP__MINISAT__SOLVER_H
 
index 8860693e6e202fcfea6e87342594cde0266dd4ca..fd6a78ab09d1f3a078f6ed4ce3b8bf0842892fd9 100644 (file)
@@ -17,6 +17,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 **************************************************************************************************/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__PROP__MINISAT__SOLVERTYPES_H
 #define __CVC4__PROP__MINISAT__SOLVERTYPES_H
 
index f9e9b038746b31211149db3744432860f642c03a..223b21998f0957e8333919bf6140d83a0014cdc8 100644 (file)
@@ -17,6 +17,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 **************************************************************************************************/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__PROP__MINISAT__SIMP_SOLVER_H
 #define __CVC4__PROP__MINISAT__SIMP_SOLVER_H
 
index 4ea5e3b785f8f3c6ae81b24d0defe32ed0a469a5..f57161fde4b66bff1871acc22c722096f1a4c89b 100644 (file)
@@ -14,6 +14,8 @@
  ** between CVC4's SMT infrastructure and the SAT solver.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__PROP_ENGINE_H
 #define __CVC4__PROP_ENGINE_H
 
index a9696162a497a8e91e200d19c371dae98958b1e3..65752f20b44bd6e3eff462f782f09975647af653 100644 (file)
@@ -13,6 +13,8 @@
  ** SAT Solver.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__PROP__SAT_H
 #define __CVC4__PROP__SAT_H
 
index afb62fe6a9414ffec996c7cc7beb2e4e2e095061..5946764166bb71124110ee42366fea354a034f0d 100644 (file)
@@ -23,7 +23,8 @@
 #include "expr/expr_manager.h"
 #include "util/result.h"
 #include "util/model.h"
-#include "util/decision_engine.h"
+
+#include "expr/node.h"
 
 // In terms of abstraction, this is below (and provides services to)
 // ValidityChecker and above (and requires the services of)
 
 namespace CVC4 {
 
+namespace context {
+  class Context;
+}
+
 class Command;
 class Options;
 class TheoryEngine;
+class DecisionEngine;
 
 namespace prop {
   class PropEngine;
index 951dbeb7836601c840c6d3a1a9d1a2e0332415f3..d71ae842f82b07badf0088fc47955f52253fb171 100644 (file)
@@ -15,7 +15,9 @@ libtheory_la_SOURCES = \
 libtheory_la_LIBADD = \
        @builddir@/booleans/libbooleans.la \
        @builddir@/uf/libuf.la \
-       @builddir@/arith/libarith.la
+       @builddir@/arith/libarith.la \
+       @builddir@/arrays/libarrays.la \
+       @builddir@/bv/libbv.la
 
 EXTRA_DIST = \
        @srcdir@/theoryof_table.h \
@@ -36,4 +38,4 @@ BUILT_SOURCES = @srcdir@/theoryof_table.h
 dist-hook: @srcdir@/theoryof_table.h
 MAINTAINERCLEANFILES = @srcdir@/theoryof_table.h
 
-SUBDIRS = booleans uf arith
+SUBDIRS = booleans uf arith arrays bv
index 5b596afd4161bd42e27f48b497873b2a2963014f..973651f7a224dd1fc3a0ac5493f38d93d813521f 100644 (file)
@@ -1,4 +1,25 @@
+/*********************                                                        */
+/** theory_arith.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Arithmetic theory.
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__ARITH__THEORY_ARITH_H
+#define __CVC4__THEORY__ARITH__THEORY_ARITH_H
+
 #include "theory/theory.h"
+#include "context/context.h"
 
 namespace CVC4 {
 namespace theory {
@@ -17,7 +38,8 @@ public:
   void explain(TNode n, Effort e) { Unimplemented(); }
 };
 
-}
-}
-}
+}/* CVC4::theory::arith namespace */
+}/* CVC4::theory namespace */
+}/* CVC4 namespace */
 
+#endif /* __CVC4__THEORY__ARITH__THEORY_ARITH_H */
index 9b01a458ec15830b14d886634773eeda6e11f32c..da423972490bfbcfa8572fbded34c918d746d3fb 100644 (file)
@@ -1,3 +1,24 @@
+/*********************                                                        */
+/** theory_def.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Definition for TheoryARITH (for purposes of linking to the
+ ** theory-code-finding mechanisms in the parent directory).
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__ARITH__THEORY_DEF_H
+#define __CVC4__THEORY__ARITH__THEORY_DEF_H
+
 #include "theory/arith/theory_arith.h"
 
 namespace CVC4 {
@@ -7,3 +28,5 @@ namespace CVC4 {
     }
   }
 }
+
+#endif /* __CVC4__THEORY__ARITH__THEORY_DEF_H */
diff --git a/src/theory/arrays/Makefile b/src/theory/arrays/Makefile
new file mode 100644 (file)
index 0000000..bce529d
--- /dev/null
@@ -0,0 +1,4 @@
+topdir = ../../..
+srcdir = src/theory/arrays
+
+include $(topdir)/Makefile.subdir
diff --git a/src/theory/arrays/Makefile.am b/src/theory/arrays/Makefile.am
new file mode 100644 (file)
index 0000000..af3a28b
--- /dev/null
@@ -0,0 +1,12 @@
+AM_CPPFLAGS = \
+       -D__BUILDING_CVC4LIB \
+       -I@srcdir@/../../include -I@srcdir@/../..
+AM_CXXFLAGS = -Wall -fvisibility=hidden
+
+noinst_LTLIBRARIES = libarrays.la
+
+libarrays_la_SOURCES = \
+       theory_def.h \
+       theory_arrays.h
+
+EXTRA_DIST = kinds
diff --git a/src/theory/arrays/kinds b/src/theory/arrays/kinds
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/theory/arrays/theory_arrays.h b/src/theory/arrays/theory_arrays.h
new file mode 100644 (file)
index 0000000..ec3b88c
--- /dev/null
@@ -0,0 +1,45 @@
+/*********************                                                        */
+/** theory_arrays.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Theory of arrays.
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__ARRAYS__THEORY_ARRAYS_H
+#define __CVC4__THEORY__ARRAYS__THEORY_ARRAYS_H
+
+#include "theory/theory.h"
+#include "context/context.h"
+
+namespace CVC4 {
+namespace theory {
+namespace arrays {
+
+class TheoryArrays : public TheoryImpl<TheoryArrays> {
+public:
+  TheoryArrays(context::Context* c, OutputChannel& out) :
+    TheoryImpl<TheoryArrays>(c, out) {
+  }
+
+  void preRegisterTerm(TNode n) { Unimplemented(); }
+  void registerTerm(TNode n) { Unimplemented(); }
+  void check(Effort e) { Unimplemented(); }
+  void propagate(Effort e) { Unimplemented(); }
+  void explain(TNode n, Effort e) { Unimplemented(); }
+};
+
+}/* CVC4::theory::arrays namespace */
+}/* CVC4::theory namespace */
+}/* CVC4 namespace */
+
+#endif /* __CVC4__THEORY__ARRAYS__THEORY_ARRAYS_H */
diff --git a/src/theory/arrays/theory_def.h b/src/theory/arrays/theory_def.h
new file mode 100644 (file)
index 0000000..68eec69
--- /dev/null
@@ -0,0 +1,32 @@
+/*********************                                                        */
+/** theory_def.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Definition for TheoryARRAYS (for purposes of linking to the
+ ** theory-code-finding mechanisms in the parent directory).
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__ARRAYS__THEORY_DEF_H
+#define __CVC4__THEORY__ARRAYS__THEORY_DEF_H
+
+#include "theory/arrays/theory_arrays.h"
+
+namespace CVC4 {
+  namespace theory {
+    namespace arrays {
+      typedef TheoryArrays TheoryARRAYS;
+    }
+  }
+}
+
+#endif /* __CVC4__THEORY__ARRAYS__THEORY_DEF_H */
index 26e5a69fb5984f73ef474e3695193f7918c1d75a..5196bb018c0041402b556cf46fcfaff28b91ae65 100644 (file)
@@ -1,3 +1,23 @@
+/*********************                                                        */
+/** theory_bool.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** The theory of booleans.
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__BOOLEANS__THEORY_BOOL_H
+#define __CVC4__THEORY__BOOLEANS__THEORY_BOOL_H
+
 #include "theory/theory.h"
 #include "context/context.h"
 
@@ -18,7 +38,8 @@ public:
   void explain(TNode n, Effort e) { Unimplemented(); }
 };
 
-}
-}
-}
+}/* CVC4::theory::booleans namespace */
+}/* CVC4::theory namespace */
+}/* CVC4 namespace */
 
+#endif /* __CVC4__THEORY__BOOLEANS__THEORY_BOOL_H */
index 37aacb353326774dce82445a0c309403c1f518be..62643159302a24ecc9ae83ab00b95519d3162884 100644 (file)
@@ -1,3 +1,24 @@
+/*********************                                                        */
+/** theory_def.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Definition for TheoryBOOLEANS (for purposes of linking to the
+ ** theory-code-finding mechanisms in the parent directory).
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__BOOLEANS__THEORY_DEF_H
+#define __CVC4__THEORY__BOOLEANS__THEORY_DEF_H
+
 #include "theory/booleans/theory_bool.h"
 
 namespace CVC4 {
@@ -7,3 +28,5 @@ namespace CVC4 {
     }
   }
 }
+
+#endif /* __CVC4__THEORY__BOOLEANS__THEORY_DEF_H */
diff --git a/src/theory/bv/Makefile b/src/theory/bv/Makefile
new file mode 100644 (file)
index 0000000..7974083
--- /dev/null
@@ -0,0 +1,4 @@
+topdir = ../../..
+srcdir = src/theory/bv
+
+include $(topdir)/Makefile.subdir
diff --git a/src/theory/bv/Makefile.am b/src/theory/bv/Makefile.am
new file mode 100644 (file)
index 0000000..54622bf
--- /dev/null
@@ -0,0 +1,12 @@
+AM_CPPFLAGS = \
+       -D__BUILDING_CVC4LIB \
+       -I@srcdir@/../../include -I@srcdir@/../..
+AM_CXXFLAGS = -Wall -fvisibility=hidden
+
+noinst_LTLIBRARIES = libbv.la
+
+libbv_la_SOURCES = \
+       theory_def.h \
+       theory_bv.h
+
+EXTRA_DIST = kinds
diff --git a/src/theory/bv/kinds b/src/theory/bv/kinds
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/theory/bv/theory_bv.h b/src/theory/bv/theory_bv.h
new file mode 100644 (file)
index 0000000..fbb6254
--- /dev/null
@@ -0,0 +1,45 @@
+/*********************                                                        */
+/** theory_bv.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Bitvector theory.
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__BV__THEORY_BV_H
+#define __CVC4__THEORY__BV__THEORY_BV_H
+
+#include "theory/theory.h"
+#include "context/context.h"
+
+namespace CVC4 {
+namespace theory {
+namespace bv {
+
+class TheoryBV : public TheoryImpl<TheoryBV> {
+public:
+  TheoryBV(context::Context* c, OutputChannel& out) :
+    TheoryImpl<TheoryBV>(c, out) {
+  }
+
+  void preRegisterTerm(TNode n) { Unimplemented(); }
+  void registerTerm(TNode n) { Unimplemented(); }
+  void check(Effort e) { Unimplemented(); }
+  void propagate(Effort e) { Unimplemented(); }
+  void explain(TNode n, Effort e) { Unimplemented(); }
+};
+
+}/* CVC4::theory::bv namespace */
+}/* CVC4::theory namespace */
+}/* CVC4 namespace */
+
+#endif /* __CVC4__THEORY__BV__THEORY_BV_H */
diff --git a/src/theory/bv/theory_def.h b/src/theory/bv/theory_def.h
new file mode 100644 (file)
index 0000000..e16adb9
--- /dev/null
@@ -0,0 +1,24 @@
+/*********************                                                        */
+/** theory_def.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Definition for TheoryBV (for purposes of linking to the
+ ** theory-code-finding mechanisms in the parent directory).
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__BV__THEORY_DEF_H
+#define __CVC4__THEORY__BV__THEORY_DEF_H
+
+#include "theory/bv/theory_bv.h"
+
+#endif /* __CVC4__THEORY__BV__THEORY_DEF_H */
index efd2911efd58b1ac8c315378cc7c6cf7972f49b1..54fa7180811401cd677ad67855bb63d8e86f0047 100644 (file)
@@ -13,6 +13,8 @@
  ** The theory output channel interface.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__THEORY__OUTPUT_CHANNEL_H
 #define __CVC4__THEORY__OUTPUT_CHANNEL_H
 
index f5b1e9b449dacd92970aa49cd3965a1ff3f032d5..efa67d6c48e0c5a5df44360e3c8e0fe87b8d5720 100644 (file)
@@ -13,6 +13,8 @@
  ** Base of the theory interface.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__THEORY__THEORY_H
 #define __CVC4__THEORY__THEORY_H
 
@@ -282,9 +284,8 @@ protected:
 
 template <class T>
 Node TheoryImpl<T>::get() {
-  Warning.printf("testing %s == %s\n", typeid(*this).name(), typeid(T).name());
-  /*Assert(typeid(*this) == typeid(T),
-         "Improper Theory inheritance chain detected.");*/
+  Assert(typeid(*this) == typeid(T),
+         "Improper Theory inheritance chain detected.");
 
   Assert( !d_facts.empty(),
           "Theory::get() called with assertion queue empty!" );
index 7d630f6671514e25491d8e6001e05bd5f9f5dd33..076ea4d2d3ae215545953382ba788783421dd7c1 100644 (file)
  ** The theory engine.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__THEORY_ENGINE_H
 #define __CVC4__THEORY_ENGINE_H
 
 #include "expr/node.h"
 #include "theory/theory.h"
-#include "theory/uf/theory_uf.h"
 #include "theory/theoryof_table.h"
 
+#include "theory/booleans/theory_bool.h"
+#include "theory/uf/theory_uf.h"
+#include "theory/arith/theory_arith.h"
+#include "theory/arrays/theory_arrays.h"
+#include "theory/bv/theory_bv.h"
+
 namespace CVC4 {
 
 class SmtEngine;
@@ -70,6 +77,8 @@ class TheoryEngine {
   theory::booleans::TheoryBool d_bool;
   theory::uf::TheoryUF d_uf;
   theory::arith::TheoryArith d_arith;
+  theory::arrays::TheoryArrays d_arrays;
+  theory::bv::TheoryBV d_bv;
 
 public:
 
@@ -81,11 +90,15 @@ public:
     d_theoryOut(),
     d_bool(ctxt, d_theoryOut),
     d_uf(ctxt, d_theoryOut),
-    d_arith(ctxt, d_theoryOut) {
+    d_arith(ctxt, d_theoryOut),
+    d_arrays(ctxt, d_theoryOut),
+    d_bv(ctxt, d_theoryOut) {
     d_theoryOut.setEngine(*this);
     theoryOfTable.registerTheory(&d_bool);
     theoryOfTable.registerTheory(&d_uf);
     theoryOfTable.registerTheory(&d_arith);
+    theoryOfTable.registerTheory(&d_arrays);
+    theoryOfTable.registerTheory(&d_bv);
   }
 
   /**
index 5f8c28723cfa734f812b6adc194f4dda7252f8c2..47fd2d9b29261d0fdb984cc60d32d84d38bd6314 100644 (file)
@@ -13,6 +13,8 @@
  ** The theoryOf table.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__THEORY__THEORYOF_TABLE_H
 #define __CVC4__THEORY__THEORYOF_TABLE_H
 
index 9b87aa6cb09f9a3caff9173d29325d472b7089fe..5bb3a57bd065b063cc2371a473d3e08f3919e9eb 100644 (file)
@@ -14,6 +14,8 @@
  ** Currently keeps a context dependent watch list.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__THEORY__UF__ECDATA_H
 #define __CVC4__THEORY__UF__ECDATA_H
 
index 8e3f5e9f19c785e16d3c2d897b9730c4ab04d7ce..b5cdda4ec3a9c414e34c31c26c708616aebab10e 100644 (file)
@@ -1,7 +1,24 @@
-namespace CVC4 {
-  namespace theory {
-    namespace uf {
-      class TheoryUF;
-    }
-  }
-}
+/*********************                                                        */
+/** theory_def.h
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** Definition for TheoryUF (for purposes of linking to the
+ ** theory-code-finding mechanisms in the parent directory).
+ **/
+
+#include "cvc4_private.h"
+
+#ifndef __CVC4__THEORY__UF__THEORY_DEF_H
+#define __CVC4__THEORY__UF__THEORY_DEF_H
+
+#include "theory/uf/theory_uf.h"
+
+#endif /* __CVC4__THEORY__UF__THEORY_DEF_H */
index 0c58d45e489ea657c543650ec5195b505ef06225..0c0559bb0bee4a5705d5aa5416805704435e51f2 100644 (file)
@@ -43,7 +43,9 @@ void TheoryUF::preRegisterTerm(TNode n){
 void TheoryUF::registerTerm(TNode n){
 
   d_registered.push_back(n);
+#ifdef CVC4_DEBUG
   n.printAst(Warning());
+#endif /* CVC4_DEBUG */
 
   ECData* ecN;
 
index 34b6719d7e22b1757c73a7a6376afed182a2c68f..6efdf27c0a0142ae35c2dbff8cec3faac5f8ff49 100644 (file)
  **
  **/
 
+#include "cvc4_private.h"
 
-#ifndef __CVC4__THEORY__THEORY_UF_H
-#define __CVC4__THEORY__THEORY_UF_H
+#ifndef __CVC4__THEORY__UF__THEORY_UF_H
+#define __CVC4__THEORY__UF__THEORY_UF_H
 
 #include "expr/node.h"
 #include "expr/attribute.h"
@@ -150,4 +151,4 @@ typedef expr::Attribute<EquivClass, ECData* /*, ECCleanupFcn*/> ECAttr;
 } /* CVC4 namespace */
 
 
-#endif /* __CVC4__THEORY__THEORY_UF_H */
+#endif /* __CVC4__THEORY__UF__THEORY_UF_H */
index 72943ee9907059629a220abeedc985011a7d6d34..ac9fc5ffd755c6554a6d13eb50a70f1fb3ed0315 100644 (file)
@@ -13,6 +13,8 @@
  ** A decision engine for CVC4.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__DECISION_ENGINE_H
 #define __CVC4__DECISION_ENGINE_H
 
@@ -27,7 +29,7 @@ namespace CVC4 {
 /**
  * A decision mechanism for the next decision.
  */
-class CVC4_PUBLIC DecisionEngine {
+class DecisionEngine {
 public:
   /**
    * Destructor.
index 65c919dd2e921b951f90f2c2e31a46c7cd90c43c..d2a51e4479ebf1a02df8bbdd309361ae09a1f9ae 100644 (file)
@@ -18,7 +18,7 @@
 
 namespace CVC4 {
 
-class Model {
+class CVC4_PUBLIC Model {
 };/* class Model */
 
 }/* CVC4 namespace */
index 404700a8556ebc141df6e1767cd26e072c36d487..d2b19a20bc827ad6cd47f00e268bd9dcb68fc015 100644 (file)
@@ -22,7 +22,7 @@
 
 namespace CVC4 {
 
-struct Options {
+struct CVC4_PUBLIC Options {
 
   std::string binary_name;
 
index 49ba7c697f24b74eba420d70d1fc5e0ad7624bc9..7557cece8c9f5bb96abb61fe84e87109968c8b2c 100644 (file)
@@ -29,7 +29,7 @@ namespace CVC4 {
 /**
  * Three-valued, immutable SMT result, with optional explanation.
  */
-class Result {
+class CVC4_PUBLIC Result {
 public:
   enum SAT {
     UNSAT = 0,
index 244b8a5dd1a44fc070f2feea00f7020090faabf6..54e56da9608849bee8b5d913ba2b902879a96c99 100644 (file)
@@ -13,6 +13,8 @@
  ** A mechanism for getting a compile-time unique ID.
  **/
 
+#include "cvc4_private.h"
+
 #ifndef __CVC4__UNIQUE_ID_H
 #define __CVC4__UNIQUE_ID_H
 
index 5290381c3379139234321687ef44930db100efc9..f3f23a4005b72adf56919adf18f24e00e279d00e 100644 (file)
@@ -38,8 +38,8 @@ AM_CPPFLAGS = \
 AM_CXXFLAGS = $(TEST_CXXFLAGS)
 AM_LDFLAGS = $(TEST_LDFLAGS)
 
-AM_CXXFLAGS_WHITE = -fno-access-control
-AM_CXXFLAGS_BLACK =
+AM_CXXFLAGS_WHITE = -fno-access-control -D__BUILDING_CVC4LIB_UNIT_TEST -D__BUILDING_CVC4PARSERLIB_UNIT_TEST
+AM_CXXFLAGS_BLACK = -D__BUILDING_CVC4LIB_UNIT_TEST -D__BUILDING_CVC4PARSERLIB_UNIT_TEST
 AM_CXXFLAGS_PUBLIC =
 AM_LDFLAGS_WHITE = \
        @abs_top_builddir@/src/parser/libcvc4parser_noinst.la \
index 4084c91fc61f8672b6acc8e878fc3d6aab686319..64ad2d7f71a24629a9e41a97d67829d07c3f4aa6 100644 (file)
@@ -57,6 +57,38 @@ public:
 //    d_context->pop();
   }
 
+  // test at different sizes.  this triggers grow() behavior differently.
+  // grow() is completely broken in revision 256; fix forthcoming by Tim
+  void testCDList10() { listTest(10); }
+  void testCDList15() { listTest(15); }
+  void testCDList20() { listTest(20); }
+  void testCDList35() { listTest(35); }
+  void testCDList50() { listTest(50); }
+  void testCDList99() { listTest(99); }
+
+  void listTest(int N) {
+    CDList<int> list(d_context);
+
+    TS_ASSERT(list.empty());
+    for(int i = 0; i < N; ++i) {
+      TS_ASSERT(list.size() == i);
+      list.push_back(i);
+      TS_ASSERT(!list.empty());
+      TS_ASSERT(list.back() == i);
+      int i2 = 0;
+      for(CDList<int>::const_iterator j = list.begin();
+          j != list.end();
+          ++j) {
+        TS_ASSERT(*j == i2++);
+      }
+    }
+    TS_ASSERT(list.size() == N);
+
+    for(int i = 0; i < N; ++i) {
+      TS_ASSERT(list[i] == i);
+    }
+  }
+
   void tearDown() {
     delete d_context;
   }