diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-07-07 04:12:20 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-07-13 04:49:32 +0000 |
| commit | c1b850d3041e5c36dc133c22b59319b179f5ddc6 (patch) | |
| tree | 3eb6a09311e4fb8580b8d2bbad7627f19872debf /src/libsyntax/parse/parser.rs | |
| parent | 759b8a8e7dbe4e9ada9f33847ab8d698ee020165 (diff) | |
| download | rust-c1b850d3041e5c36dc133c22b59319b179f5ddc6.tar.gz rust-c1b850d3041e5c36dc133c22b59319b179f5ddc6.zip | |
cleanup: Refactor parser method `finish_parsing_statement` -> `parse_full_stmt`.
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 454320337ed..5617d223e8c 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<Stmt>> { + 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> { |
