diff options
| author | Ralf Jung <post@ralfj.de> | 2020-09-20 12:08:20 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-20 12:08:20 +0200 |
| commit | 3268e33199c98e5bfb035ea70130ea36af00e714 (patch) | |
| tree | d9ac2bb360e40952559311cf331b286750c1ea03 | |
| parent | c12feb35dbe5793d96a47286f93b59ae257d3418 (diff) | |
| parent | f4a7149f499a4b91d296678002f0bce4ded85038 (diff) | |
| download | rust-3268e33199c98e5bfb035ea70130ea36af00e714.tar.gz rust-3268e33199c98e5bfb035ea70130ea36af00e714.zip | |
Rollup merge of #76818 - hbina:dont_compile_regex_all_the_time, r=ecstatic-morse
Don't compile regex at every function call. Use `SyncOnceCell` to only compile it once. I believe this still adds some kind of locking mechanism? Related issue: https://github.com/rust-lang/rust/issues/76817
| -rw-r--r-- | compiler/rustc_mir/src/dataflow/framework/graphviz.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_mir/src/lib.rs | 1 |
2 files changed, 10 insertions, 1 deletions
diff --git a/compiler/rustc_mir/src/dataflow/framework/graphviz.rs b/compiler/rustc_mir/src/dataflow/framework/graphviz.rs index 94151fbd090..5d4c4251961 100644 --- a/compiler/rustc_mir/src/dataflow/framework/graphviz.rs +++ b/compiler/rustc_mir/src/dataflow/framework/graphviz.rs @@ -1,6 +1,7 @@ //! A helpful diagram for debugging dataflow problems. use std::borrow::Cow; +use std::lazy::SyncOnceCell; use std::{io, ops, str}; use regex::Regex; @@ -570,6 +571,13 @@ where } } +macro_rules! regex { + ($re:literal $(,)?) => {{ + static RE: SyncOnceCell<regex::Regex> = SyncOnceCell::new(); + RE.get_or_init(|| Regex::new($re).unwrap()) + }}; +} + fn diff_pretty<T, C>(new: T, old: T, ctxt: &C) -> String where T: DebugWithContext<C>, @@ -578,7 +586,7 @@ where return String::new(); } - let re = Regex::new("\t?\u{001f}([+-])").unwrap(); + let re = regex!("\t?\u{001f}([+-])"); let raw_diff = format!("{:#?}", DebugDiffWithAdapter { new, old, ctxt }); diff --git a/compiler/rustc_mir/src/lib.rs b/compiler/rustc_mir/src/lib.rs index 251037792c9..aeb7fcca955 100644 --- a/compiler/rustc_mir/src/lib.rs +++ b/compiler/rustc_mir/src/lib.rs @@ -28,6 +28,7 @@ Rust MIR: a lowered representation of Rust. #![feature(trait_alias)] #![feature(option_expect_none)] #![feature(or_patterns)] +#![feature(once_cell)] #![recursion_limit = "256"] #[macro_use] |
