3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 18:31:49 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-07-28 08:26:52 -07:00
parent ca67274519
commit 64233034cc
2 changed files with 49 additions and 0 deletions

View file

@ -403,9 +403,57 @@ inline func_decl * arith_decl_plugin::mk_func_decl(decl_kind k, bool is_real) {
}
}
void arith_decl_plugin::check_arity(unsigned arity, unsigned expected_arity) {
if (arity != expected_arity) {
m_manager->raise_exception("invalid number of arguments passed to function");
}
}
inline decl_kind arith_decl_plugin::fix_kind(decl_kind k, unsigned arity) {
if (k == OP_SUB && arity == 1) {
return OP_UMINUS;
}
switch (k) {
case OP_LE: check_arity(arity, 2); break;
case OP_GE: check_arity(arity, 2); break;
case OP_LT: check_arity(arity, 2); break;
case OP_GT: check_arity(arity, 2); break;
case OP_ADD: break;
case OP_SUB: break;
case OP_UMINUS: check_arity(arity, 1); break;
case OP_MUL: break;
case OP_DIV: check_arity(arity, 2); break;
case OP_IDIV: check_arity(arity, 2); break;
case OP_REM: check_arity(arity, 2); break;
case OP_MOD: check_arity(arity, 2); break;
case OP_TO_REAL: check_arity(arity, 1); break;
case OP_TO_INT: check_arity(arity, 1); break;
case OP_IS_INT: check_arity(arity, 1); break;
case OP_POWER: check_arity(arity, 2); break;
case OP_ABS: check_arity(arity, 1); break;
case OP_SIN: check_arity(arity, 1); break;
case OP_COS: check_arity(arity, 1); break;
case OP_TAN: check_arity(arity, 1); break;
case OP_ASIN: check_arity(arity, 1); break;
case OP_ACOS: check_arity(arity, 1); break;
case OP_ATAN: check_arity(arity, 1); break;
case OP_SINH: check_arity(arity, 1); break;
case OP_COSH: check_arity(arity, 1); break;
case OP_TANH: check_arity(arity, 1); break;
case OP_ASINH: check_arity(arity, 1); break;
case OP_ACOSH: check_arity(arity, 1); break;
case OP_ATANH: check_arity(arity, 1); break;
case OP_PI: break;
case OP_E: break;
case OP_0_PW_0_INT: break;
case OP_0_PW_0_REAL: break;
case OP_NEG_ROOT: break;
case OP_DIV_0: check_arity(arity, 1); break;
case OP_IDIV_0: check_arity(arity, 1); break;
case OP_MOD_0: check_arity(arity, 1); break;
case OP_U_ASIN: break;
case OP_U_ACOS: break;
}
return k;
}

View file

@ -157,6 +157,7 @@ protected:
func_decl * mk_func_decl(decl_kind k, bool is_real);
virtual void set_manager(ast_manager * m, family_id id);
decl_kind fix_kind(decl_kind k, unsigned arity);
void check_arity(unsigned arity, unsigned expected_arity);
func_decl * mk_num_decl(unsigned num_parameters, parameter const * parameters, unsigned arity);
public: