From c316c25713b0370778bcd8624ad683bb29b7d6e9 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Thu, 27 Sep 2018 22:42:11 -0500 Subject: [PATCH] Begin the migration from nom4 --- Cargo.lock | 37 ++++++++++++++++++++++++++----------- Cargo.toml | 4 ++-- src/parse/mod.rs | 40 ++++++++++++++++++++++------------------ 3 files changed, 50 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0b36db..0b8fbc8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,11 @@ name = "bitflags" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bytecount" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "cc" version = "1.0.22" @@ -133,27 +138,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" -version = "1.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nom" -version = "3.2.1" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nom_locate" -version = "0.1.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytecount 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -251,8 +259,8 @@ dependencies = [ "bencher 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.26.2 (registry+https://github.com/rust-lang/crates.io-index)", "cpuprofiler 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "nom_locate 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "nom_locate 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "simple-error 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -268,6 +276,11 @@ name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "winapi" version = "0.2.8" @@ -312,6 +325,7 @@ dependencies = [ "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" "checksum bencher 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7dfdb4953a096c551ce9ace855a604d702e6e62d77fac690575ae347571717f5" "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" +"checksum bytecount 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f861d9ce359f56dbcb6e0c2a1cb84e52ad732cadb57b806adeb3c7668caccbd8" "checksum cc 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)" = "4a6007c146fdd28d4512a794b07ffe9d8e89e6bf86e2e0c4ddff2e1fb54a0007" "checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3" "checksum clap 2.26.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3451e409013178663435d6f15fdb212f14ee4424a3d74f979d081d0a66b6f1f2" @@ -324,9 +338,9 @@ dependencies = [ "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d" "checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e" -"checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" -"checksum nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b" -"checksum nom_locate 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "49b1c61eff39ab6b91ccedfc62aff196eae066d88355b4fe3e4100c23168f0df" +"checksum memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4b3629fe9fdbff6daa6c33b90f7c08355c1aca05a3d01fa8063b822fcf185f3b" +"checksum nom 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "898696750eb5c3ce5eb5afbfbe46e7f7c4e1936e19d3e97be4b7937da7b6d114" +"checksum nom_locate 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6a47c112b3861d81f7fbf73892b9271af933af32bd5dee6889aa3c3fa9caed7e" "checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" @@ -341,6 +355,7 @@ dependencies = [ "checksum textwrap 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df8e08afc40ae3459e4838f303e465aa50d823df8d7f83ca88108f6d3afe7edd" "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/Cargo.toml b/Cargo.toml index beb52f0..beed0c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,10 +10,10 @@ keywords = ["compiler", "config"] license = "Apache-2.0" [dependencies.nom] -version = "^3.2" +version = "^4.0" [dependencies] -nom_locate = "^0.1.1" +nom_locate = "^0.3.1" clap = "~2.26.0" serde_json = "~1.0.9" simple-error = "0.1" diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 1bd0c47..8b33a85 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -43,13 +43,18 @@ macro_rules! wrap_err { ($i:expr, $submac:ident!( $($args:tt)* ), $msg:expr) => {{ let _i = $i.clone(); match $submac!(_i, $($args)*) { - IResult::Done(rest, mac) => IResult::Done(rest, mac), - IResult::Incomplete(i) => IResult::Incomplete(i), - IResult::Error(nom::ErrorKind::Custom(cause)) => { - let wrapper = error::Error::new_with_cause($msg, error::ErrorType::ParseError, cause); - IResult::Error(nom::ErrorKind::Custom(wrapper)) + Ok((rest, mac)) => Ok((rest, mac)), + Err(e) => { + let context = match e { + nom::Err::Incomplete(i) => nom::Err::Incomplete(i), + nom::Err::Error(nom::Context::Code((i, e))) => { + let wrapper = error::Error::new_with_cause($msg, error::ErrorType::ParseError, e); + nom::Err::Error(nom::Context::Code((i, wrapper))) + } + nom::Err::Failure(e) => nom::Err::Error(e), + }; + Err(context) } - IResult::Error(e) => IResult::Error(e), } }}; } @@ -61,7 +66,7 @@ macro_rules! trace_nom { if ENABLE_TRACE { eprintln!("Entering Rule: {:?} {:?}", stringify!($rule), $i); } - let result = $rule($i, $($args)* ); + let result = $rule($i, $($args)* ); if ENABLE_TRACE { eprintln!("Exiting Rule: {:?} with {:?}", stringify!($rule), result); } @@ -522,8 +527,7 @@ fn tuple_to_macro(mut t: (Position, Vec, Value)) -> ParseResult, fn unprefixed_expression(input: TokenIter) -> NomResult { let _input = input.clone(); - let attempt = alt!(input, - trace_nom!(call_expression) | - trace_nom!(copy_expression) | - trace_nom!(format_expression)); - match attempt { - IResult::Incomplete(i) => IResult::Incomplete(i), - IResult::Done(rest, expr) => IResult::Done(rest, expr), - IResult::Error(_) => trace_nom!(_input, simple_expression), - } + let attempt = alt!( + input, + trace_nom!(call_expression) | trace_nom!(copy_expression) | trace_nom!(format_expression) + ); + match attempt { + IResult::Incomplete(i) => IResult::Incomplete(i), + IResult::Done(rest, expr) => IResult::Done(rest, expr), + IResult::Error(_) => trace_nom!(_input, simple_expression), + } } named!(non_op_expression,