Added id2cstr API
authorClifford Wolf <clifford@clifford.at>
Fri, 1 Mar 2013 07:57:58 +0000 (08:57 +0100)
committerClifford Wolf <clifford@clifford.at>
Fri, 1 Mar 2013 08:01:49 +0000 (09:01 +0100)
kernel/rtlil.h
kernel/select.cc
kernel/show.cc

index 15fec2690f261fb4626a8f4231314d18b4b61f7e..b5338a33c26027db5c2af12f3fee6ec5e90f418f 100644 (file)
@@ -110,6 +110,13 @@ namespace RTLIL
                return str;
        }
 
+       static const char *id2cstr(std::string str) __attribute__((unused));
+       static const char *id2cstr(std::string str) {
+               if (str.size() > 1 && str[0] == '\\' && str[1] != '$')
+                       return str.c_str() + 1;
+               return str.c_str();
+       }
+
        static IdString new_id(std::string file, int line, std::string func) __attribute__((unused));
        static IdString new_id(std::string file, int line, std::string func) {
                std::string str = "$auto$";
index b55ee969c1c235397da3f03ebcd53adc2fd0d7fd..f43cc8495a9d090c1373ea63dabe03efaebe2d1f 100644 (file)
@@ -542,7 +542,7 @@ struct SelectPass : public Pass {
                        if (arg == "-module" && argidx+1 < args.size()) {
                                RTLIL::IdString mod_name = RTLIL::escape_id(args[++argidx]);
                                if (design->modules.count(mod_name) == 0)
-                                       log_cmd_error("No such module: %s\n", mod_name.c_str());
+                                       log_cmd_error("No such module: %s\n", id2cstr(mod_name));
                                design->selected_active_module = mod_name;
                                got_module = true;
                                continue;
@@ -597,20 +597,20 @@ struct SelectPass : public Pass {
                        for (auto mod_it : design->modules)
                        {
                                if (sel->selected_whole_module(mod_it.first))
-                                       log("%s\n", mod_it.first.c_str());
+                                       log("%s\n", id2cstr(mod_it.first));
                                if (sel->selected_module(mod_it.first)) {
                                        for (auto &it : mod_it.second->wires)
                                                if (sel->selected_member(mod_it.first, it.first))
-                                                       log("%s/%s\n", mod_it.first.c_str(), it.first.c_str());
+                                                       log("%s/%s\n", id2cstr(mod_it.first), id2cstr(it.first));
                                        for (auto &it : mod_it.second->memories)
                                                if (sel->selected_member(mod_it.first, it.first))
-                                                       log("%s/%s\n", mod_it.first.c_str(), it.first.c_str());
+                                                       log("%s/%s\n", id2cstr(mod_it.first), id2cstr(it.first));
                                        for (auto &it : mod_it.second->cells)
                                                if (sel->selected_member(mod_it.first, it.first))
-                                                       log("%s/%s\n", mod_it.first.c_str(), it.first.c_str());
+                                                       log("%s/%s\n", id2cstr(mod_it.first), id2cstr(it.first));
                                        for (auto &it : mod_it.second->processes)
                                                if (sel->selected_member(mod_it.first, it.first))
-                                                       log("%s/%s\n", mod_it.first.c_str(), it.first.c_str());
+                                                       log("%s/%s\n", id2cstr(mod_it.first), id2cstr(it.first));
                                }
                        }
                        return;
@@ -648,10 +648,10 @@ struct SelectPass : public Pass {
                        if (sel.full_selection)
                                log("*\n");
                        for (auto &it : sel.selected_modules)
-                               log("%s\n", it.c_str());
+                               log("%s\n", id2cstr(it));
                        for (auto &it : sel.selected_members)
                                for (auto &it2 : it.second)
-                                       log("%s/%s\n", it.first.c_str(), it2.c_str());
+                                       log("%s/%s\n", id2cstr(it.first), id2cstr(it2));
                        return;
                }
 
index eef4c44f81064437e855d0470c1d8fa883e5b5c2..b587a8568982d6e3dfc089eb4be83706beb88965 100644 (file)
@@ -289,9 +289,9 @@ struct ShowWorker
                        if (!design->selected_module(module->name))
                                continue;
                        if (design->selected_whole_module(module->name))
-                               log("Dumping module %s to page %d.\n", module->name.c_str(), ++page_counter);
+                               log("Dumping module %s to page %d.\n", id2cstr(module->name), ++page_counter);
                        else
-                               log("Dumping selected parts of module %s to page %d.\n", module->name.c_str(), ++page_counter);
+                               log("Dumping selected parts of module %s to page %d.\n", id2cstr(module->name), ++page_counter);
                        handle_module();
                }
        }