From 8391eb863cc6fa8e4b620fdd0ba5e482d22e75ea Mon Sep 17 00:00:00 2001
From: Hamed Gorjiara <hgorjiar@uci.edu>
Date: Thu, 4 Oct 2018 15:01:25 -0700
Subject: [PATCH] Bug fix for serializing Boolean Const ...

---
 src/AST/boolean.cc            | 10 ++++++++++
 src/AST/boolean.h             |  2 +-
 src/Serialize/deserializer.cc | 12 ++++++++++++
 src/Serialize/deserializer.h  |  1 +
 4 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/AST/boolean.cc b/src/AST/boolean.cc
index 647f548..e63549e 100644
--- a/src/AST/boolean.cc
+++ b/src/AST/boolean.cc
@@ -116,6 +116,16 @@ void BooleanVar::serialize(Serializer *serializer) {
 	serializer->mywrite(&vtype, sizeof(VarType));
 }
 
+void BooleanConst::serialize(Serializer *serializer) {
+	if (serializer->isSerialized(this))
+		return;
+	serializer->addObject(this);
+	serializer->mywrite(&type, sizeof(ASTNodeType));
+	BooleanConst *This = this;
+	serializer->mywrite(&This, sizeof(BooleanConst *));
+	serializer->mywrite(&istrue, sizeof(bool));
+}
+
 void BooleanVar::print() {
 	model_print("BooleanVar<%p>\n", this);
 }
diff --git a/src/AST/boolean.h b/src/AST/boolean.h
index 77dc244..dd1b580 100644
--- a/src/AST/boolean.h
+++ b/src/AST/boolean.h
@@ -35,7 +35,7 @@ public:
 	Boolean *clone(CSolver *solver, CloneMap *map);
 	bool isTrue() {return istrue;}
 	bool isFalse() {return !istrue;}
-	void serialize(Serializer *serializer ) {};
+	void serialize(Serializer *serializer );
 	virtual void print();
 	bool istrue;
 	CMEMALLOC;
diff --git a/src/Serialize/deserializer.cc b/src/Serialize/deserializer.cc
index 2c4d7bb..548619f 100644
--- a/src/Serialize/deserializer.cc
+++ b/src/Serialize/deserializer.cc
@@ -76,6 +76,9 @@ CSolver *Deserializer::deserialize() {
 		case BOOLEANVAR:
 			deserializeBooleanVar();
 			break;
+		case BOOLCONST:
+			deserializeBooleanConst();
+			break;
 		case ORDERCONST:
 			deserializeBooleanOrder();
 			break;
@@ -145,6 +148,15 @@ void Deserializer::deserializeBooleanVar() {
 	map.put(b, solver->getBooleanVar(vtype).getBoolean());
 }
 
+void Deserializer::deserializeBooleanConst() {
+	BooleanVar *b;
+	myread(&b, sizeof(BooleanVar *));
+	bool istrue;
+	myread(&istrue, sizeof(bool));
+	map.put(b, istrue?solver->getBooleanTrue().getBoolean():
+			solver->getBooleanFalse().getBoolean());
+}
+
 void Deserializer::deserializeBooleanOrder() {
 	BooleanOrder *bo_ptr;
 	myread(&bo_ptr, sizeof(BooleanOrder *));
diff --git a/src/Serialize/deserializer.h b/src/Serialize/deserializer.h
index c56911d..81baeef 100644
--- a/src/Serialize/deserializer.h
+++ b/src/Serialize/deserializer.h
@@ -26,6 +26,7 @@ private:
 	ssize_t myread (void *__buf, size_t __nbytes);
 	void deserializeBooleanEdge();
 	void deserializeBooleanVar();
+	void deserializeBooleanConst();
 	void deserializeBooleanOrder();
 	void deserializeOrder();
 	void deserializeSet();
-- 
2.34.1