Improve API of ID() macro
authorClifford Wolf <clifford@clifford.at>
Fri, 9 Aug 2019 16:54:03 +0000 (18:54 +0200)
committerClifford Wolf <clifford@clifford.at>
Sun, 11 Aug 2019 09:39:46 +0000 (11:39 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
kernel/yosys.h

index 09e8139bb7b2a5e2586614d62ccc6eca51834bbd..49716ed525843ec307a5f141dac8a634a48708b2 100644 (file)
@@ -305,8 +305,16 @@ RTLIL::IdString new_id(std::string file, int line, std::string func);
 #define NEW_ID \
        YOSYS_NAMESPACE_PREFIX new_id(__FILE__, __LINE__, __FUNCTION__)
 
-#define ID(_str) \
-       ([]() { static YOSYS_NAMESPACE_PREFIX RTLIL::IdString _id(_str); return _id; })()
+// Create a statically allocated IdString object, using for example ID(A) or ID($add).
+//
+// Recipe for Converting old code that is using conversion of strings like "\\A" and
+// "$add" for creating IdStrings: Run below SED command on the .cc file and then use for
+// example "meld foo.cc foo.cc.orig" to manually compile errors, if necessary.
+//
+//  sed -i.orig -r 's/"\\\\([a-zA-Z0-9_]+)"/ID(\1)/g; s/"(\$[a-zA-Z0-9_]+)"/ID(\1)/g;' <filename>
+//
+#define ID(_id) ([]() { const char *p = "\\" #_id, *q = p[1] == '$' ? p+1 : p; \
+        static const YOSYS_NAMESPACE_PREFIX RTLIL::IdString id(q); return id; })()
 
 RTLIL::Design *yosys_get_design();
 std::string proc_self_dirname();