From ce598fd4ef39569f7706230eeac0bca126cf8c6b Mon Sep 17 00:00:00 2001 From: dalance Date: Wed, 11 Nov 2020 14:17:56 +0900 Subject: [PATCH] Keep text_macro_definition after preprocess #19 --- CHANGELOG.md | 2 ++ sv-parser-pp/src/preprocess.rs | 29 +++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d646795..8dec17c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased](https://github.com/dalance/sv-parser/compare/v0.8.3...Unreleased) - ReleaseDate +* [Changed] keep text_macro_definition after preprocess [#19](https://github.com/dalance/sv-parser/issues/19) + ## [v0.8.3](https://github.com/dalance/sv-parser/compare/v0.8.2...v0.8.3) - 2020-11-06 * [Fixed] textmacro without arguments issue [#20](https://github.com/dalance/sv-parser/issues/20) diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index c51b435..592b9a4 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -434,6 +434,11 @@ pub fn preprocess_str, U: AsRef, V: BuildHasher>( }; defines.insert(id, Some(define)); + + // Keep TextMacroDefinition after preprocess + let locate: Locate = x.try_into().unwrap(); + let range = Range::new(locate.offset, locate.offset + locate.len); + ret.push(locate.str(&s), Some((path.as_ref(), range))); } NodeEvent::Enter(RefNode::IncludeCompilerDirective(x)) if !ignore_include => { skip_nodes.push(x.into()); @@ -885,7 +890,9 @@ endmodule .unwrap(); assert_eq!( ret.text(), - r##" + r##"`define connect(NAME, INDEX = 0) \ + assign NAME``_``INDEX``__x = NAME[INDEX].x; \ + assign NAME``_``INDEX``__y = NAME[INDEX].y; module a (); @@ -908,7 +915,13 @@ module a (); .unwrap(); assert_eq!( ret.text(), - r##" + r##"`define disp(clk, exp, msg) \ + always @(posedge clk) begin \ + if (!(exp)) begin \ + $display msg; \ + end \ + end \ + module a (); always @(posedge clk) begin @@ -936,9 +949,9 @@ endmodule assert_eq!( ret.text(), r##"module a; - - - +`define HI Hello +`define LO "`HI, world" +`define H(x) "Hello, x" initial begin $display("`HI, world"); $display("`HI, world" ); @@ -961,7 +974,7 @@ endmodule .unwrap(); assert_eq!( ret.text(), - r##" + r##"`define msg(x,y) `"x: `\`"y`\`"`" module a; initial begin @@ -1075,7 +1088,7 @@ endmodule .unwrap(); assert_eq!( ret.text(), - r##" + r##"`define NAME 42 // Comment interface foo #(WIDTH = 42 ) (); endinterface "## @@ -1115,7 +1128,7 @@ endmodule .unwrap(); assert_eq!( ret.text(), - r##" + r##"`define MOD_INST u_mysubmod module mymod; mysubmod u_mysubmod() ; endmodule