diff --git a/sv-parser-error/src/lib.rs b/sv-parser-error/src/lib.rs index d6f3ccf..f6a7a1a 100644 --- a/sv-parser-error/src/lib.rs +++ b/sv-parser-error/src/lib.rs @@ -34,7 +34,7 @@ pub enum Error { DefineNotFound(String), #[error("Define must have argument")] - DefineNoArgs, + DefineNoArgs(String), // String is the macro identifier. #[error("Exceed recursive limit")] ExceedRecursiveLimit, diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index 58b7d34..f512b47 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -942,7 +942,7 @@ fn resolve_text_macro_usage, U: AsRef>( let mut arg_map = HashMap::new(); if !define.arguments.is_empty() && no_args { - return Err(Error::DefineNoArgs); + return Err(Error::DefineNoArgs(define.identifier.clone())); } for (i, (arg, default)) in define.arguments.iter().enumerate() { @@ -1065,6 +1065,22 @@ mod tests { ); } // }}} + #[test] + #[allow(non_snake_case)] + fn err_DefineNoArgs() { // {{{ + match preprocess_usualargs("err_DefineNoArgs.sv").unwrap_err() { + Error::DefineNoArgs(identifier) => { + assert_eq!( + identifier, + String::from("A") + ); + } + _ => { + panic!("Error::DefineNoArgs not raised."); + } + }; + } // }}} + #[test] #[allow(non_snake_case)] fn IEEE18002017_keywords_if2_13642005() { // {{{ diff --git a/sv-parser-pp/testcases/err_DefineNoArgs.sv b/sv-parser-pp/testcases/err_DefineNoArgs.sv new file mode 100644 index 0000000..e6ec824 --- /dev/null +++ b/sv-parser-pp/testcases/err_DefineNoArgs.sv @@ -0,0 +1,4 @@ + +`define A(a) +`A // Macro called without required argument. +