summaryrefslogtreecommitdiff
path: root/src/util/node_visitor.h
diff options
context:
space:
mode:
authorLiana Hadarean <lianahady@gmail.com>2012-05-08 21:54:55 +0000
committerLiana Hadarean <lianahady@gmail.com>2012-05-08 21:54:55 +0000
commit8a0c0562cb8d0e26ea019ff782b25c1997a49a0b (patch)
tree28239db9bcb26b03d893ad61dd1a7ea099391fbe /src/util/node_visitor.h
parent5082cb8349efbb287084293cd4bc6c3fa5a34f26 (diff)
Merging in bvprop branch, with proper bit-vector propagation.
This should also fix bug 325.
Diffstat (limited to 'src/util/node_visitor.h')
-rw-r--r--src/util/node_visitor.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/util/node_visitor.h b/src/util/node_visitor.h
index 0dec26717..687272b56 100644
--- a/src/util/node_visitor.h
+++ b/src/util/node_visitor.h
@@ -31,6 +31,23 @@ namespace CVC4 {
template<typename Visitor>
class NodeVisitor {
+ /** For re-entry checking */
+ static bool d_inRun;
+
+ class GuardReentry {
+ bool& d_guard;
+ public:
+ GuardReentry(bool& guard)
+ : d_guard(guard) {
+ Assert(!d_guard);
+ d_guard = true;
+ }
+ ~GuardReentry() {
+ Assert(d_guard);
+ d_guard = false;
+ }
+ };
+
public:
/**
@@ -52,6 +69,8 @@ public:
*/
static typename Visitor::return_type run(Visitor& visitor, TNode node) {
+ GuardReentry guard(d_inRun);
+
// Notify of a start
visitor.start(node);
@@ -91,5 +110,8 @@ public:
};
+template <typename Visitor>
+bool NodeVisitor<Visitor>::d_inRun = false;
+
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback