1
0
mirror of https://github.com/BurntSushi/ripgrep.git synced 2024-12-12 19:18:24 +02:00

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
This commit is contained in:
Andrew Gallant 2018-09-08 17:12:14 -04:00
parent 0f7494216f
commit eb18da0450
No known key found for this signature in database
GPG Key ID: B2E3A4923F8B0D44
6 changed files with 34 additions and 17 deletions

17
Cargo.lock generated
View File

@ -165,13 +165,13 @@ dependencies = [
[[package]] [[package]]
name = "grep" name = "grep"
version = "0.2.2" version = "0.2.3"
dependencies = [ dependencies = [
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "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)", "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"grep-cli 0.1.1", "grep-cli 0.1.1",
"grep-matcher 0.1.1", "grep-matcher 0.1.1",
"grep-pcre2 0.1.1", "grep-pcre2 0.1.2",
"grep-printer 0.1.1", "grep-printer 0.1.1",
"grep-regex 0.1.1", "grep-regex 0.1.1",
"grep-searcher 0.1.1", "grep-searcher 0.1.1",
@ -204,10 +204,10 @@ dependencies = [
[[package]] [[package]]
name = "grep-pcre2" name = "grep-pcre2"
version = "0.1.1" version = "0.1.2"
dependencies = [ dependencies = [
"grep-matcher 0.1.1", "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]] [[package]]
@ -368,13 +368,12 @@ dependencies = [
[[package]] [[package]]
name = "pcre2" name = "pcre2"
version = "0.1.0" version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ 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)", "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)", "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)", "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
@ -482,7 +481,7 @@ name = "ripgrep"
version = "0.10.0" version = "0.10.0"
dependencies = [ dependencies = [
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "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", "ignore 0.4.4",
"lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "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)", "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 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 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 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 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 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" "checksum proc-macro2 0.4.18 (registry+https://github.com/rust-lang/crates.io-index)" = "afa4d377067cc02eb5e0b491d3f7cfbe145ad4da778535bfb13c444413dd35b9"

View File

@ -45,7 +45,7 @@ members = [
] ]
[dependencies] [dependencies]
grep = { version = "0.2.2", path = "grep" } grep = { version = "0.2.3", path = "grep" }
ignore = { version = "0.4.4", path = "ignore" } ignore = { version = "0.4.4", path = "ignore" }
lazy_static = "1.1.0" lazy_static = "1.1.0"
log = "0.4.5" log = "0.4.5"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "grep-pcre2" name = "grep-pcre2"
version = "0.1.1" #:version version = "0.1.2" #:version
authors = ["Andrew Gallant <jamslam@gmail.com>"] authors = ["Andrew Gallant <jamslam@gmail.com>"]
description = """ description = """
Use PCRE2 with the 'grep' crate. Use PCRE2 with the 'grep' crate.
@ -14,4 +14,4 @@ license = "Unlicense/MIT"
[dependencies] [dependencies]
grep-matcher = { version = "0.1.1", path = "../grep-matcher" } grep-matcher = { version = "0.1.1", path = "../grep-matcher" }
pcre2 = "0.1.0" pcre2 = "0.1.1"

View File

@ -199,16 +199,34 @@ impl RegexMatcherBuilder {
self 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 /// This generally speeds up matching quite a bit. The downside is that it
/// can increase the time it takes to compile a pattern. /// 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 { pub fn jit(&mut self, yes: bool) -> &mut RegexMatcherBuilder {
self.builder.jit(yes); self.builder.jit(yes);
self 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. /// An implementation of the `Matcher` trait using PCRE2.

View File

@ -1,6 +1,6 @@
[package] [package]
name = "grep" name = "grep"
version = "0.2.2" #:version version = "0.2.3" #:version
authors = ["Andrew Gallant <jamslam@gmail.com>"] authors = ["Andrew Gallant <jamslam@gmail.com>"]
description = """ description = """
Fast line oriented regex searching as a library. Fast line oriented regex searching as a library.
@ -15,7 +15,7 @@ license = "Unlicense/MIT"
[dependencies] [dependencies]
grep-cli = { version = "0.1.1", path = "../grep-cli" } grep-cli = { version = "0.1.1", path = "../grep-cli" }
grep-matcher = { version = "0.1.1", path = "../grep-matcher" } 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-printer = { version = "0.1.1", path = "../grep-printer" }
grep-regex = { version = "0.1.1", path = "../grep-regex" } grep-regex = { version = "0.1.1", path = "../grep-regex" }
grep-searcher = { version = "0.1.1", path = "../grep-searcher" } grep-searcher = { version = "0.1.1", path = "../grep-searcher" }

View File

@ -633,7 +633,7 @@ impl ArgMatches {
// For whatever reason, the JIT craps out during regex compilation with // 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. // a "no more memory" error on 32 bit systems. So don't use it there.
if !cfg!(target_pointer_width = "32") { if !cfg!(target_pointer_width = "32") {
builder.jit(true); builder.jit_if_available(true);
} }
if self.pcre2_unicode() { if self.pcre2_unicode() {
builder.utf(true).ucp(true); builder.utf(true).ucp(true);