Skip to content

Commit 77bf761

Browse files
committed
internal: move code to where it's used and reduce visibility
1 parent e504f8a commit 77bf761

File tree

2 files changed

+73
-75
lines changed

2 files changed

+73
-75
lines changed

crates/mbe/src/expander/matcher.rs

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ use std::rc::Rc;
6363

6464
use crate::{
6565
expander::{Binding, Bindings, Fragment},
66-
parser::{Op, OpDelimited, OpDelimitedIter, RepeatKind, Separator},
66+
parser::{Op, RepeatKind, Separator},
6767
tt_iter::TtIter,
6868
ExpandError, MetaTemplate,
6969
};
@@ -750,6 +750,64 @@ fn collect_vars(buf: &mut Vec<SmolStr>, pattern: &MetaTemplate) {
750750
}
751751
}
752752

753+
impl MetaTemplate {
754+
fn iter_delimited<'a>(&'a self, delimited: Option<&'a tt::Delimiter>) -> OpDelimitedIter<'a> {
755+
OpDelimitedIter { inner: &self.0, idx: 0, delimited }
756+
}
757+
}
758+
759+
#[derive(Debug, Clone, Copy)]
760+
enum OpDelimited<'a> {
761+
Op(&'a Op),
762+
Open,
763+
Close,
764+
}
765+
766+
#[derive(Debug, Clone, Copy)]
767+
struct OpDelimitedIter<'a> {
768+
inner: &'a Vec<Op>,
769+
delimited: Option<&'a tt::Delimiter>,
770+
idx: usize,
771+
}
772+
773+
impl<'a> OpDelimitedIter<'a> {
774+
fn is_eof(&self) -> bool {
775+
let len = self.inner.len() + if self.delimited.is_some() { 2 } else { 0 };
776+
self.idx >= len
777+
}
778+
779+
fn peek(&self) -> Option<OpDelimited<'a>> {
780+
match self.delimited {
781+
None => self.inner.get(self.idx).map(OpDelimited::Op),
782+
Some(_) => match self.idx {
783+
0 => Some(OpDelimited::Open),
784+
i if i == self.inner.len() + 1 => Some(OpDelimited::Close),
785+
i => self.inner.get(i - 1).map(OpDelimited::Op),
786+
},
787+
}
788+
}
789+
790+
fn reset(&self) -> Self {
791+
Self { inner: self.inner, idx: 0, delimited: self.delimited }
792+
}
793+
}
794+
795+
impl<'a> Iterator for OpDelimitedIter<'a> {
796+
type Item = OpDelimited<'a>;
797+
798+
fn next(&mut self) -> Option<Self::Item> {
799+
let res = self.peek();
800+
self.idx += 1;
801+
res
802+
}
803+
804+
fn size_hint(&self) -> (usize, Option<usize>) {
805+
let len = self.inner.len() + if self.delimited.is_some() { 2 } else { 0 };
806+
let remain = len.saturating_sub(self.idx);
807+
(remain, Some(remain))
808+
}
809+
}
810+
753811
impl<'a> TtIter<'a> {
754812
fn expect_separator(&mut self, separator: &Separator, idx: usize) -> bool {
755813
let mut fork = self.clone();

crates/mbe/src/parser.rs

Lines changed: 14 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -3,84 +3,23 @@
33
44
use smallvec::SmallVec;
55
use syntax::SmolStr;
6-
use tt::Delimiter;
76

87
use crate::{tt_iter::TtIter, ParseError};
98

10-
#[derive(Clone, Debug, PartialEq, Eq)]
11-
pub(crate) struct MetaTemplate(pub(crate) Vec<Op>);
12-
13-
#[derive(Debug, Clone, Copy)]
14-
pub(crate) enum OpDelimited<'a> {
15-
Op(&'a Op),
16-
Open,
17-
Close,
18-
}
19-
20-
#[derive(Debug, Clone, Copy)]
21-
pub(crate) struct OpDelimitedIter<'a> {
22-
inner: &'a Vec<Op>,
23-
delimited: Option<&'a Delimiter>,
24-
idx: usize,
25-
}
26-
27-
impl<'a> OpDelimitedIter<'a> {
28-
pub(crate) fn is_eof(&self) -> bool {
29-
let len = self.inner.len() + if self.delimited.is_some() { 2 } else { 0 };
30-
self.idx >= len
31-
}
32-
33-
pub(crate) fn peek(&self) -> Option<OpDelimited<'a>> {
34-
match self.delimited {
35-
None => self.inner.get(self.idx).map(OpDelimited::Op),
36-
Some(_) => match self.idx {
37-
0 => Some(OpDelimited::Open),
38-
i if i == self.inner.len() + 1 => Some(OpDelimited::Close),
39-
i => self.inner.get(i - 1).map(OpDelimited::Op),
40-
},
41-
}
42-
}
43-
44-
pub(crate) fn reset(&self) -> Self {
45-
Self { inner: self.inner, idx: 0, delimited: self.delimited }
46-
}
47-
}
48-
49-
impl<'a> Iterator for OpDelimitedIter<'a> {
50-
type Item = OpDelimited<'a>;
51-
52-
fn next(&mut self) -> Option<Self::Item> {
53-
let res = self.peek();
54-
self.idx += 1;
55-
res
56-
}
57-
58-
fn size_hint(&self) -> (usize, Option<usize>) {
59-
let len = self.inner.len() + if self.delimited.is_some() { 2 } else { 0 };
60-
let remain = len.saturating_sub(self.idx);
61-
(remain, Some(remain))
62-
}
9+
pub(crate) fn parse_template(template: &tt::Subtree) -> Result<Vec<Op>, ParseError> {
10+
parse_inner(template, Mode::Template).into_iter().collect()
6311
}
6412

65-
impl<'a> MetaTemplate {
66-
pub(crate) fn iter(&self) -> impl Iterator<Item = &Op> {
67-
self.0.iter()
68-
}
69-
70-
pub(crate) fn iter_delimited(
71-
&'a self,
72-
delimited: Option<&'a Delimiter>,
73-
) -> OpDelimitedIter<'a> {
74-
OpDelimitedIter { inner: &self.0, idx: 0, delimited }
75-
}
13+
pub(crate) fn parse_pattern(pattern: &tt::Subtree) -> Result<Vec<Op>, ParseError> {
14+
parse_inner(pattern, Mode::Pattern).into_iter().collect()
7615
}
7716

7817
#[derive(Clone, Debug, PartialEq, Eq)]
7918
pub(crate) enum Op {
8019
Var { name: SmolStr, kind: Option<SmolStr>, id: tt::TokenId },
8120
Repeat { tokens: MetaTemplate, kind: RepeatKind, separator: Option<Separator> },
8221
Leaf(tt::Leaf),
83-
Subtree { tokens: MetaTemplate, delimiter: Option<Delimiter> },
22+
Subtree { tokens: MetaTemplate, delimiter: Option<tt::Delimiter> },
8423
}
8524

8625
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
@@ -97,6 +36,15 @@ pub(crate) enum Separator {
9736
Puncts(SmallVec<[tt::Punct; 3]>),
9837
}
9938

39+
#[derive(Clone, Debug, PartialEq, Eq)]
40+
pub(crate) struct MetaTemplate(pub(crate) Vec<Op>);
41+
42+
impl MetaTemplate {
43+
pub(crate) fn iter(&self) -> impl Iterator<Item = &Op> {
44+
self.0.iter()
45+
}
46+
}
47+
10048
// Note that when we compare a Separator, we just care about its textual value.
10149
impl PartialEq for Separator {
10250
fn eq(&self, other: &Separator) -> bool {
@@ -125,14 +73,6 @@ impl Separator {
12573
}
12674
}
12775

128-
pub(crate) fn parse_template(template: &tt::Subtree) -> Result<Vec<Op>, ParseError> {
129-
parse_inner(template, Mode::Template).into_iter().collect()
130-
}
131-
132-
pub(crate) fn parse_pattern(pattern: &tt::Subtree) -> Result<Vec<Op>, ParseError> {
133-
parse_inner(pattern, Mode::Pattern).into_iter().collect()
134-
}
135-
13676
#[derive(Clone, Copy)]
13777
enum Mode {
13878
Pattern,

0 commit comments

Comments
 (0)