aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-07-27 12:04:12 +0200
committerClifford Wolf <clifford@clifford.at>2014-07-27 12:05:50 +0200
commitd878fcbdc76f4b612ba8578213f73f27585fc792 (patch)
tree6a803cd2191455691c9fe2054348c7c896303902 /kernel
parent7661ded8ddf85e8cd80ccce0bec211d9bf46e56b (diff)
downloadyosys-d878fcbdc76f4b612ba8578213f73f27585fc792.tar.gz
yosys-d878fcbdc76f4b612ba8578213f73f27585fc792.tar.bz2
yosys-d878fcbdc76f4b612ba8578213f73f27585fc792.zip
Added log_cmd_error_expection
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 7a1c7ed16..380315e7c 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 63a0a84dd..b8a47e1cf 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 1658800dd..abfb810f7 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;