From 51a40859103e671dd7bea8d7568b64e79818c4fc Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Fri, 4 Nov 2016 15:19:11 +0000 Subject: [PATCH] check for logic in solver Signed-off-by: Nikolaj Bjorner --- contrib/cmake/src/solver/CMakeLists.txt | 1 + src/api/api_solver.cpp | 17 ++- src/cmd_context/cmd_context.cpp | 127 ++------------------ src/cmd_context/cmd_context.h | 7 -- src/solver/smt_logics.cpp | 149 ++++++++++++++++++++++++ src/solver/smt_logics.h | 40 +++++++ 6 files changed, 213 insertions(+), 128 deletions(-) create mode 100644 src/solver/smt_logics.cpp create mode 100644 src/solver/smt_logics.h diff --git a/contrib/cmake/src/solver/CMakeLists.txt b/contrib/cmake/src/solver/CMakeLists.txt index 7f54e7745..56864a691 100644 --- a/contrib/cmake/src/solver/CMakeLists.txt +++ b/contrib/cmake/src/solver/CMakeLists.txt @@ -3,6 +3,7 @@ z3_add_component(solver check_sat_result.cpp combined_solver.cpp mus.cpp + smt_logics.cpp solver.cpp solver_na2as.cpp solver2tactic.cpp diff --git a/src/api/api_solver.cpp b/src/api/api_solver.cpp index 786a7c4ba..6dc41efb2 100644 --- a/src/api/api_solver.cpp +++ b/src/api/api_solver.cpp @@ -32,6 +32,7 @@ Revision History: #include"smt_strategic_solver.h" #include"smt_solver.h" #include"smt_implied_equalities.h" +#include"smt_logics.h" extern "C" { @@ -80,10 +81,18 @@ extern "C" { Z3_TRY; LOG_Z3_mk_solver_for_logic(c, logic); RESET_ERROR_CODE(); - Z3_solver_ref * s = alloc(Z3_solver_ref, *mk_c(c), mk_smt_strategic_solver_factory(to_symbol(logic))); - mk_c(c)->save_object(s); - Z3_solver r = of_solver(s); - RETURN_Z3(r); + if (!smt_logics::supported_logic(to_symbol(logic))) { + std::ostringstream strm; + strm << "logic '" << to_symbol(logic) << "' is not recognized"; + throw default_exception(strm.str()); + RETURN_Z3(0); + } + else { + Z3_solver_ref * s = alloc(Z3_solver_ref, *mk_c(c), mk_smt_strategic_solver_factory(to_symbol(logic))); + mk_c(c)->save_object(s); + Z3_solver r = of_solver(s); + RETURN_Z3(r); + } Z3_CATCH_RETURN(0); } diff --git a/src/cmd_context/cmd_context.cpp b/src/cmd_context/cmd_context.cpp index 930a8fc71..3cf00c154 100644 --- a/src/cmd_context/cmd_context.cpp +++ b/src/cmd_context/cmd_context.cpp @@ -45,6 +45,7 @@ Notes: #include"model_params.hpp" #include"th_rewriter.h" #include"tactic_exception.h" +#include"smt_logics.h" func_decls::func_decls(ast_manager & m, func_decl * f): m_decls(TAG(func_decl*, f, 0)) { @@ -503,128 +504,32 @@ void cmd_context::load_plugin(symbol const & name, bool install, svector