diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-03-02 13:20:47 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2021-03-02 13:20:47 +0000 |
commit | 91bf5fa827b2c4ef74cb68c172c79127115e394f (patch) | |
tree | ebbd7ebb043fe9a8bee8ac2419a461c3387b1888 /crates/mbe/src/lib.rs | |
parent | 8eee9149e87ea58d4191d04ebe6faf57ac8485a3 (diff) | |
parent | cff2201c30bda7b346e3b47875d95a2cf9cafaa3 (diff) |
Merge #7513
7513: NFA parser for mbe matcher r=matklad a=edwin0cheng
Almost straight porting from rustc one, but a little bit slow :(
```
rust-analyzer analysis-stats -q .
```
From:
```log
Database loaded: 636.11ms, 277minstr
crates: 36, mods: 594, decls: 11527, fns: 9017
Item Collection: 10.99s, 60ginstr
exprs: 249618, ??ty: 2699 (1%), ?ty: 2101 (0%), !ty: 932
Inference: 28.94s, 123ginstr
Total: 39.93s, 184ginstr
```
To:
```log
Database loaded: 630.90ms, 277minstr
crates: 36, mods: 594, decls: 11528, fns: 9018
Item Collection: 13.70s, 77ginstr
exprs: 249482, ??ty: 2699 (1%), ?ty: 2101 (0%), !ty: 932
Inference: 30.27s, 133ginstr
Total: 43.97s, 211ginstr
```
Fixes #4777
Co-authored-by: Edwin Cheng <[email protected]>
Diffstat (limited to 'crates/mbe/src/lib.rs')
-rw-r--r-- | crates/mbe/src/lib.rs | 11 |
1 files changed, 1 insertions, 10 deletions
diff --git a/crates/mbe/src/lib.rs b/crates/mbe/src/lib.rs index 4c298f85f..f3d2da55a 100644 --- a/crates/mbe/src/lib.rs +++ b/crates/mbe/src/lib.rs | |||
@@ -21,7 +21,7 @@ use test_utils::mark; | |||
21 | pub use tt::{Delimiter, DelimiterKind, Punct}; | 21 | pub use tt::{Delimiter, DelimiterKind, Punct}; |
22 | 22 | ||
23 | use crate::{ | 23 | use crate::{ |
24 | parser::{parse_pattern, parse_template, Op}, | 24 | parser::{parse_pattern, parse_template, MetaTemplate, Op}, |
25 | tt_iter::TtIter, | 25 | tt_iter::TtIter, |
26 | }; | 26 | }; |
27 | 27 | ||
@@ -94,15 +94,6 @@ struct Rule { | |||
94 | rhs: MetaTemplate, | 94 | rhs: MetaTemplate, |
95 | } | 95 | } |
96 | 96 | ||
97 | #[derive(Clone, Debug, PartialEq, Eq)] | ||
98 | struct MetaTemplate(Vec<Op>); | ||
99 | |||
100 | impl<'a> MetaTemplate { | ||
101 | fn iter(&self) -> impl Iterator<Item = &Op> { | ||
102 | self.0.iter() | ||
103 | } | ||
104 | } | ||
105 | |||
106 | #[derive(Clone, Copy, Debug, PartialEq, Eq)] | 97 | #[derive(Clone, Copy, Debug, PartialEq, Eq)] |
107 | struct Shift(u32); | 98 | struct Shift(u32); |
108 | 99 | ||