Minor fixes to various parts of CVC4, including the removal of the uintptr_t construc...
authorMorgan Deters <mdeters@gmail.com>
Mon, 2 May 2011 05:04:36 +0000 (05:04 +0000)
committerMorgan Deters <mdeters@gmail.com>
Mon, 2 May 2011 05:04:36 +0000 (05:04 +0000)
src/expr/expr_template.cpp
src/expr/expr_template.h
src/expr/type.cpp
src/expr/type.h
src/main/interactive_shell.cpp
src/parser/cvc/Cvc.g
src/parser/smt/Smt.g
src/parser/smt2/Smt2.g
src/smt/smt_engine.cpp
src/smt/smt_engine.h
src/util/dynamic_array.h

index b7000fea629b4e0f683677ac740d01003e147307..286ddf611dc8d3e6261cc1df5442c287d8242a3b 100644 (file)
@@ -95,13 +95,6 @@ Expr::Expr(const Expr& e) :
   d_exprManager(e.d_exprManager) {
 }
 
-Expr::Expr(uintptr_t n) :
-  d_node(new Node),
-  d_exprManager(NULL) {
-
-  AlwaysAssert(n == 0);
-}
-
 Expr::~Expr() {
   ExprManagerScope ems(*this);
   delete d_node;
index 43d40105e33a4289d985950fece994da9a1966f1..b0157adbf2bc7f4b49e706817677f913331a53af 100644 (file)
@@ -153,14 +153,6 @@ public:
    */
   Expr(const Expr& e);
 
-  /**
-   * Initialize from an integer. Fails if the integer is not 0.
-   * NOTE: This is here purely to support the auto-initialization
-   * behavior of the ANTLR3 C backend. Should be removed if future
-   * versions of ANTLR fix the problem.
-   */
-  Expr(uintptr_t n);
-
   /** Destructor */
   ~Expr();
 
@@ -758,7 +750,7 @@ public:
 
 ${getConst_instantiations}
 
-#line 762 "${template}"
+#line 754 "${template}"
 
 namespace expr {
 
index 0df385a294cc63c9c4046c57b0de3552212c532c..567bb2d40af7d2a3a5c54947206469ba3a7de129 100644 (file)
@@ -53,12 +53,6 @@ Type::Type() :
   d_nodeManager(NULL) {
 }
 
-Type::Type(uintptr_t n) :
-  d_typeNode(new TypeNode),
-  d_nodeManager(NULL) {
-  AlwaysAssert(n == 0);
-}
-
 Type::Type(const Type& t) :
   d_typeNode(new TypeNode(*t.d_typeNode)),
   d_nodeManager(t.d_nodeManager) {
index 682e5fbcdcef406a5b733b748f922f0c85941317..980a750d5c8e11f56ce0fe906f9f46e09e25c425 100644 (file)
@@ -112,14 +112,6 @@ protected:
 
 public:
 
-  /**
-   * Initialize from an integer. Fails if the integer is not 0.
-   * NOTE: This is here purely to support the auto-initialization
-   * behavior of the ANTLR3 C backend. Should be removed if future
-   * versions of ANTLR fix the problem.
-   */
-  Type(uintptr_t n);
-
   /** Force a virtual destructor for safety. */
   virtual ~Type();
 
index cf04dacdf4c304a42bfc72b83b53c066c725eb88..707fc0ef3a6e0c2e101e241ea2eb8edec329d7bc 100644 (file)
@@ -130,7 +130,7 @@ Command* InteractiveShell::readCommand() {
     throw ParserException("Interactive input broken.");
   }
 
-  char* lineBuf;
+  char* lineBuf = NULL;
   string input;
   stringbuf sb;
   string line;
@@ -138,12 +138,12 @@ Command* InteractiveShell::readCommand() {
   /* Prompt the user for input. */
   if(d_usingReadline) {
 #if HAVE_LIBREADLINE
-  lineBuf = ::readline("CVC4> ");
-  if(lineBuf != NULL && lineBuf[0] != '\0') {
-    ::add_history(lineBuf);
-  }
-  line = lineBuf == NULL ? "" : lineBuf;
-  free(lineBuf);
+    lineBuf = ::readline("CVC4> ");
+    if(lineBuf != NULL && lineBuf[0] != '\0') {
+      ::add_history(lineBuf);
+    }
+    line = lineBuf == NULL ? "" : lineBuf;
+    free(lineBuf);
 #endif /* HAVE_LIBREADLINE */
   } else {
     d_out << "CVC4> " << flush;
index 8df9ea6a0a1c9ec5fef0e76f1052a605959674e7..af00241568c66f395dd9e704a5dc72ee35a2d834 100644 (file)
@@ -433,6 +433,7 @@ Expr addNots(ExprManager* em, size_t n, Expr e) {
 
 @parser::includes {
 
+#include <stdint.h>
 #include "expr/command.h"
 #include "parser/parser.h"
 #include "util/subrange_bound.h"
@@ -440,9 +441,7 @@ Expr addNots(ExprManager* em, size_t n, Expr e) {
 
 namespace CVC4 {
   class Expr;
-}/* CVC4 namespace */
 
-namespace CVC4 {
   namespace parser {
     namespace cvc {
       /**
@@ -469,6 +468,17 @@ namespace CVC4 {
         mySubrangeBound(const Integer& i) : CVC4::SubrangeBound(i) {}
         mySubrangeBound(const SubrangeBound& b) : CVC4::SubrangeBound(b) {}
       };/* class mySubrangeBound */
+
+      /**
+       * Just exists to give us the uintptr_t construction that
+       * ANTLR requires.
+       */
+      struct myExpr : public CVC4::Expr {
+        myExpr() : CVC4::Expr() {}
+        myExpr(uintptr_t) : CVC4::Expr() {}
+        myExpr(const Expr& e) : CVC4::Expr(e) {}
+        myExpr(const myExpr& e) : CVC4::Expr(e) {}
+      };/* struct myExpr */
     }/* CVC4::parser::cvc namespace */
   }/* CVC4::parser namespace */
 }/* CVC4 namespace */
@@ -521,7 +531,7 @@ using namespace CVC4::parser;
  * Parses an expression.
  * @return the parsed expression
  */
-parseExpr returns [CVC4::Expr expr]
+parseExpr returns [CVC4::parser::cvc::myExpr expr]
   : formula[expr]
   | EOF
   ;
index e964c020aa22003ad9d98f20f69b3f6284e3dccd..0cceb53e4245f7473ac6f3efad00578b9203b639 100644 (file)
@@ -29,7 +29,7 @@ options {
   // Note that CVC4's BoundedTokenBuffer requires a fixed k !
   // If you change this k, change it also in smt_input.cpp !
   k = 2;
-}
+}/* options */
 
 @header {
 /**
@@ -40,7 +40,7 @@ options {
  ** See the file COPYING in the top-level source directory for licensing
  ** information.
  **/
-}
+}/* @header */
 
 @lexer::includes {
 /** This suppresses warnings about the redefinition of token symbols between
@@ -58,19 +58,50 @@ options {
 #define ANTLR3_INLINE_INPUT_ASCII
 
 #include "parser/antlr_tracing.h"
-}
+}/* @lexer::includes */
 
 @parser::includes {
+
+#include <stdint.h>
+
 #include "expr/command.h"
 #include "parser/parser.h"
 #include "parser/antlr_tracing.h"
 
 namespace CVC4 {
   class Expr;
+
+  namespace parser {
+    namespace smt {
+      /**
+       * Just exists to provide the uintptr_t constructor that ANTLR
+       * requires.
+       */
+      struct myExpr : public CVC4::Expr {
+        myExpr() : CVC4::Expr() {}
+        myExpr(void*) : CVC4::Expr() {}
+        myExpr(const Expr& e) : CVC4::Expr(e) {}
+        myExpr(const myExpr& e) : CVC4::Expr(e) {}
+      };/* struct myExpr */
+
+      /**
+       * Just exists to provide the uintptr_t constructor that ANTLR
+       * requires.
+       */
+      struct myType : public CVC4::Type {
+        myType() : CVC4::Type() {}
+        myType(void*) : CVC4::Type() {}
+        myType(const Type& t) : CVC4::Type(t) {}
+        myType(const myType& t) : CVC4::Type(t) {}
+      };/* struct myType */
+    }/* CVC4::parser::smt namespace */
+  }/* CVC4::parser namespace */
 }/* CVC4 namespace */
-}
+
+}/* @parser::includes */
 
 @parser::postinclude {
+
 #include "expr/expr.h"
 #include "expr/kind.h"
 #include "expr/type.h"
@@ -96,14 +127,14 @@ using namespace CVC4::parser;
 #undef MK_CONST
 #define MK_CONST EXPR_MANAGER->mkConst
 
-}
+}/* @parser::postinclude */
 
 
 /**
  * Parses an expression.
  * @return the parsed expression
  */
-parseExpr returns [CVC4::Expr expr]
+parseExpr returns [CVC4::parser::smt::myExpr expr]
   : annotatedFormula[expr]
   | EOF
   ;
@@ -445,7 +476,7 @@ sortName[std::string& name, CVC4::parser::DeclarationCheck check]
   : identifier[name,check,SYM_SORT]
   ;
 
-sortSymbol returns [CVC4::Type t]
+sortSymbol returns [CVC4::parser::smt::myType t]
 @declarations {
   std::string name;
 }
index 17ea1611d073a8a1ccd63532750bd8870b37904c..a8dfbfeab7abebf2533355b4d0940a748804ca3f 100644 (file)
@@ -29,7 +29,7 @@ options {
   // Note that CVC4's BoundedTokenBuffer requires a fixed k !
   // If you change this k, change it also in smt2_input.cpp !
   k = 2;
-}
+}/* options */
 
 @header {
 /**
@@ -40,7 +40,7 @@ options {
  ** See the file COPYING in the top-level source directory for licensing
  ** information.
  **/
-}
+}/* @header */
 
 @lexer::includes {
 
@@ -59,7 +59,8 @@ options {
 #define ANTLR3_INLINE_INPUT_ASCII
 
 #include "parser/antlr_tracing.h"
-}
+
+}/* @lexer::includes */
 
 @lexer::postinclude {
 #include <stdint.h>
@@ -73,7 +74,7 @@ using namespace CVC4::parser;
 
 #undef PARSER_STATE
 #define PARSER_STATE ((Smt2*)LEXER->super)
-}
+}/* @lexer::postinclude */
 
 @parser::includes {
 #include "expr/command.h"
@@ -81,10 +82,27 @@ using namespace CVC4::parser;
 
 namespace CVC4 {
   class Expr;
+
+  namespace parser {
+    namespace smt2 {
+      /**
+       * Just exists to provide the uintptr_t constructor that ANTLR
+       * requires.
+       */
+      struct myExpr : public CVC4::Expr {
+        myExpr() : CVC4::Expr() {}
+        myExpr(void*) : CVC4::Expr() {}
+        myExpr(const Expr& e) : CVC4::Expr(e) {}
+        myExpr(const myExpr& e) : CVC4::Expr(e) {}
+      };/* struct myExpr */
+    }/* CVC4::parser::smt2 namespace */
+  }/* CVC4::parser namespace */
 }/* CVC4 namespace */
-}
+
+}/* @parser::includes */
 
 @parser::postinclude {
+
 #include "expr/expr.h"
 #include "expr/kind.h"
 #include "expr/type.h"
@@ -110,13 +128,13 @@ using namespace CVC4::parser;
 #undef MK_CONST
 #define MK_CONST EXPR_MANAGER->mkConst
 
-}
+}/* parser::postinclude */
 
 /**
  * Parses an expression.
  * @return the parsed expression, or the Null Expr if we've reached the end of the input
  */
