From d18209ce87b43b6da4b9f3764996ddc4eadce2c7 Mon Sep 17 00:00:00 2001 From: dalance Date: Wed, 11 Nov 2020 14:29:42 +0900 Subject: [PATCH] Add define option to parse_sv --- CHANGELOG.md | 1 + sv-parser/Cargo.toml | 1 + sv-parser/examples/parse_sv.rs | 20 +++++++++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b07b398..6fd8f10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [Unreleased](https://github.com/dalance/sv-parser/compare/v0.8.3...Unreleased) - ReleaseDate +* [Added] define option to parse_sv * [Added] incomplete option [#19](https://github.com/dalance/sv-parser/issues/19) * [Changed] keep text_macro_definition after preprocess [#19](https://github.com/dalance/sv-parser/issues/19) diff --git a/sv-parser/Cargo.toml b/sv-parser/Cargo.toml index 870f552..12ce927 100644 --- a/sv-parser/Cargo.toml +++ b/sv-parser/Cargo.toml @@ -33,6 +33,7 @@ sv-parser-syntaxtree = {version = "^0.8.3", path = "../sv-parser-syntaxtree"} [dev-dependencies] structopt = "0.3.2" criterion = "0.3" +enquote = "1.0" [[bench]] name = "parse_sv_criterion" diff --git a/sv-parser/examples/parse_sv.rs b/sv-parser/examples/parse_sv.rs index 943f6fe..efe5bd1 100644 --- a/sv-parser/examples/parse_sv.rs +++ b/sv-parser/examples/parse_sv.rs @@ -5,7 +5,7 @@ use std::io::Read; use std::path::PathBuf; use std::{cmp, process}; use structopt::StructOpt; -use sv_parser::parse_sv; +use sv_parser::{parse_sv, Define, DefineText}; use sv_parser_error::Error; use sv_parser_pp::preprocess::preprocess; @@ -29,6 +29,10 @@ struct Opt { #[structopt(long = "incomplete")] pub incomplete: bool, + /// Define + #[structopt(short = "d", long = "define", multiple = true, number_of_values = 1)] + pub defines: Vec, + /// Quiet #[structopt(short = "q", long = "quiet")] pub quiet: bool, @@ -36,7 +40,21 @@ struct Opt { fn main() { let opt = Opt::from_args(); + let mut defines = HashMap::new(); + for define in &opt.defines { + let mut define = define.splitn(2, '='); + let ident = String::from(define.next().unwrap()); + let text = if let Some(x) = define.next() { + let x = enquote::unescape(x, None).unwrap(); + Some(DefineText::new(x, None)) + } else { + None + }; + let define = Define::new(ident.clone(), vec![], text); + defines.insert(ident, Some(define)); + } + let mut exit = 0; for path in &opt.files { if opt.pp {