From e954f59052fd2aee193527a0503a8b5a8575343b Mon Sep 17 00:00:00 2001
From: Nikolaj Bjorner <nbjorner@microsoft.com>
Date: Mon, 14 Jan 2019 13:50:17 -0800
Subject: [PATCH] ensure that solver objects have timeout/rlimit/ctrl-c exposed
 as possible parameters

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
---
 src/cmd_context/context_params.cpp | 4 ++--
 src/solver/solver.cpp              | 9 +++++++++
 src/util/params.cpp                | 7 ++++++-
 src/util/params.h                  | 1 +
 4 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/cmd_context/context_params.cpp b/src/cmd_context/context_params.cpp
index c0ab1e3e2..447718aa9 100644
--- a/src/cmd_context/context_params.cpp
+++ b/src/cmd_context/context_params.cpp
@@ -166,8 +166,8 @@ void context_params::updt_params(params_ref const & p) {
 }
 
 void context_params::collect_param_descrs(param_descrs & d) {
-    d.insert("timeout", CPK_UINT, "default timeout (in milliseconds) used for solvers", "4294967295");
-    d.insert("rlimit", CPK_UINT, "default resource limit used for solvers. Unrestricted when set to 0.", "0");
+    insert_rlimit(d);
+    insert_timeout(d);
     d.insert("well_sorted_check", CPK_BOOL, "type checker", "false");
     d.insert("type_check", CPK_BOOL, "type checker (alias for well_sorted_check)", "true");
     d.insert("auto_config", CPK_BOOL, "use heuristics to automatically select solver and configure it", "true");
diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp
index f8c2f8072..f3c533704 100644
--- a/src/solver/solver.cpp
+++ b/src/solver/solver.cpp
@@ -217,8 +217,17 @@ void solver::assert_expr(expr* f, expr* t) {
     assert_expr_core2(fml, a);    
 }
 
+static void insert_ctrl_c(param_descrs & r) {
+    r.insert("ctrl_c", CPK_BOOL, "enable interrupts from ctrl-c", "false");
+}
+
+
 void solver::collect_param_descrs(param_descrs & r) {
     r.insert("solver.enforce_model_conversion", CPK_BOOL, "(default: false) enforce model conversion when asserting formulas");
+    insert_timeout(r);
+    insert_rlimit(r);
+    insert_max_memory(r);
+    insert_ctrl_c(r);
 }
 
 void solver::reset_params(params_ref const & p) {
diff --git a/src/util/params.cpp b/src/util/params.cpp
index 43f53514a..bfb6095d6 100644
--- a/src/util/params.cpp
+++ b/src/util/params.cpp
@@ -298,9 +298,14 @@ void insert_produce_proofs(param_descrs & r) {
 }
 
 void insert_timeout(param_descrs & r) {
-    r.insert("timeout", CPK_UINT, "(default: infty) timeout in milliseconds.");
+    r.insert("timeout", CPK_UINT, "(default: infty) timeout in milliseconds.", "4294967295");
 }
 
+void insert_rlimit(param_descrs & r) {
+    r.insert("rlimit", CPK_UINT, "default resource limit used for solvers. Unrestricted when set to 0.", "0");
+}
+
+
 class params {
     friend class params_ref;
     struct value {
diff --git a/src/util/params.h b/src/util/params.h
index 0a68a9606..5330993c1 100644
--- a/src/util/params.h
+++ b/src/util/params.h
@@ -139,5 +139,6 @@ void insert_max_steps(param_descrs & r);
 void insert_produce_models(param_descrs & r);
 void insert_produce_proofs(param_descrs & r);
 void insert_timeout(param_descrs & r);
+void insert_rlimit(param_descrs & r);
 
 #endif