mirror of
https://github.com/Z3Prover/z3
synced 2025-08-24 12:07:52 +00:00
update pretty printer for recursive function filtering
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
7f62fa2b66
commit
1028c80851
5 changed files with 65 additions and 57 deletions
|
@ -19,6 +19,7 @@ Revision History:
|
|||
--*/
|
||||
#include "ast/decl_collector.h"
|
||||
#include "ast/ast_pp.h"
|
||||
#include "ast/recfun_decl_plugin.h"
|
||||
|
||||
void decl_collector::visit_sort(sort * n) {
|
||||
SASSERT(!m_visited.is_marked(n));
|
||||
|
@ -49,8 +50,12 @@ bool decl_collector::is_bool(sort * s) {
|
|||
void decl_collector::visit_func(func_decl * n) {
|
||||
if (!m_visited.is_marked(n)) {
|
||||
family_id fid = n->get_family_id();
|
||||
if (fid == null_family_id) {
|
||||
if (fid == null_family_id)
|
||||
m_decls.push_back(n);
|
||||
else if (fid == m_rec_fid) {
|
||||
m_rec_decls.push_back(n);
|
||||
recfun::util u(m());
|
||||
m_todo.push_back(u.get_def(n).get_rhs());
|
||||
}
|
||||
m_visited.mark(n, true);
|
||||
m_trail.push_back(n);
|
||||
|
@ -63,6 +68,8 @@ decl_collector::decl_collector(ast_manager & m):
|
|||
m_dt_util(m) {
|
||||
m_basic_fid = m_manager.get_basic_family_id();
|
||||
m_dt_fid = m_dt_util.get_family_id();
|
||||
recfun::util rec_util(m);
|
||||
m_rec_fid = rec_util.get_family_id();
|
||||
}
|
||||
|
||||
void decl_collector::visit(ast* n) {
|
||||
|
@ -143,9 +150,8 @@ void decl_collector::collect_deps(sort* s, sort_set& set) {
|
|||
set.insert(s);
|
||||
if (s->is_sort_of(m_dt_util.get_family_id(), DATATYPE_SORT)) {
|
||||
unsigned num_sorts = m_dt_util.get_datatype_num_parameter_sorts(s);
|
||||
for (unsigned i = 0; i < num_sorts; ++i) {
|
||||
for (unsigned i = 0; i < num_sorts; ++i)
|
||||
set.insert(m_dt_util.get_datatype_parameter_sort(s, i));
|
||||
}
|
||||
unsigned num_cnstr = m_dt_util.get_datatype_num_constructors(s);
|
||||
for (unsigned i = 0; i < num_cnstr; i++) {
|
||||
func_decl * cnstr = m_dt_util.get_datatype_constructors(s)->get(i);
|
||||
|
@ -157,29 +163,27 @@ void decl_collector::collect_deps(sort* s, sort_set& set) {
|
|||
|
||||
for (unsigned i = s->get_num_parameters(); i-- > 0; ) {
|
||||
parameter const& p = s->get_parameter(i);
|
||||
if (p.is_ast() && is_sort(p.get_ast())) {
|
||||
if (p.is_ast() && is_sort(p.get_ast()))
|
||||
set.insert(to_sort(p.get_ast()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void decl_collector::push() {
|
||||
m_trail_lim.push_back(m_trail.size());
|
||||
m_sorts_lim.push_back(m_sorts.size());
|
||||
m_decls_lim.push_back(m_decls.size());
|
||||
m_sorts.push_scope();
|
||||
m_decls.push_scope();
|
||||
m_rec_decls.push_scope();
|
||||
}
|
||||
|
||||
void decl_collector::pop(unsigned n) {
|
||||
SASSERT(n > 0);
|
||||
unsigned sz = m_trail_lim[m_trail_lim.size() - n];
|
||||
for (unsigned i = m_trail.size(); i-- > sz; ) {
|
||||
for (unsigned i = m_trail.size(); i-- > sz; )
|
||||
m_visited.mark(m_trail.get(i), false);
|
||||
}
|
||||
m_trail.shrink(sz);
|
||||
m_sorts.shrink(m_sorts_lim[m_sorts_lim.size() - n]);
|
||||
m_decls.shrink(m_decls_lim[m_decls_lim.size() - n]);
|
||||
m_trail_lim.shrink(m_trail_lim.size() - n);
|
||||
m_sorts_lim.shrink(m_sorts_lim.size() - n);
|
||||
m_decls_lim.shrink(m_decls_lim.size() - n);
|
||||
m_sorts.pop_scope(n);
|
||||
m_decls.pop_scope(n);
|
||||
m_rec_decls.pop_scope(n);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue