diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-11-08 12:38:22 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-11-08 12:38:22 +0100 |
commit | 003336c58dcc9bc96484d6e7a9f3033309a747df (patch) | |
tree | 4f403880c82685f40fcd24e23bfa48fb4388687a | |
parent | 73f5ffcce84299193930e7f580f2cc9367633ab5 (diff) | |
download | yosys-003336c58dcc9bc96484d6e7a9f3033309a747df.tar.gz yosys-003336c58dcc9bc96484d6e7a9f3033309a747df.tar.bz2 yosys-003336c58dcc9bc96484d6e7a9f3033309a747df.zip |
Use a cache for log_id() memory management
-rw-r--r-- | kernel/log.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/log.cc b/kernel/log.cc index 99e92e44d..9f5f03b2f 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -44,6 +44,7 @@ bool log_cmd_error_throw = false; int log_verbose_level; std::vector<int> header_count; +std::set<RTLIL::IdString> log_id_cache; std::list<std::string> string_buf; int string_buf_size = 0; @@ -214,6 +215,7 @@ void log_push() void log_pop() { header_count.pop_back(); + log_id_cache.clear(); string_buf.clear(); string_buf_size = 0; log_flush(); @@ -223,6 +225,7 @@ void log_reset_stack() { while (header_count.size() > 1) header_count.pop_back(); + log_id_cache.clear(); string_buf.clear(); string_buf_size = 0; log_flush(); @@ -257,8 +260,8 @@ const char *log_signal(const RTLIL::SigSpec &sig, bool autoint) const char *log_id(RTLIL::IdString str) { + log_id_cache.insert(str); const char *p = str.c_str(); - log_assert(RTLIL::IdString::global_refcount_storage_[str.index_] > 1); if (p[0] == '\\' && p[1] != '$' && p[1] != 0) return p+1; return p; |