diff --git a/CHANGELOG.md b/CHANGELOG.md index 407372c..f2ab4a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased](https://github.com/dalance/sv-parser/compare/v0.10.8...Unreleased) - ReleaseDate +* [Changed] keep directives after preprocess + ## [v0.10.8](https://github.com/dalance/sv-parser/compare/v0.10.7...v0.10.8) - 2021-01-29 * [Fixed] include with comment error diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index c18da9b..a07d1e1 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -256,25 +256,6 @@ pub fn preprocess_str, U: AsRef, V: BuildHasher>( _ => (), } match n { - NodeEvent::Enter(RefNode::ResetallCompilerDirective(x)) => { - 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::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); - } - NodeEvent::Enter(RefNode::UndefineallCompilerDirective(x)) => { - skip_nodes.push(x.into()); - skip = true; - - defines.clear(); - } NodeEvent::Enter(RefNode::SourceDescriptionNotDirective(x)) => { let locate: Locate = x.try_into().unwrap(); let range = Range::new(locate.offset, locate.offset + locate.len); @@ -292,6 +273,51 @@ pub fn preprocess_str, U: AsRef, V: BuildHasher>( let range = Range::new(locate.offset, locate.offset + locate.len); ret.push(locate.str(&s), Some((path.as_ref(), range))); } + NodeEvent::Enter(RefNode::ResetallCompilerDirective(x)) => { + 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::TimescaleCompilerDirective(x)) => { + 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::DefaultNettypeCompilerDirective(x)) => { + 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::UnconnectedDriveCompilerDirective(x)) => { + 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::NounconnectedDriveCompilerDirective(x)) => { + 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::CelldefineDriveCompilerDirective(x)) => { + 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::EndcelldefineDriveCompilerDirective(x)) => { + 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::Pragma(x)) => { + 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::LineCompilerDirective(x)) => { + 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::KeywordsDirective(x)) => { let locate: Locate = x.try_into().unwrap(); let range = Range::new(locate.offset, locate.offset + locate.len); @@ -302,6 +328,20 @@ pub fn preprocess_str, U: AsRef, V: BuildHasher>( let range = Range::new(locate.offset, locate.offset + locate.len); ret.push(locate.str(&s), Some((path.as_ref(), range))); } + 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); + } + NodeEvent::Enter(RefNode::UndefineallCompilerDirective(x)) => { + skip_nodes.push(x.into()); + skip = true; + + defines.clear(); + } NodeEvent::Enter(RefNode::IfdefDirective(x)) => { let (_, ref keyword, ref ifid, ref ifbody, ref elsif, ref elsebody, _, _) = x.nodes; skip_nodes.push(keyword.into());