mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 01:25:31 +00:00
move user propagte declare to context level
declaration of user propagate functions are declared at context level instead of at solver scope.
This commit is contained in:
parent
4856581b68
commit
f0740bdf60
17 changed files with 92 additions and 324 deletions
|
@ -944,7 +944,7 @@ extern "C" {
|
|||
Z3_TRY;
|
||||
LOG_Z3_solver_propagate_register(c, s, e);
|
||||
RESET_ERROR_CODE();
|
||||
return to_solver_ref(s)->user_propagate_register(to_expr(e));
|
||||
return to_solver_ref(s)->user_propagate_register_expr(to_expr(e));
|
||||
Z3_CATCH_RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -972,11 +972,16 @@ extern "C" {
|
|||
Z3_CATCH;
|
||||
}
|
||||
|
||||
Z3_func_decl Z3_API Z3_solver_propagate_declare(Z3_context c, Z3_solver s, Z3_symbol name, unsigned n, Z3_sort* domain, Z3_sort range) {
|
||||
Z3_func_decl Z3_API Z3_solver_propagate_declare(Z3_context c, Z3_symbol name, unsigned n, Z3_sort* domain, Z3_sort range) {
|
||||
Z3_TRY;
|
||||
LOG_Z3_solver_propagate_declare(c, s, name, n, domain, range);
|
||||
LOG_Z3_solver_propagate_declare(c, name, n, domain, range);
|
||||
RESET_ERROR_CODE();
|
||||
func_decl* f = to_solver_ref(s)->user_propagate_declare(to_symbol(name), n, to_sorts(domain), to_sort(range));
|
||||
ast_manager& m = mk_c(c)->m();
|
||||
family_id fid = m.mk_family_id(user_propagator::plugin::name());
|
||||
if (!m.has_plugin(fid))
|
||||
m.register_plugin(fid, alloc(user_propagator::plugin));
|
||||
func_decl_info info(fid, user_propagator::plugin::kind_t::OP_USER_PROPAGATE);
|
||||
func_decl* f = m.mk_func_decl(to_symbol(name), n, to_sorts(domain), to_sort(range), info);
|
||||
mk_c(c)->save_ast_trail(f);
|
||||
RETURN_Z3(of_func_decl(f));
|
||||
Z3_CATCH_RETURN(nullptr);
|
||||
|
|
|
@ -6679,17 +6679,21 @@ extern "C" {
|
|||
|
||||
/**
|
||||
* \brief register a callback when a new expression with a registered function is used by the solver
|
||||
* The registered function appears at the top level and is created using \c Z3_solver_declare.
|
||||
* The registered function appears at the top level and is created using \ref Z3_propagate_solver_declare.
|
||||
*/
|
||||
void Z3_API Z3_solver_propagate_created(Z3_context c, Z3_solver s, Z3_created_eh created_eh);
|
||||
|
||||
/**
|
||||
\brief Create a registered function. Expressions used by the solver \c s that uses the registered function
|
||||
at top level cause the callback propagate_created to be invoked.
|
||||
Create uninterpreted function declaration for the user propagator.
|
||||
When expressions using the function are created by the solver invoke a callback
|
||||
to \ref \Z3_solver_progate_created with arguments
|
||||
1. context and callback solve
|
||||
2. declared_expr: expression using function that was used as the top-level symbol
|
||||
3. declared_id: a unique identifier (unique within the current scope) to track the expression.
|
||||
|
||||
def_API('Z3_solver_propagate_declare', FUNC_DECL, (_in(CONTEXT), _in(SOLVER), _in(SYMBOL), _in(UINT), _in_array(3, SORT), _in(SORT)))
|
||||
def_API('Z3_solver_propagate_declare', FUNC_DECL, (_in(CONTEXT), _in(SYMBOL), _in(UINT), _in_array(2, SORT), _in(SORT)))
|
||||
*/
|
||||
Z3_func_decl Z3_API Z3_solver_propagate_declare(Z3_context c, Z3_solver s, Z3_symbol name, unsigned n, Z3_sort* domain, Z3_sort range);
|
||||
Z3_func_decl Z3_API Z3_solver_propagate_declare(Z3_context c, Z3_symbol name, unsigned n, Z3_sort* domain, Z3_sort range);
|
||||
|
||||
/**
|
||||
\brief register an expression to propagate on with the solver.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue