mirror of
https://github.com/Z3Prover/z3
synced 2025-07-23 04:38:53 +00:00
fix string rewriting according to definition. Relates to examples in #1202
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
ead704f52f
commit
fb17362dff
1 changed files with 12 additions and 11 deletions
|
@ -1072,26 +1072,27 @@ br_status seq_rewriter::mk_seq_suffix(expr* a, expr* b, expr_ref& result) {
|
||||||
br_status seq_rewriter::mk_str_itos(expr* a, expr_ref& result) {
|
br_status seq_rewriter::mk_str_itos(expr* a, expr_ref& result) {
|
||||||
rational r;
|
rational r;
|
||||||
if (m_autil.is_numeral(a, r)) {
|
if (m_autil.is_numeral(a, r)) {
|
||||||
result = m_util.str.mk_string(symbol(r.to_string().c_str()));
|
if (r.is_int() && !r.is_neg()) {
|
||||||
|
result = m_util.str.mk_string(symbol(r.to_string().c_str()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = m_util.str.mk_string(symbol(""));
|
||||||
|
}
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
return BR_FAILED;
|
return BR_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
br_status seq_rewriter::mk_str_stoi(expr* a, expr_ref& result) {
|
br_status seq_rewriter::mk_str_stoi(expr* a, expr_ref& result) {
|
||||||
zstring str;
|
zstring str;
|
||||||
if (m_util.str.is_string(a, str)) {
|
if (m_util.str.is_string(a, str)) {
|
||||||
std::string s = str.encode();
|
std::string s = str.encode();
|
||||||
|
if (s.length() == 0) {
|
||||||
|
result = m_autil.mk_int(-1);
|
||||||
|
return BR_DONE;
|
||||||
|
}
|
||||||
for (unsigned i = 0; i < s.length(); ++i) {
|
for (unsigned i = 0; i < s.length(); ++i) {
|
||||||
if (s[i] == '-') {
|
if (!('0' <= s[i] && s[i] <= '9')) {
|
||||||
if (i != 0) {
|
|
||||||
result = m_autil.mk_int(-1);
|
|
||||||
return BR_DONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ('0' <= s[i] && s[i] <= '9') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result = m_autil.mk_int(-1);
|
result = m_autil.mk_int(-1);
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue