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.
This commit is contained in:
Thomas Sailer
2021-12-15 18:06:02 -07:00
committed by Zachary Snow
parent 477eeefd9b
commit 4cd2f03e36
2 changed files with 29 additions and 0 deletions
+10
View File
@@ -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) {
+19
View File
@@ -0,0 +1,19 @@
read_verilog -sv <<EOT
module doubleslash
(input logic a,
input logic b,
output logic z);
logic \a//b ;
assign \a//b = a & b;
assign z = ~\a//b ;
endmodule : doubleslash
EOT
hierarchy
proc
opt -full
write_verilog doubleslash.v