summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/driver.cc6
-rw-r--r--kernel/log.cc2
-rw-r--r--kernel/log.h2
3 files changed, 6 insertions, 4 deletions
diff --git a/kernel/driver.cc b/kernel/driver.cc
index 7a1c7ed1..380315e7 100644
--- a/kernel/driver.cc
+++ b/kernel/driver.cc
@@ -141,9 +141,9 @@ static void run_frontend(std::string filename, std::string command, RTLIL::Desig
Pass::call(design, command);
}
}
- catch (...) {
+ catch (log_cmd_error_expection) {
Frontend::current_script_file = backup_script_file;
- std::rethrow_exception(std::current_exception());
+ throw log_cmd_error_expection();
}
Frontend::current_script_file = backup_script_file;
@@ -329,7 +329,7 @@ static void shell(RTLIL::Design *design)
try {
assert(design->selection_stack.size() == 1);
Pass::call(design, command);
- } catch (int) {
+ } catch (log_cmd_error_expection) {
while (design->selection_stack.size() > 1)
design->selection_stack.pop_back();
log_reset_stack();
diff --git a/kernel/log.cc b/kernel/log.cc
index 63a0a84d..b8a47e1c 100644
--- a/kernel/log.cc
+++ b/kernel/log.cc
@@ -160,7 +160,7 @@ void log_cmd_error(const char *format, ...)
log("ERROR: ");
logv(format, ap);
log_flush();
- throw 0;
+ throw log_cmd_error_expection();
}
logv_error(format, ap);
diff --git a/kernel/log.h b/kernel/log.h
index 1658800d..abfb810f 100644
--- a/kernel/log.h
+++ b/kernel/log.h
@@ -34,6 +34,8 @@
#define S__LINE__sub1(x) S__LINE__sub2(x)
#define S__LINE__ S__LINE__sub1(__LINE__)
+struct log_cmd_error_expection { };
+
extern std::vector<FILE*> log_files;
extern FILE *log_errfile;
extern bool log_time;