Fixes in show command (related to new IdString)

This commit is contained in:
Clifford Wolf 2014-08-03 12:40:23 +02:00
parent 08ec33a5e5
commit 9bb5298c10
1 changed files with 18 additions and 20 deletions

View File

@ -111,7 +111,7 @@ struct ShowWorker
return stringf("style=\"setlinewidth(3)\", label=\"<%d>\"", bits); return stringf("style=\"setlinewidth(3)\", label=\"<%d>\"", bits);
} }
const char *findColor(RTLIL::IdString member_name) const char *findColor(std::string member_name)
{ {
for (auto &s : color_selections) for (auto &s : color_selections)
if (s.second.selected_member(module->name, member_name)) { if (s.second.selected_member(module->name, member_name)) {
@ -121,7 +121,7 @@ struct ShowWorker
return ""; return "";
} }
const char *findLabel(RTLIL::IdString member_name) const char *findLabel(std::string member_name)
{ {
for (auto &s : label_selections) for (auto &s : label_selections)
if (s.second.selected_member(module->name, member_name)) if (s.second.selected_member(module->name, member_name))
@ -129,14 +129,12 @@ struct ShowWorker
return escape(member_name, true); return escape(member_name, true);
} }
const char *escape(RTLIL::IdString id, bool is_name = false) const char *escape(std::string id, bool is_name = false)
{ {
std::string id_str = id.str(); if (id.size() == 0)
if (id_str.size() == 0)
return ""; return "";
if (id_str[0] == '$' && is_name) { if (id[0] == '$' && is_name) {
if (enumerateIds) { if (enumerateIds) {
if (autonames.count(id) == 0) { if (autonames.count(id) == 0) {
autonames[id] = autonames.size() + 1; autonames[id] = autonames.size() + 1;
@ -144,17 +142,17 @@ struct ShowWorker
} }
id = stringf("_%d_", autonames[id]); id = stringf("_%d_", autonames[id]);
} else if (abbreviateIds) { } else if (abbreviateIds) {
const char *p = id_str.c_str(); const char *p = id.c_str();
const char *q = strrchr(p, '$'); const char *q = strrchr(p, '$');
id_str = std::string(q); id = std::string(q);
} }
} }
if (id_str[0] == '\\') if (id[0] == '\\')
id_str = id_str.substr(1); id = id.substr(1);
std::string str; std::string str;
for (char ch : id_str) { for (char ch : id) {
if (ch == '\\' || ch == '"') if (ch == '\\' || ch == '"')
str += "\\"; str += "\\";
str += ch; str += ch;
@ -298,9 +296,9 @@ struct ShowWorker
dot_id2num_store.clear(); dot_id2num_store.clear();
net_conn_map.clear(); net_conn_map.clear();
fprintf(f, "digraph \"%s\" {\n", escape(module->name)); fprintf(f, "digraph \"%s\" {\n", escape(module->name.str()));
if (!notitle) if (!notitle)
fprintf(f, "label=\"%s\";\n", escape(module->name)); fprintf(f, "label=\"%s\";\n", escape(module->name.str()));
fprintf(f, "rankdir=\"LR\";\n"); fprintf(f, "rankdir=\"LR\";\n");
fprintf(f, "remincross=true;\n"); fprintf(f, "remincross=true;\n");
@ -315,7 +313,7 @@ struct ShowWorker
shape = "octagon"; shape = "octagon";
if (it.first[0] == '\\') { if (it.first[0] == '\\') {
fprintf(f, "n%d [ shape=%s, label=\"%s\", %s, fontcolor=\"black\" ];\n", fprintf(f, "n%d [ shape=%s, label=\"%s\", %s, fontcolor=\"black\" ];\n",
id2num(it.first), shape, findLabel(it.first), id2num(it.first), shape, findLabel(it.first.str()),
nextColor(RTLIL::SigSpec(it.second), "color=\"black\"").c_str()); nextColor(RTLIL::SigSpec(it.second), "color=\"black\"").c_str());
if (it.second->port_input) if (it.second->port_input)
all_sources.insert(stringf("n%d", id2num(it.first))); all_sources.insert(stringf("n%d", id2num(it.first)));
@ -356,14 +354,14 @@ struct ShowWorker
std::string label_string = "{{"; std::string label_string = "{{";
for (auto &p : in_ports) for (auto &p : in_ports)
label_string += stringf("<p%d> %s|", id2num(p), escape(p)); label_string += stringf("<p%d> %s|", id2num(p), escape(p.str()));
if (label_string[label_string.size()-1] == '|') if (label_string[label_string.size()-1] == '|')
label_string = label_string.substr(0, label_string.size()-1); label_string = label_string.substr(0, label_string.size()-1);
label_string += stringf("}|%s\\n%s|{", findLabel(it.first), escape(it.second->type)); label_string += stringf("}|%s\\n%s|{", findLabel(it.first.str()), escape(it.second->type.str()));
for (auto &p : out_ports) for (auto &p : out_ports)
label_string += stringf("<p%d> %s|", id2num(p), escape(p)); label_string += stringf("<p%d> %s|", id2num(p), escape(p.str()));
if (label_string[label_string.size()-1] == '|') if (label_string[label_string.size()-1] == '|')
label_string = label_string.substr(0, label_string.size()-1); label_string = label_string.substr(0, label_string.size()-1);
@ -382,7 +380,7 @@ struct ShowWorker
else else
#endif #endif
fprintf(f, "c%d [ shape=record, label=\"%s\"%s ];\n%s", fprintf(f, "c%d [ shape=record, label=\"%s\"%s ];\n%s",
id2num(it.first), label_string.c_str(), findColor(it.first), code.c_str()); id2num(it.first), label_string.c_str(), findColor(it.first.str()), code.c_str());
} }
for (auto &it : module->processes) for (auto &it : module->processes)
@ -420,7 +418,7 @@ struct ShowWorker
std::string proc_src = RTLIL::unescape_id(proc->name); std::string proc_src = RTLIL::unescape_id(proc->name);
if (proc->attributes.count("\\src") > 0) if (proc->attributes.count("\\src") > 0)
proc_src = proc->attributes.at("\\src").decode_string(); proc_src = proc->attributes.at("\\src").decode_string();
fprintf(f, "p%d [shape=box, style=rounded, label=\"PROC %s\\n%s\"];\n", pidx, findLabel(proc->name), proc_src.c_str()); fprintf(f, "p%d [shape=box, style=rounded, label=\"PROC %s\\n%s\"];\n", pidx, findLabel(proc->name.str()), proc_src.c_str());
} }
for (auto &conn : module->connections()) for (auto &conn : module->connections())