diff options
author | Thomas Sailer <sailer@tsailer.ch> | 2021-08-25 21:34:26 +0200 |
---|---|---|
committer | Zachary Snow <zachary.j.snow@gmail.com> | 2021-12-15 18:06:02 -0700 |
commit | 4cd2f03e36d09f936d39f8499e26fb0a2bc897f9 (patch) | |
tree | 9a18d32ec0ab99f5e197fd3fc00b152b7867b66c /frontends/verilog | |
parent | 477eeefd9b6c1c98ee5d41cdf407011cf40794a7 (diff) | |
download | yosys-4cd2f03e36d09f936d39f8499e26fb0a2bc897f9.tar.gz yosys-4cd2f03e36d09f936d39f8499e26fb0a2bc897f9.tar.bz2 yosys-4cd2f03e36d09f936d39f8499e26fb0a2bc897f9.zip |
preprocessor: do not destroy double slash escaped identifiers
The preprocessor currently destroys double slash containing escaped
identifiers (for example \a//b ). This is due to next_token trying to
convert single line comments (//) into /* */ comments. This then leads
to an unintuitive error message like this:
ERROR: syntax error, unexpected '*'
This patch fixes the error by recognizing escaped identifiers and
returning them as single token. It also adds a testcase.
Diffstat (limited to 'frontends/verilog')
-rw-r--r-- | frontends/verilog/preproc.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/frontends/verilog/preproc.cc b/frontends/verilog/preproc.cc index 17f567587..883531e78 100644 --- a/frontends/verilog/preproc.cc +++ b/frontends/verilog/preproc.cc @@ -142,6 +142,16 @@ static std::string next_token(bool pass_newline = false) return_char(ch); } } + else if (ch == '\\') + { + while ((ch = next_char()) != 0) { + if (ch < 33 || ch > 126) { + return_char(ch); + break; + } + token += ch; + } + } else if (ch == '/') { if ((ch = next_char()) != 0) { |