diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f7f892..e8a9db5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [Unreleased](https://github.com/dalance/sv-parser/compare/v0.9.0...Unreleased) - ReleaseDate +* [Fixed] escaped_ideitifier at macro name [#28](https://github.com/dalance/sv-parser/issues/28) * [Fixed] begin_keywords "1364-2001-noconfig" failure [#28](https://github.com/dalance/sv-parser/issues/28) * [Changed] update nom to 6.0.0 diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index 592b9a4..8edb6df 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -561,7 +561,9 @@ fn identifier(node: RefNode, s: &str) -> Option { } RefNode::EscapedIdentifier(x) => { let x: Locate = x.nodes.0.try_into().unwrap(); - return Some(String::from(x.str(s))); + let x = x.str(s); + let x = &x[1..]; // remove \ + return Some(String::from(x)); } _ => (), } @@ -1132,6 +1134,32 @@ endmodule module mymod; mysubmod u_mysubmod() ; endmodule +"## + ); + } + + #[test] + fn test16() { + let (ret, _) = preprocess( + get_testcase("test16.sv"), + &HashMap::new(), + &[] as &[String], + false, + false, + ) + .unwrap(); + assert_eq!( + ret.text(), + r##"module a; +`define HELLO0 "HELLO" +`define \HELLO1 "HELLO" +initial begin +$display("HELLO" ); +$display("HELLO" ); +$display("HELLO" ); +$display("HELLO" ); +end +endmodule "## ); } diff --git a/sv-parser-pp/testcases/test16.sv b/sv-parser-pp/testcases/test16.sv new file mode 100644 index 0000000..5c1230e --- /dev/null +++ b/sv-parser-pp/testcases/test16.sv @@ -0,0 +1,10 @@ +module a; +`define HELLO0 "HELLO" +`define \HELLO1 "HELLO" +initial begin +$display(`HELLO0); +$display(`\HELLO0 ); +$display(`HELLO1); +$display(`\HELLO1 ); +end +endmodule