Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions sv-parser-pp/src/preprocess.rs
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ pub fn preprocess_str<T: AsRef<Path>, U: AsRef<Path>, V: BuildHasher>(
let elsifid = identifier(elsifid.into(), &s).unwrap();
if hit {
skip_nodes.push(elsifbody.into());
} else if defines.contains_key(&elsifid) || is_predefined_text_macro(&ifid) {
} else if defines.contains_key(&elsifid) || is_predefined_text_macro(&elsifid) {
hit = true;
} else {
skip_nodes.push(elsifbody.into());
Expand Down Expand Up @@ -535,7 +535,7 @@ pub fn preprocess_str<T: AsRef<Path>, U: AsRef<Path>, V: BuildHasher>(
let elsifid = identifier(elsifid.into(), &s).unwrap();
if hit {
skip_nodes.push(elsifbody.into());
} else if defines.contains_key(&elsifid) || is_predefined_text_macro(&ifid) {
} else if defines.contains_key(&elsifid) || is_predefined_text_macro(&elsifid) {
hit = true;
} else {
skip_nodes.push(elsifbody.into());
Expand Down
1 change: 0 additions & 1 deletion sv-parser-pp/testcases/expected/macro_FILE.sv
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
// This block SHOULD be emitted from the preprocessor.


// Emitted instead.


// The following define should have no effect.
Expand Down
1 change: 0 additions & 1 deletion sv-parser-pp/testcases/expected/macro_LINE.sv
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
// This block SHOULD be emitted from the preprocessor.


// Emitted instead.


// The following define should have no effect.
Expand Down
2 changes: 1 addition & 1 deletion sv-parser-pp/testcases/macro_FILE.sv
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// preprocessor parsing stage without error.
`define __FILE__ "(null)"
`elsif UNDEFINED
// Emitted instead.
// NOT emitted: UNDEFINED is not defined.
`endif

// The following define should have no effect.
Expand Down
2 changes: 1 addition & 1 deletion sv-parser-pp/testcases/macro_LINE.sv
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// preprocessor parsing stage without error.
`define __LINE__ -1
`elsif UNDEFINED
// Emitted instead.
// NOT emitted: UNDEFINED is not defined.
`endif

// The following define should have no effect.
Expand Down
44 changes: 44 additions & 0 deletions sv-parser/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,50 @@ endmodule"##;
assert!(ret.is_ok());
}

#[test]
fn test_elsif_predefined_macro() {
for directive in &["ifdef UNDEFINED", "ifndef __FILE__", "ifndef __LINE__"] {
for predefined in &["__FILE__", "__LINE__"] {
let src = format!(
"`{}\nmodule first; endmodule\n`elsif {}\nmodule selected; endmodule\n\
`else\nmodule fallback; endmodule\n`endif\n",
directive, predefined,
);
let (tree, _) =
parse_sv_str(&src, "", &HashMap::new(), &[""], false, false).unwrap();
let modules: Vec<_> = (&tree)
.into_iter()
.filter_map(|node| match node {
RefNode::ModuleIdentifier(id) => tree.get_str_trim(id),
_ => None,
})
.collect();
assert_eq!(modules, ["selected"], "{} / {}", directive, predefined);
}
}
}

#[test]
fn test_elsif_undefined_after_predefined() {
for predefined in &["__FILE__", "__LINE__"] {
let src = format!(
"`ifndef {}\nmodule first; endmodule\n`elsif UNDEFINED\nmodule second; endmodule\n\
`else\nmodule fallback; endmodule\n`endif\n",
predefined,
);
let (tree, _) =
parse_sv_str(&src, "", &HashMap::new(), &[""], false, false).unwrap();
let modules: Vec<_> = (&tree)
.into_iter()
.filter_map(|node| match node {
RefNode::ModuleIdentifier(id) => tree.get_str_trim(id),
_ => None,
})
.collect();
assert_eq!(modules, ["fallback"], "{}", predefined);
}
}

#[test]
fn test_type_equality() {
let src = r##"module top #( parameter type T = type(logic[11:0]) )
Expand Down