about summary refs log tree commit diff homepage
path: root/lib/SMT/SMTParser.cpp
diff options
context:
space:
mode:
authorCristian Cadar <cristic@cs.stanford.edu>2009-07-10 22:10:54 +0000
committerCristian Cadar <cristic@cs.stanford.edu>2009-07-10 22:10:54 +0000
commit6c7d0d1db055bfca93b962de1cd2eaa5f1d3c8dd (patch)
treeaa73c2bf3ca3bffdd7ff2a3e681b919de7e9b246 /lib/SMT/SMTParser.cpp
parent3951254da613913829b2419b05cb7c3758570e98 (diff)
downloadklee-6c7d0d1db055bfca93b962de1cd2eaa5f1d3c8dd.tar.gz
Added support for not, zero_extend, and sign_extend to the SMTLIB parser.
Added support for n-ary and, or and xor.



git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@75299 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/SMT/SMTParser.cpp')
-rw-r--r--lib/SMT/SMTParser.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/SMT/SMTParser.cpp b/lib/SMT/SMTParser.cpp
index 619d7ff6..d3a8c9ea 100644
--- a/lib/SMT/SMTParser.cpp
+++ b/lib/SMT/SMTParser.cpp
@@ -77,6 +77,43 @@ int SMTParser::StringToInt(const std::string& s) {
 }
 
 
+ExprHandle SMTParser::CreateAnd(std::vector<ExprHandle> kids) {
+  unsigned n_kids = kids.size();
+  assert(n_kids);
+  if (n_kids == 1)
+    return kids[0];
+
+  ExprHandle r = AndExpr::create(kids[n_kids-2], kids[n_kids-1]);
+  for (int i=n_kids-3; i>=0; i--)
+    r = AndExpr::create(kids[i], r);
+  return r;
+}
+
+ExprHandle SMTParser::CreateOr(std::vector<ExprHandle> kids) {
+  unsigned n_kids = kids.size();
+  assert(n_kids);
+  if (n_kids == 1)
+    return kids[0];
+
+  ExprHandle r = OrExpr::create(kids[n_kids-2], kids[n_kids-1]);
+  for (int i=n_kids-3; i>=0; i--)
+    r = OrExpr::create(kids[i], r);
+  return r;
+}
+
+ExprHandle SMTParser::CreateXor(std::vector<ExprHandle> kids) {
+  unsigned n_kids = kids.size();
+  assert(n_kids);
+  if (n_kids == 1)
+    return kids[0];
+
+  ExprHandle r = XorExpr::create(kids[n_kids-2], kids[n_kids-1]);
+  for (int i=n_kids-3; i>=0; i--)
+    r = XorExpr::create(kids[i], r);
+  return r;
+}
+
+
 void SMTParser::DeclareExpr(std::string name, Expr::Width w) {
   // for now, only allow variables which are multiples of 8
   if (w % 8 != 0) {