Deleting the remaining commands in the Parser's queue within ~Parser().
authorTim King <taking@google.com>
Sat, 12 Nov 2016 00:04:51 +0000 (16:04 -0800)
committerTim King <taking@google.com>
Sat, 12 Nov 2016 00:04:51 +0000 (16:04 -0800)
src/parser/parser.cpp
src/parser/parser.h

index ac93c93d20c3e13d1923e8ac5dde24a18b02f8c5..2377b8a4418e9e5a85f0da3e01d0ad74943ce95d 100644 (file)
@@ -61,6 +61,16 @@ Parser::Parser(ExprManager* exprManager, Input* input, bool strictMode,
   d_input->setParser(*this);
 }
 
+Parser::~Parser() {
+  for (std::list<Command*>::iterator iter = d_commandQueue.begin();
+       iter != d_commandQueue.end(); ++iter) {
+    Command* command = *iter;
+    delete command;
+  }
+  d_commandQueue.clear();
+  delete d_input;
+}
+
 Expr Parser::getSymbol(const std::string& name, SymbolType type) {
   checkDeclaration(name, CHECK_DECLARED, type);
   assert(isDeclared(name, type));
index 351aa858abb4b0081d15c5a7a3caa78a3cf9cf66..b310456bdec817825e792ebf9d202423327da08c 100644 (file)
@@ -230,6 +230,8 @@ class CVC4_PUBLIC Parser {
    * "Preemption commands": extra commands implied by subterms that
    * should be issued before the currently-being-parsed command is
    * issued.  Used to support SMT-LIBv2 ":named" attribute on terms.
+   *
+   * Owns the memory of the Commands in the queue.
    */
   std::list<Command*> d_commandQueue;
 
@@ -254,9 +256,7 @@ protected:
 
 public:
 
-  virtual ~Parser() {
-    delete d_input;
-  }
+  virtual ~Parser();
 
   /** Get the associated <code>ExprManager</code>. */
   inline ExprManager* getExprManager() const {