diff options
author | whitequark <whitequark@whitequark.org> | 2020-05-27 05:20:39 +0000 |
---|---|---|
committer | whitequark <whitequark@whitequark.org> | 2020-05-29 06:43:18 +0000 |
commit | efa7424fb93943d746a344d08e5e879d983709e9 (patch) | |
tree | 32644607450d6bbb1b5412f665d5400a7fd9300d | |
parent | b6513521931ab7375f5409db7d94140b533b5fa2 (diff) | |
download | yosys-efa7424fb93943d746a344d08e5e879d983709e9.tar.gz yosys-efa7424fb93943d746a344d08e5e879d983709e9.tar.bz2 yosys-efa7424fb93943d746a344d08e5e879d983709e9.zip |
Restrict RTLIL::IdString to not contain whitespace or control chars.
This is an existing invariant (most backends can't cope with these)
but one that was not checked or documented.
-rw-r--r-- | kernel/rtlil.h | 8 | ||||
-rw-r--r-- | manual/CHAPTER_Overview.tex | 9 |
2 files changed, 11 insertions, 6 deletions
diff --git a/kernel/rtlil.h b/kernel/rtlil.h index 11c45bbec..898c54a3a 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -150,9 +150,6 @@ namespace RTLIL if (!p[0]) return 0; - log_assert(p[0] == '$' || p[0] == '\\'); - log_assert(p[1] != 0); - auto it = global_id_index_.find((char*)p); if (it != global_id_index_.end()) { #ifndef YOSYS_NO_IDS_REFCNT @@ -165,6 +162,11 @@ namespace RTLIL return it->second; } + log_assert(p[0] == '$' || p[0] == '\\'); + log_assert(p[1] != 0); + for (const char *c = p; *c; c++) + log_assert((unsigned)*c > (unsigned)' '); + #ifndef YOSYS_NO_IDS_REFCNT if (global_free_idx_list_.empty()) { if (global_id_storage_.empty()) { diff --git a/manual/CHAPTER_Overview.tex b/manual/CHAPTER_Overview.tex index be37d8d39..ac0f48e47 100644 --- a/manual/CHAPTER_Overview.tex +++ b/manual/CHAPTER_Overview.tex @@ -184,9 +184,12 @@ may hold important information for Yosys developers can be used without disturbing external tools. For example the Verilog backend assigns names in the form {\tt \_{\it integer}\_}. \end{itemize} -In order to avoid programming errors, the RTLIL data structures check if all -identifiers start with either a backslash or a dollar sign and generate a -runtime error if this rule is violated. +Whitespace and control characters (any character with an ASCII code 32 or less) are not allowed +in RTLIL identifiers; most frontends and backends cannot support these characters in identifiers. + +In order to avoid programming errors, the RTLIL data structures check if all identifiers start +with either a backslash or a dollar sign, and contain no whitespace or control characters. +Violating these rules results in a runtime error. All RTLIL identifiers are case sensitive. |