diff --git a/src/ast/sls/bv_sls_eval.cpp b/src/ast/sls/bv_sls_eval.cpp index 4c5ed57fc5b..ceea3e7ba2c 100644 --- a/src/ast/sls/bv_sls_eval.cpp +++ b/src/ast/sls/bv_sls_eval.cpp @@ -39,7 +39,8 @@ namespace bv { if (bv.is_bv(e)) { auto& v = wval0(e); for (unsigned i = 0; i < v.bw; ++i) - v.set_bit(i, eval(e, i)); + v.set(m_tmp, i, eval(e, i)); + v.set(m_tmp); } else if (m.is_bool(e)) m_eval.setx(e->get_id(), eval(e, 0), false); diff --git a/src/ast/sls/sls_valuation.h b/src/ast/sls/sls_valuation.h index d67c0d6d2a5..3a14074e77e 100644 --- a/src/ast/sls/sls_valuation.h +++ b/src/ast/sls/sls_valuation.h @@ -41,7 +41,7 @@ namespace bv { digit_t bits(unsigned i) const { return m_bits[i]; } svector const& bits() const { return m_bits; } - void set_bit(unsigned i, bool v) { set(m_bits, i, v); } + bool get_bit(unsigned i) const { return get(m_bits, i); } void set_value(svector& bits, rational const& r); @@ -228,6 +228,9 @@ namespace bv { return out; } + // TODO move: + void set_bit(unsigned i, bool v) { set(m_bits, i, v); } + private: static digit_t get_pos_mask(unsigned bit_idx) { return (digit_t)1 << (digit_t)(bit_idx % (8 * sizeof(digit_t))); @@ -246,6 +249,7 @@ namespace bv { public: sls_pre_valuation(unsigned bw):sls_valuation(bw) {} svector& bits() { return m_bits; } + }; inline std::ostream& operator<<(std::ostream& out, sls_valuation const& v) { return v.display(out); }