mirror of https://github.com/YosysHQ/yosys.git
Store command history when terminating with an error
This commit is contained in:
parent
f6421c83a2
commit
c0ca99483c
|
@ -119,6 +119,29 @@ const char *prompt()
|
||||||
|
|
||||||
#else /* EMSCRIPTEN */
|
#else /* EMSCRIPTEN */
|
||||||
|
|
||||||
|
#ifdef YOSYS_ENABLE_READLINE
|
||||||
|
int history_offset = 0;
|
||||||
|
std::string history_file;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void yosys_atexit()
|
||||||
|
{
|
||||||
|
#ifdef YOSYS_ENABLE_READLINE
|
||||||
|
if (!history_file.empty()) {
|
||||||
|
if (history_offset > 0) {
|
||||||
|
history_truncate_file(history_file.c_str(), 100);
|
||||||
|
append_history(where_history() - history_offset, history_file.c_str());
|
||||||
|
} else
|
||||||
|
write_history(history_file.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_history();
|
||||||
|
HIST_ENTRY **hist_list = history_list();
|
||||||
|
if (hist_list != NULL)
|
||||||
|
free(hist_list);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
std::string frontend_command = "auto";
|
std::string frontend_command = "auto";
|
||||||
|
@ -137,8 +160,6 @@ int main(int argc, char **argv)
|
||||||
bool mode_q = false;
|
bool mode_q = false;
|
||||||
|
|
||||||
#ifdef YOSYS_ENABLE_READLINE
|
#ifdef YOSYS_ENABLE_READLINE
|
||||||
int history_offset = 0;
|
|
||||||
std::string history_file;
|
|
||||||
if (getenv("HOME") != NULL) {
|
if (getenv("HOME") != NULL) {
|
||||||
history_file = stringf("%s/.yosys_history", getenv("HOME"));
|
history_file = stringf("%s/.yosys_history", getenv("HOME"));
|
||||||
read_history(history_file.c_str());
|
read_history(history_file.c_str());
|
||||||
|
@ -379,6 +400,7 @@ int main(int argc, char **argv)
|
||||||
log_hasher = new SHA1;
|
log_hasher = new SHA1;
|
||||||
|
|
||||||
yosys_setup();
|
yosys_setup();
|
||||||
|
log_error_atexit = yosys_atexit;
|
||||||
|
|
||||||
for (auto &fn : plugin_filenames)
|
for (auto &fn : plugin_filenames)
|
||||||
load_plugin(fn, {});
|
load_plugin(fn, {});
|
||||||
|
@ -509,25 +531,12 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
yosys_atexit();
|
||||||
|
|
||||||
memhasher_off();
|
memhasher_off();
|
||||||
if (call_abort)
|
if (call_abort)
|
||||||
abort();
|
abort();
|
||||||
|
|
||||||
#ifdef YOSYS_ENABLE_READLINE
|
|
||||||
if (!history_file.empty()) {
|
|
||||||
if (history_offset > 0) {
|
|
||||||
history_truncate_file(history_file.c_str(), 100);
|
|
||||||
append_history(where_history() - history_offset, history_file.c_str());
|
|
||||||
} else
|
|
||||||
write_history(history_file.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
clear_history();
|
|
||||||
HIST_ENTRY **hist_list = history_list();
|
|
||||||
if (hist_list != NULL)
|
|
||||||
free(hist_list);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
log_flush();
|
log_flush();
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
_exit(0);
|
_exit(0);
|
||||||
|
|
|
@ -52,6 +52,7 @@ bool log_cmd_error_throw = false;
|
||||||
bool log_quiet_warnings = false;
|
bool log_quiet_warnings = false;
|
||||||
int log_verbose_level;
|
int log_verbose_level;
|
||||||
string log_last_error;
|
string log_last_error;
|
||||||
|
void (*log_error_atexit)() = NULL;
|
||||||
|
|
||||||
vector<int> header_count;
|
vector<int> header_count;
|
||||||
pool<RTLIL::IdString> log_id_cache;
|
pool<RTLIL::IdString> log_id_cache;
|
||||||
|
@ -244,6 +245,9 @@ void logv_error(const char *format, va_list ap)
|
||||||
log("ERROR: %s", log_last_error.c_str());
|
log("ERROR: %s", log_last_error.c_str());
|
||||||
log_flush();
|
log_flush();
|
||||||
|
|
||||||
|
if (log_error_atexit)
|
||||||
|
log_error_atexit();
|
||||||
|
|
||||||
#ifdef EMSCRIPTEN
|
#ifdef EMSCRIPTEN
|
||||||
log_files = backup_log_files;
|
log_files = backup_log_files;
|
||||||
throw 0;
|
throw 0;
|
||||||
|
|
|
@ -60,6 +60,7 @@ extern bool log_cmd_error_throw;
|
||||||
extern bool log_quiet_warnings;
|
extern bool log_quiet_warnings;
|
||||||
extern int log_verbose_level;
|
extern int log_verbose_level;
|
||||||
extern string log_last_error;
|
extern string log_last_error;
|
||||||
|
extern void (*log_error_atexit)();
|
||||||
|
|
||||||
void logv(const char *format, va_list ap);
|
void logv(const char *format, va_list ap);
|
||||||
void logv_header(RTLIL::Design *design, const char *format, va_list ap);
|
void logv_header(RTLIL::Design *design, const char *format, va_list ap);
|
||||||
|
|
Loading…
Reference in New Issue