diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2020-07-21 11:15:39 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-21 11:15:39 -0500 |
commit | d557a478c4643fc0bfd8c578db59803224c85b43 (patch) | |
tree | 9e7cef12364813c561a6928756233225a4c373c9 /src/theory/evaluator.cpp | |
parent | 45a546f63d40d8ef0e0fac53854930836da2c0ea (diff) |
Support uninterpreted constants in the evaluator (#4777)
Diffstat (limited to 'src/theory/evaluator.cpp')
-rw-r--r-- | src/theory/evaluator.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/theory/evaluator.cpp b/src/theory/evaluator.cpp index 7a4940328..a7228658d 100644 --- a/src/theory/evaluator.cpp +++ b/src/theory/evaluator.cpp @@ -43,6 +43,10 @@ EvalResult::EvalResult(const EvalResult& other) new (&d_str) String; d_str = other.d_str; break; + case UCONST: + new (&d_uc) + UninterpretedConstant(other.d_uc.getType(), other.d_uc.getIndex()); + break; case INVALID: break; } } @@ -67,6 +71,10 @@ EvalResult& EvalResult::operator=(const EvalResult& other) new (&d_str) String; d_str = other.d_str; break; + case UCONST: + new (&d_uc) + UninterpretedConstant(other.d_uc.getType(), other.d_uc.getIndex()); + break; case INVALID: break; } } @@ -91,9 +99,13 @@ EvalResult::~EvalResult() { d_str.~String(); break; - - default: break; } + case UCONST: + { + d_uc.~UninterpretedConstant(); + break; + } + default: break; } } @@ -106,6 +118,7 @@ Node EvalResult::toNode() const case EvalResult::BITVECTOR: return nm->mkConst(d_bv); case EvalResult::RATIONAL: return nm->mkConst(d_rat); case EvalResult::STRING: return nm->mkConst(d_str); + case EvalResult::UCONST: return nm->mkConst(d_uc); default: { Trace("evaluator") << "Missing conversion from " << d_tag << " to node" @@ -389,7 +402,13 @@ EvalResult Evaluator::evalInternal( results[currNode] = EvalResult(r); break; } - + case kind::UNINTERPRETED_CONSTANT: + { + const UninterpretedConstant& uc = + currNodeVal.getConst<UninterpretedConstant>(); + results[currNode] = EvalResult(uc); + break; + } case kind::PLUS: { Rational res = results[currNode[0]].d_rat; @@ -824,6 +843,11 @@ EvalResult Evaluator::evalInternal( results[currNode] = EvalResult(lhs.d_str == rhs.d_str); break; } + case EvalResult::UCONST: + { + results[currNode] = EvalResult(lhs.d_uc == rhs.d_uc); + break; + } default: { |