diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index caa686e..d79061c 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -1618,4 +1618,21 @@ mod tests { testfile_contents("unconnected_drive.sv") ); } // }}} + + #[test] + fn undef() { // {{{ + let include_paths = [testfile_path("")]; + let (ret, _) = preprocess( + testfile_path("undef.sv"), + &HashMap::new(), + &include_paths, + false, + false, + ) + .unwrap(); + assert_eq!( + ret.text(), + testfile_contents("expected/undef.sv") + ); + } // }}} } diff --git a/sv-parser-pp/testcases/expected/undef.sv b/sv-parser-pp/testcases/expected/undef.sv new file mode 100644 index 0000000..e0e4eff --- /dev/null +++ b/sv-parser-pp/testcases/expected/undef.sv @@ -0,0 +1,20 @@ +// IEEE1800-2017 Clause 22.5.2 +// The directive `undef shall undefine the specified text macro if previously +// defined by a `define compiler directive within the compilation unit. An +// attempt to undefine a text macro that was not previously defined using a +// `define compiler directive can issue a warning. +`undef FOO +`undef FOO// Comment +`undef FOO // Comment + +`define FOO foo +// AAA +// This block SHOULD be emitted from the preprocessor. + + + +`undef FOO + +// BBB +// This block SHOULD be emitted from the preprocessor. + diff --git a/sv-parser-pp/testcases/undef.sv b/sv-parser-pp/testcases/undef.sv new file mode 100644 index 0000000..76d3731 --- /dev/null +++ b/sv-parser-pp/testcases/undef.sv @@ -0,0 +1,28 @@ +// IEEE1800-2017 Clause 22.5.2 +// The directive `undef shall undefine the specified text macro if previously +// defined by a `define compiler directive within the compilation unit. An +// attempt to undefine a text macro that was not previously defined using a +// `define compiler directive can issue a warning. +`undef FOO +`undef FOO// Comment +`undef FOO // Comment + +`define FOO foo +`ifdef FOO +// AAA +// This block SHOULD be emitted from the preprocessor. +`endif +`ifndef FOO +// AAA +// This block should NOT be emitted from the preprocessor. +`endif + +`undef FOO +`ifdef FOO +// BBB +// This block should NOT be emitted from the preprocessor. +`endif +`ifndef FOO +// BBB +// This block SHOULD be emitted from the preprocessor. +`endif