-parseExpr returns [CVC4::Expr expr]
+parseExpr returns [CVC4::parser::smt2::myExpr expr]
   : term[expr]
   | EOF
   ;
index 45c697d0bf8c0ce581e8e869aa3d2110d800f3bd..60346ab2e99cacb37675c50858c9c334195dbea7 100644 (file)
@@ -128,7 +128,10 @@ SmtEngine::SmtEngine(ExprManager* em) throw(AssertionException) :
   d_context(em->getContext()),
   d_userContext(new Context()),
   d_exprManager(em),
-  d_nodeManager(d_exprManager->getNodeManager()) {
+  d_nodeManager(d_exprManager->getNodeManager()),
+  d_definitionExpansionTime("smt::SmtEngine::definitionExpansionTime"),
+  d_nonclausalSimplificationTime("smt::SmtEngine::nonclausalSimplificationTime"),
+  d_staticLearningTime("smt::SmtEngine::staticLearningTime") {
 
   NodeManagerScope nms(d_nodeManager);
 
@@ -448,6 +451,8 @@ Node SmtEnginePrivate::preprocess(SmtEngine& smt, TNode in)
   try {
     Node n;
     if(!Options::current()->lazyDefinitionExpansion) {
+      TimerStat::CodeTimer codeTimer(smt.d_definitionExpansionTime);
+      Chat() << "Expanding definitions: " << in << endl;
       Debug("expand") << "have: " << n << endl;
       hash_map<TNode, Node, TNodeHashFunction> cache;
       n = expandDefinitions(smt, in, cache);
@@ -459,6 +464,8 @@ Node SmtEnginePrivate::preprocess(SmtEngine& smt, TNode in)
     // For now, don't re-statically-learn from learned facts; this could
     // be useful though (e.g., theory T1 could learn something further
     // from something learned previously by T2).
+    Chat() << "Performing static learning: " << n << endl;
+    TimerStat::CodeTimer codeTimer(smt.d_staticLearningTime);
     NodeBuilder<> learned(kind::AND);
     learned << n;
     smt.d_theoryEngine->staticLearning(n, learned);
index b872985fb635f41f9064d152370944d59057fe2e..408db1a2f404c983dadd37f8cf5d807eb8a81c2e 100644 (file)
@@ -35,6 +35,7 @@
 #include "util/options.h"
 #include "util/result.h"
 #include "util/sexpr.h"
+#include "util/stats.h"
 
 // In terms of abstraction, this is below (and provides services to)
 // ValidityChecker and above (and requires the services of)
@@ -179,6 +180,14 @@ class CVC4_PUBLIC SmtEngine {
 
   friend class ::CVC4::smt::SmtEnginePrivate;
 
+  // === STATISTICS ===
+  /** time spent in definition-expansion */
+  TimerStat d_definitionExpansionTime;
+  /** time spent in non-clausal simplification */
+  TimerStat d_nonclausalSimplificationTime;
+  /** time spent in static learning */
+  TimerStat d_staticLearningTime;
+
 public:
 
   /**
index c1298500ecf70818dc988c9afffdfea0da542a0f..c0a8cf2604ae2fe7d8c62fc739cd85851f5540c5 100644 (file)
@@ -38,7 +38,7 @@ private:
 
   void grow(){
     bool empty = (d_arr == NULL);
-    d_allocated = empty ? d_allocated = 15 : d_allocated * 2 + 1;
+    d_allocated = empty ? 15 : d_allocated * 2 + 1;
     unsigned allocSize = sizeof(T) * d_allocated;
     T* tmpList = (T*) (empty ? malloc(allocSize) :realloc(d_arr, allocSize));
     if(tmpList == NULL) {