From c1b850d3041e5c36dc133c22b59319b179f5ddc6 Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Thu, 7 Jul 2016 04:12:20 +0000 Subject: [PATCH] cleanup: Refactor parser method `finish_parsing_statement` -> `parse_full_stmt`. --- src/libsyntax/ext/tt/macro_rules.rs | 8 +------- src/libsyntax/parse/parser.rs | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 7b09a44b814f..50ac99efc008 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -118,18 +118,12 @@ impl<'a> MacResult for ParserAnyMacro<'a> { fn make_stmts(self: Box>) -> Option> { - let parse_stmt = |parser: &mut Parser<'a>| -> ::parse::PResult<'a, _> { - Ok(match parser.parse_stmt()? { - Some(stmt) => Some(parser.finish_parsing_statement(stmt)?), - None => None, - }) - }; let mut ret = SmallVector::zero(); loop { let mut parser = self.parser.borrow_mut(); match parser.token { token::Eof => break, - _ => match parse_stmt(&mut parser) { + _ => match parser.parse_full_stmt() { Ok(maybe_stmt) => match maybe_stmt { Some(stmt) => ret.push(stmt), None => (), diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 454320337edc..5617d223e8c4 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4044,8 +4044,8 @@ impl<'a> Parser<'a> { let mut stmts = vec![]; while !self.eat(&token::CloseDelim(token::Brace)) { - if let Some(stmt) = self.parse_stmt_() { - stmts.push(self.finish_parsing_statement(stmt)?); + if let Some(stmt) = self.parse_full_stmt()? { + stmts.push(stmt); } else if self.token == token::Eof { break; } else { @@ -4062,9 +4062,14 @@ impl<'a> Parser<'a> { })) } - /// Finish parsing expressions that start with macros and handle trailing semicolons - /// (or the lack thereof) -- c.f. `parse_stmt`. - pub fn finish_parsing_statement(&mut self, mut stmt: Stmt) -> PResult<'a, Stmt> { + /// Parse a statement, including the trailing semicolon. + /// This parses expression statements that begin with macros correctly (c.f. `parse_stmt`). + pub fn parse_full_stmt(&mut self) -> PResult<'a, Option> { + let mut stmt = match self.parse_stmt_() { + Some(stmt) => stmt, + None => return Ok(None), + }; + if let StmtKind::Mac(mac) = stmt.node { if mac.1 != MacStmtStyle::NoBraces || self.token == token::Semi || self.token == token::Eof { @@ -4078,7 +4083,8 @@ impl<'a> Parser<'a> { } } - self.handle_trailing_semicolon(stmt) + stmt = self.handle_trailing_semicolon(stmt)?; + Ok(Some(stmt)) } fn handle_trailing_semicolon(&mut self, mut stmt: Stmt) -> PResult<'a, Stmt> {