3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-04-13 12:58:18 -07:00
parent 5dafd1fe25
commit 6a5695463f
5 changed files with 39 additions and 23 deletions

View file

@ -1796,11 +1796,11 @@ bool ast_manager::slow_not_contains(ast const * n) {
#if 0
static unsigned s_count = 0;
static void track_id(ast* n, unsigned id) {
static void track_id(ast_manager& m, ast* n, unsigned id) {
if (n->get_id() != id) return;
++s_count;
std::cout << s_count << "\n";
//SASSERT(s_count != 1);
std::cout << &m << " " << s_count << "\n";
SASSERT(s_count != 240);
}
#endif
@ -1834,7 +1834,7 @@ ast * ast_manager::register_node_core(ast * n) {
n->m_id = is_decl(n) ? m_decl_id_gen.mk() : m_expr_id_gen.mk();
// track_id(n, 77);
// track_id(*this, n, 254);
TRACE("ast", tout << "Object " << n->m_id << " was created.\n";);
TRACE("mk_var_bug", tout << "mk_ast: " << n->m_id << "\n";);

View file

@ -21,6 +21,7 @@ Revision History:
#include "ast/array_decl_plugin.h"
#include "ast/datatype_decl_plugin.h"
#include "ast/ast_smt2_pp.h"
#include "ast/ast_pp.h"
#include "ast/ast_translation.h"
@ -353,6 +354,7 @@ namespace datatype {
}
#define VALIDATE_PARAM(_pred_) if (!(_pred_)) m_manager->raise_exception("invalid parameter to datatype function " #_pred_);
#define VALIDATE_PARAM_PP(_pred_, _msg_) if (!(_pred_)) m_manager->raise_exception(_msg_);
func_decl * decl::plugin::mk_constructor(unsigned num_parameters, parameter const * parameters,
unsigned arity, sort * const * domain, sort * range) {
@ -368,8 +370,10 @@ namespace datatype {
func_decl * decl::plugin::mk_recognizer(unsigned num_parameters, parameter const * parameters,
unsigned arity, sort * const * domain, sort *) {
ast_manager& m = *m_manager;
VALIDATE_PARAM(arity == 1 && num_parameters == 2 && parameters[1].is_symbol() && parameters[0].is_ast() && is_func_decl(parameters[0].get_ast()));
VALIDATE_PARAM(arity == 1 && num_parameters == 2 && parameters[1].is_symbol());
VALIDATE_PARAM(parameters[0].is_ast() && is_func_decl(parameters[0].get_ast()));
VALIDATE_PARAM(u().is_datatype(domain[0]));
VALIDATE_PARAM(to_func_decl(parameters[0].get_ast())->get_range()== domain[0])
// blindly trust that parameter is a constructor
sort* range = m_manager->mk_bool_sort();
func_decl_info info(m_family_id, OP_DT_RECOGNISER, num_parameters, parameters);
@ -382,6 +386,7 @@ namespace datatype {
ast_manager& m = *m_manager;
VALIDATE_PARAM(arity == 1 && num_parameters == 1 && parameters[0].is_ast() && is_func_decl(parameters[0].get_ast()));
VALIDATE_PARAM(u().is_datatype(domain[0]));
VALIDATE_PARAM_PP(domain[0] == to_func_decl(parameters[0].get_ast())->get_range(), "invalid sort argument passed to recognizer");
// blindly trust that parameter is a constructor
sort* range = m_manager->mk_bool_sort();
func_decl_info info(m_family_id, OP_DT_IS, num_parameters, parameters);
@ -537,10 +542,15 @@ namespace datatype {
sort_ref_vector ps(*m_manager);
for (symbol const& s : m_def_block) {
new_sorts.push_back(m_defs[s]->instantiate(ps));
if (m_manager->has_trace_stream()) {
log_axiom_definitions(s, new_sorts.back());
}
if (m_manager->has_trace_stream()) {
for (unsigned i = 0; i < m_def_block.size(); ++i) {
symbol const& s = m_def_block[i];
sort* srt = new_sorts.get(i);
log_axiom_definitions(s, srt);
}
}
return true;
}