ppTests Avoid removal of undef and
undefineall directives.
- Similarly to how `define is left in-place, `undef and `undefine are also left in-place. - Corresponding fixes to macro_LINE and macro_FILE. - These directives were not in any testcases before this branch.
This commit is contained in:
parent
543915011b
commit
ab4845a964
@ -379,18 +379,28 @@ pub fn preprocess_str<T: AsRef<Path>, U: AsRef<Path>, V: BuildHasher>(
|
||||
skip_whitespace = false;
|
||||
}
|
||||
NodeEvent::Enter(RefNode::UndefineCompilerDirective(x)) => {
|
||||
skip_nodes.push(x.into());
|
||||
skip = true;
|
||||
|
||||
let (_, _, ref name) = x.nodes;
|
||||
let id = identifier((&name.nodes.0).into(), &s).unwrap();
|
||||
defines.remove(&id);
|
||||
|
||||
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)));
|
||||
skip_whitespace = true;
|
||||
}
|
||||
NodeEvent::Leave(RefNode::UndefineCompilerDirective(_)) => {
|
||||
skip_whitespace = false;
|
||||
}
|
||||
NodeEvent::Enter(RefNode::UndefineallCompilerDirective(x)) => {
|
||||
skip_nodes.push(x.into());
|
||||
skip = true;
|
||||
|
||||
defines.clear();
|
||||
|
||||
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)));
|
||||
skip_whitespace = true;
|
||||
}
|
||||
NodeEvent::Leave(RefNode::UndefineallCompilerDirective(_)) => {
|
||||
skip_whitespace = false;
|
||||
}
|
||||
NodeEvent::Enter(RefNode::IfdefDirective(x)) => {
|
||||
let (_, ref keyword, ref ifid, ref ifbody, ref elsif, ref elsebody, _, _) = x.nodes;
|
||||
|
@ -10,4 +10,6 @@
|
||||
`define __FILE__ "FOO"
|
||||
|
||||
// The following undef should have no effect.
|
||||
`undef __FILE__
|
||||
|
||||
// NOTE: Comparison against expected value are destined to fail in testcase.
|
||||
|
@ -10,6 +10,8 @@
|
||||
`define __LINE__ -2
|
||||
|
||||
// The following undef should have no effect.
|
||||
`undef __LINE__
|
||||
|
||||
module M;
|
||||
initial
|
||||
if (26 == 28) // Should be "26 == 28".
|
||||
|
Loading…
x
Reference in New Issue
Block a user