mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
remove symbol -> zstring -> symbol round-trips
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
5cb0bac41d
commit
20a67e47ca
13 changed files with 68 additions and 62 deletions
|
@ -190,8 +190,7 @@ namespace smt {
|
|||
}
|
||||
|
||||
expr * theory_str::mk_string(const char * str) {
|
||||
symbol sym(str);
|
||||
return u.str.mk_string(sym);
|
||||
return u.str.mk_string(str);
|
||||
}
|
||||
|
||||
void theory_str::collect_statistics(::statistics & st) const {
|
||||
|
|
|
@ -53,11 +53,11 @@ public:
|
|||
u(m), delim("!"), m_next(0) {}
|
||||
~str_value_factory() override {}
|
||||
expr * get_some_value(sort * s) override {
|
||||
return u.str.mk_string(symbol("some value"));
|
||||
return u.str.mk_string("some value");
|
||||
}
|
||||
bool get_some_values(sort * s, expr_ref & v1, expr_ref & v2) override {
|
||||
v1 = u.str.mk_string(symbol("value 1"));
|
||||
v2 = u.str.mk_string(symbol("value 2"));
|
||||
v1 = u.str.mk_string("value 1");
|
||||
v2 = u.str.mk_string("value 2");
|
||||
return true;
|
||||
}
|
||||
expr * get_fresh_value(sort * s) override {
|
||||
|
@ -65,10 +65,11 @@ public:
|
|||
while (true) {
|
||||
std::ostringstream strm;
|
||||
strm << delim << std::hex << (m_next++) << std::dec << delim;
|
||||
symbol sym(strm.str());
|
||||
std::string s(strm.str());
|
||||
symbol sym(s);
|
||||
if (m_strings.contains(sym)) continue;
|
||||
m_strings.insert(sym);
|
||||
return u.str.mk_string(sym);
|
||||
return u.str.mk_string(s);
|
||||
}
|
||||
}
|
||||
sort* seq = nullptr;
|
||||
|
|
|
@ -1337,9 +1337,8 @@ namespace smt {
|
|||
rw(arg_subst);
|
||||
TRACE("str_fl", tout << "ival = " << ival << ", string arg evaluates to " << mk_pp(arg_subst, m) << std::endl;);
|
||||
|
||||
symbol arg_str;
|
||||
if (u.str.is_string(arg_subst, arg_str)) {
|
||||
zstring arg_zstr(arg_str.bare_str());
|
||||
zstring arg_zstr;
|
||||
if (u.str.is_string(arg_subst, arg_zstr)) {
|
||||
rational arg_value;
|
||||
if (string_integer_conversion_valid(arg_zstr, arg_value)) {
|
||||
if (ival != arg_value) {
|
||||
|
@ -1365,9 +1364,8 @@ namespace smt {
|
|||
(*replacer)(arg, arg_subst);
|
||||
rw(arg_subst);
|
||||
TRACE("str_fl", tout << "ival = " << ival << ", string arg evaluates to " << mk_pp(arg_subst, m) << std::endl;);
|
||||
symbol arg_str;
|
||||
if (u.str.is_string(arg_subst, arg_str)) {
|
||||
zstring arg_zstr(arg_str.bare_str());
|
||||
zstring arg_zstr;
|
||||
if (u.str.is_string(arg_subst, arg_zstr)) {
|
||||
if (ival >= rational::zero() && ival <= rational(u.max_char())) {
|
||||
// check that arg_subst has length 1 and that the codepoints are the same
|
||||
if (arg_zstr.length() != 1 || rational(arg_zstr[0]) != ival) {
|
||||
|
@ -1396,9 +1394,8 @@ namespace smt {
|
|||
rw(e_subst);
|
||||
TRACE("str_fl", tout << "ival = " << ival << ", string arg evaluates to " << mk_pp(e_subst, m) << std::endl;);
|
||||
|
||||
symbol e_str;
|
||||
if (u.str.is_string(e_subst, e_str)) {
|
||||
zstring e_zstr(e_str.bare_str());
|
||||
zstring e_zstr;
|
||||
if (u.str.is_string(e_subst, e_zstr)) {
|
||||
// if arg is negative, e must be empty
|
||||
// if arg is non-negative, e must be valid AND cannot contain leading zeroes
|
||||
|
||||
|
@ -1436,9 +1433,8 @@ namespace smt {
|
|||
(*replacer)(e, e_subst);
|
||||
rw(e_subst);
|
||||
TRACE("str_fl", tout << "ival = " << ival << ", string arg evaluates to " << mk_pp(e_subst, m) << std::endl;);
|
||||
symbol e_str;
|
||||
if (u.str.is_string(e_subst, e_str)) {
|
||||
zstring e_zstr(e_str.bare_str());
|
||||
zstring e_zstr;
|
||||
if (u.str.is_string(e_subst, e_zstr)) {
|
||||
// if arg is out of range, e must be empty
|
||||
// if arg is in range, e must be valid
|
||||
if (ival <= rational::zero() || ival >= rational(u.max_char())) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue