Skip to content

Commit 47bfd8c

Browse files
committed
Turn interpolated_or_expr_span into a function
1 parent 9d8c64b commit 47bfd8c

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

src/libsyntax/parse/parser.rs

+24-28
Original file line numberDiff line numberDiff line change
@@ -233,23 +233,6 @@ macro_rules! maybe_whole {
233233
)
234234
}
235235

236-
/// Uses $parse_expr to parse an expression and returns the span of the interpolated
237-
/// token or the span of the parsed expression, if it was not interpolated
238-
macro_rules! interpolated_or_expr_span {
239-
($p:expr, $parse_expr:expr) => {
240-
{
241-
let is_interpolated = $p.token.is_interpolated();
242-
$parse_expr.map(|e| {
243-
if is_interpolated {
244-
($p.last_span, e)
245-
} else {
246-
(e.span, e)
247-
}
248-
})
249-
}
250-
}
251-
}
252-
253236
fn maybe_append(mut lhs: Vec<Attribute>, rhs: Option<Vec<Attribute>>)
254237
-> Vec<Attribute> {
255238
if let Some(ref attrs) = rhs {
@@ -558,6 +541,18 @@ impl<'a> Parser<'a> {
558541
self.commit_stmt(&[edible], &[])
559542
}
560543

544+
/// returns the span of expr, if it was not interpolated or the span of the interpolated token
545+
fn interpolated_or_expr_span(&self, expr: PResult<'a, P<Expr>>) -> PResult<'a, (Span, P<Expr>)> {
546+
let is_interpolated = self.token.is_interpolated();
547+
expr.map(|e| {
548+
if is_interpolated {
549+
(self.last_span, e)
550+
} else {
551+
(e.span, e)
552+
}
553+
})
554+
}
555+
561556
pub fn parse_ident(&mut self) -> PResult<'a, ast::Ident> {
562557
self.check_strict_keywords();
563558
self.check_reserved_keywords();
@@ -2339,7 +2334,8 @@ impl<'a> Parser<'a> {
23392334
-> PResult<'a, P<Expr>> {
23402335
let attrs = try!(self.parse_or_use_outer_attributes(already_parsed_attrs));
23412336

2342-
let (span, b) = try!(interpolated_or_expr_span!(self, self.parse_bottom_expr()));
2337+
let b = self.parse_bottom_expr();
2338+
let (span, b) = try!(self.interpolated_or_expr_span(b));
23432339
self.parse_dot_or_call_expr_with(b, span.lo, attrs)
23442340
}
23452341

@@ -2725,30 +2721,30 @@ impl<'a> Parser<'a> {
27252721
let ex = match self.token {
27262722
token::Not => {
27272723
self.bump();
2728-
let (span, e) = try!(interpolated_or_expr_span!(self,
2729-
self.parse_prefix_expr(None)));
2724+
let e = self.parse_prefix_expr(None);
2725+
let (span, e) = try!(self.interpolated_or_expr_span(e));
27302726
hi = span.hi;
27312727
self.mk_unary(UnNot, e)
27322728
}
27332729
token::BinOp(token::Minus) => {
27342730
self.bump();
2735-
let (span, e) = try!(interpolated_or_expr_span!(self,
2736-
self.parse_prefix_expr(None)));
2731+
let e = self.parse_prefix_expr(None);
2732+
let (span, e) = try!(self.interpolated_or_expr_span(e));
27372733
hi = span.hi;
27382734
self.mk_unary(UnNeg, e)
27392735
}
27402736
token::BinOp(token::Star) => {
27412737
self.bump();
2742-
let (span, e) = try!(interpolated_or_expr_span!(self,
2743-
self.parse_prefix_expr(None)));
2738+
let e = self.parse_prefix_expr(None);
2739+
let (span, e) = try!(self.interpolated_or_expr_span(e));
27442740
hi = span.hi;
27452741
self.mk_unary(UnDeref, e)
27462742
}
27472743
token::BinOp(token::And) | token::AndAnd => {
27482744
try!(self.expect_and());
27492745
let m = try!(self.parse_mutability());
2750-
let (span, e) = try!(interpolated_or_expr_span!(self,
2751-
self.parse_prefix_expr(None)));
2746+
let e = self.parse_prefix_expr(None);
2747+
let (span, e) = try!(self.interpolated_or_expr_span(e));
27522748
hi = span.hi;
27532749
ExprAddrOf(m, e)
27542750
}
@@ -2767,8 +2763,8 @@ impl<'a> Parser<'a> {
27672763
}
27682764
token::Ident(..) if self.token.is_keyword(keywords::Box) => {
27692765
self.bump();
2770-
let (span, e) = try!(interpolated_or_expr_span!(self,
2771-
self.parse_prefix_expr(None)));
2766+
let e = self.parse_prefix_expr(None);
2767+
let (span, e) = try!(self.interpolated_or_expr_span(e));
27722768
hi = span.hi;
27732769
ExprBox(e)
27742770
}

0 commit comments

Comments
 (0)