3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-28 08:58:44 +00:00

succinct logging

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2022-08-23 21:06:04 -07:00
parent 74c61f49b4
commit fb8532bf55
5 changed files with 81 additions and 18 deletions

View file

@ -129,6 +129,7 @@ void ast_pp_util::push() {
m_rec_decls.push();
m_decls.push();
m_sorts.push();
m_defined_lim.push_back(m_defined.size());
}
void ast_pp_util::pop(unsigned n) {
@ -136,4 +137,50 @@ void ast_pp_util::pop(unsigned n) {
m_rec_decls.pop(n);
m_decls.pop(n);
m_sorts.pop(n);
unsigned old_sz = m_defined_lim[m_defined_lim.size() - n];
for (unsigned i = m_defined.size(); i-- > old_sz; )
m_is_defined.mark(m_defined[i], false);
m_defined.shrink(old_sz);
m_defined_lim.shrink(m_defined_lim.size() - n);
}
std::ostream& ast_pp_util::define_expr(std::ostream& out, expr* n) {
ptr_buffer<expr> visit;
visit.push_back(n);
while (!visit.empty()) {
n = visit.back();
if (m_is_defined.is_marked(n)) {
visit.pop_back();
continue;
}
if (is_app(n)) {
bool all_visit = true;
for (auto* e : *to_app(n)) {
if (m_is_defined.is_marked(e))
continue;
all_visit = false;
visit.push_back(e);
}
if (!all_visit)
continue;
m_defined.push_back(n);
m_is_defined.mark(n, true);
visit.pop_back();
if (to_app(n)->get_num_args() == 0)
out << "(define-const $" << n->get_id() << " " << mk_pp(n->get_sort(), m) << " " << mk_pp(n, m) << "\n";
else {
out << "(define-const $" << n->get_id() << " " << mk_pp(n->get_sort(), m) << " (";
out << to_app(n)->get_name(); // fixme
for (auto* e : *to_app(n))
out << " $" << e->get_id();
out << ")\n";
}
continue;
}
out << "(define-const $" << n->get_id() << " " << mk_pp(n->get_sort(), m) << " " << mk_pp(n, m) << "\n";
m_defined.push_back(n);
m_is_defined.mark(n, true);
visit.pop_back();
}
return out;
}