summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-11-08 12:38:22 +0100
committerClifford Wolf <clifford@clifford.at>2014-11-08 12:38:22 +0100
commit003336c58dcc9bc96484d6e7a9f3033309a747df (patch)
tree4f403880c82685f40fcd24e23bfa48fb4388687a
parent73f5ffcce84299193930e7f580f2cc9367633ab5 (diff)
Use a cache for log_id() memory management
-rw-r--r--kernel/log.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/log.cc b/kernel/log.cc
index 99e92e44..9f5f03b2 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;