From eb18da04506b959c0251099eae83e16d22ce8bcb Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Sat, 8 Sep 2018 17:12:14 -0400 Subject: pcre2: use jit_if_available This will allow PCRE2 to fall back to non-JIT matching when running on platforms without JIT support. ref https://github.com/BurntSushi/rust-pcre2/issues/3 --- Cargo.lock | 17 ++++++++--------- Cargo.toml | 2 +- grep-pcre2/Cargo.toml | 4 ++-- grep-pcre2/src/matcher.rs | 22 ++++++++++++++++++++-- grep/Cargo.toml | 4 ++-- src/args.rs | 2 +- 6 files changed, 34 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cc5a0896..341288ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -165,13 +165,13 @@ dependencies = [ [[package]] name = "grep" -version = "0.2.2" +version = "0.2.3" dependencies = [ "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "grep-cli 0.1.1", "grep-matcher 0.1.1", - "grep-pcre2 0.1.1", + "grep-pcre2 0.1.2", "grep-printer 0.1.1", "grep-regex 0.1.1", "grep-searcher 0.1.1", @@ -204,10 +204,10 @@ dependencies = [ [[package]] name = "grep-pcre2" -version = "0.1.1" +version = "0.1.2" dependencies = [ "grep-matcher 0.1.1", - "pcre2 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pcre2 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -368,13 +368,12 @@ dependencies = [ [[package]] name = "pcre2" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "pcre2-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -482,7 +481,7 @@ name = "ripgrep" version = "0.10.0" dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", - "grep 0.2.2", + "grep 0.2.3", "ignore 0.4.4", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -736,7 +735,7 @@ dependencies = [ "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" "checksum parking_lot_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06a2b6aae052309c2fd2161ef58f5067bc17bb758377a0de9d4b279d603fdd8a" -"checksum pcre2 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0c16ec0e30c17f938a2da8ff970ad9a4100166d0538898dcc035b55c393cab54" +"checksum pcre2 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae0a2682105ec5ca0ee5910bbc7e926386d348a05166348f74007942983c319" "checksum pcre2-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a9027f9474e4e13d3b965538aafcaebe48c803488ad76b3c97ef061a8324695f" "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" "checksum proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)" = "afa4d377067cc02eb5e0b491d3f7cfbe145ad4da778535bfb13c444413dd35b9" diff --git a/Cargo.toml b/Cargo.toml index a7ccd5bd..bf11a129 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,7 +45,7 @@ members = [ ] [dependencies] -grep = { version = "0.2.2", path = "grep" } +grep = { version = "0.2.3", path = "grep" } ignore = { version = "0.4.4", path = "ignore" } lazy_static = "1.1.0" log = "0.4.5" diff --git a/grep-pcre2/Cargo.toml b/grep-pcre2/Cargo.toml index 1ec12302..0635a525 100644 --- a/grep-pcre2/Cargo.toml +++ b/grep-pcre2/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "grep-pcre2" -version = "0.1.1" #:version +version = "0.1.2" #:version authors = ["Andrew Gallant "] description = """ Use PCRE2 with the 'grep' crate. @@ -14,4 +14,4 @@ license = "Unlicense/MIT" [dependencies] grep-matcher = { version = "0.1.1", path = "../grep-matcher" } -pcre2 = "0.1.0" +pcre2 = "0.1.1" diff --git a/grep-pcre2/src/matcher.rs b/grep-pcre2/src/matcher.rs index e9c51be2..105448fe 100644 --- a/grep-pcre2/src/matcher.rs +++ b/grep-pcre2/src/matcher.rs @@ -199,16 +199,34 @@ impl RegexMatcherBuilder { self } - /// Enable PCRE2's JIT. + /// Enable PCRE2's JIT and return an error if it's not available. /// /// This generally speeds up matching quite a bit. The downside is that it /// can increase the time it takes to compile a pattern. /// - /// This is disabled by default. + /// If the JIT isn't available or if JIT compilation returns an error, then + /// regex compilation will fail with the corresponding error. + /// + /// This is disabled by default, and always overrides `jit_if_available`. pub fn jit(&mut self, yes: bool) -> &mut RegexMatcherBuilder { self.builder.jit(yes); self } + + /// Enable PCRE2's JIT if it's available. + /// + /// This generally speeds up matching quite a bit. The downside is that it + /// can increase the time it takes to compile a pattern. + /// + /// If the JIT isn't available or if JIT compilation returns an error, + /// then a debug message with the error will be emitted and the regex will + /// otherwise silently fall back to non-JIT matching. + /// + /// This is disabled by default, and always overrides `jit`. + pub fn jit_if_available(&mut self, yes: bool) -> &mut RegexMatcherBuilder { + self.builder.jit_if_available(yes); + self + } } /// An implementation of the `Matcher` trait using PCRE2. diff --git a/grep/Cargo.toml b/grep/Cargo.toml index 8faf7082..1ddcd4a2 100644 --- a/grep/Cargo.toml +++ b/grep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "grep" -version = "0.2.2" #:version +version = "0.2.3" #:version authors = ["Andrew Gallant "] description = """ Fast line oriented regex searching as a library. @@ -15,7 +15,7 @@ license = "Unlicense/MIT" [dependencies] grep-cli = { version = "0.1.1", path = "../grep-cli" } grep-matcher = { version = "0.1.1", path = "../grep-matcher" } -grep-pcre2 = { version = "0.1.1", path = "../grep-pcre2", optional = true } +grep-pcre2 = { version = "0.1.2", path = "../grep-pcre2", optional = true } grep-printer = { version = "0.1.1", path = "../grep-printer" } grep-regex = { version = "0.1.1", path = "../grep-regex" } grep-searcher = { version = "0.1.1", path = "../grep-searcher" } diff --git a/src/args.rs b/src/args.rs index 1a38d3ef..7aed9144 100644 --- a/src/args.rs +++ b/src/args.rs @@ -633,7 +633,7 @@ impl ArgMatches { // For whatever reason, the JIT craps out during regex compilation with // a "no more memory" error on 32 bit systems. So don't use it there. if !cfg!(target_pointer_width = "32") { - builder.jit(true); + builder.jit_if_available(true); } if self.pcre2_unicode() { builder.utf(true).ucp(true); -- cgit v1.2.3