3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-05-17 05:35:32 -07:00
parent 34cc60410f
commit fc8dfe3e40
5 changed files with 50 additions and 47 deletions

View file

@ -163,12 +163,32 @@ extern "C" {
SET_ERROR_CODE(Z3_INVALID_ARG, "expression is not a string literal");
return "";
}
mk_c(c)->m_char_buffer.reset();
auto& buffer = mk_c(c)->m_char_buffer;
buffer.reset();
svector<char> buff;
for (unsigned i = 0; i < str.length(); ++i) {
mk_c(c)->m_char_buffer.push_back((char)str[i]);
unsigned ch = str[i];
if (ch >= 256) {
buff.reset();
buffer.push_back('\\');
buffer.push_back('\\'); // possibly replace by native non-escaped version?
buffer.push_back('u');
buffer.push_back('{');
while (ch > 0) {
buff.push_back('0' + (ch & 0xF));
ch /= 16;
}
for (unsigned j = buff.size(); j-- > 0; ) {
buffer.push_back(buff[j]);
}
buffer.push_back('}');
}
else {
buffer.push_back((char)ch);
}
}
*length = str.length();
return mk_c(c)->m_char_buffer.c_ptr();
*length = buffer.size();
return buffer.c_ptr();
Z3_CATCH_RETURN("");
}