From 07461243a57183fc12641a553e48add5b796cfd9 Mon Sep 17 00:00:00 2001 From: dalance Date: Tue, 5 Nov 2019 20:40:47 +0900 Subject: [PATCH] Add empty define support --- CHANGELOG.md | 1 + sv-parser-error/src/lib.rs | 2 -- sv-parser-pp/src/preprocess.rs | 32 +++++++++++++++++++------------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5666057..0e513cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [Unreleased](https://github.com/dalance/sv-parser/compare/v0.3.4...Unreleased) - ReleaseDate * [Added] LF/CR+LF support +* [Added] empty define support ## [v0.3.4](https://github.com/dalance/sv-parser/compare/v0.3.3...v0.3.4) - 2019-11-05 diff --git a/sv-parser-error/src/lib.rs b/sv-parser-error/src/lib.rs index b1bdfb8..af3288e 100644 --- a/sv-parser-error/src/lib.rs +++ b/sv-parser-error/src/lib.rs @@ -20,8 +20,6 @@ pub enum ErrorKind { Preprocess, #[fail(display = "Define argument not found: {}", _0)] DefineArgNotFound(String), - #[fail(display = "Define text not found: {}", _0)] - DefineTextNotFound(String), #[fail(display = "Define not found: {}", _0)] DefineNotFound(String), } diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index a821bd3..e3a47ae 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -296,10 +296,14 @@ fn preprocess_str, U: AsRef>( IncludeCompilerDirective::TextMacroUsage(x) => { let (_, _, ref x) = x.nodes; skip_nodes.push(x.into()); - let (p, _, _, _) = - resolve_text_macro_usage(x, s, path.as_ref(), &defines, include_paths)?; - let p = p.trim().trim_matches('"'); - PathBuf::from(p) + if let Some((p, _, _, _)) = + resolve_text_macro_usage(x, s, path.as_ref(), &defines, include_paths)? + { + let p = p.trim().trim_matches('"'); + PathBuf::from(p) + } else { + PathBuf::from("") + } } }; if path.is_relative() { @@ -319,10 +323,12 @@ fn preprocess_str, U: AsRef>( ret.merge(include); } NodeEvent::Enter(RefNode::TextMacroUsage(x)) if !skip => { - let (text, path, range, new_defines) = - resolve_text_macro_usage(x, s, path.as_ref(), &defines, include_paths)?; - ret.push(&text, path, range); - defines = new_defines; + if let Some((text, path, range, new_defines)) = + resolve_text_macro_usage(x, s, path.as_ref(), &defines, include_paths)? + { + ret.push(&text, path, range); + defines = new_defines; + } } _ => (), } @@ -395,7 +401,7 @@ fn resolve_text_macro_usage, U: AsRef>( path: T, defines: &Defines, include_paths: &[U], -) -> Result<(String, PathBuf, Range, Defines), Error> { +) -> Result, Error> { let (_, ref name, ref args) = x.nodes; let id = identifier((&name.nodes.0).into(), &s).unwrap(); @@ -448,17 +454,17 @@ fn resolve_text_macro_usage, U: AsRef>( let (replaced, new_defines) = preprocess_str(&replaced, path.as_ref(), &defines, include_paths)?; - Ok(( + Ok(Some(( String::from(replaced.text()), define.path.clone(), *range, new_defines, - )) + ))) } else { - Err(ErrorKind::DefineTextNotFound(String::from(id)).into()) + Ok(None) } } else if let Some(_) = define { - Err(ErrorKind::DefineTextNotFound(String::from(id)).into()) + Ok(None) } else { Err(ErrorKind::DefineNotFound(String::from(id)).into()) }