about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-07-07 04:12:20 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-07-13 04:49:32 +0000
commitc1b850d3041e5c36dc133c22b59319b179f5ddc6 (patch)
tree3eb6a09311e4fb8580b8d2bbad7627f19872debf /src/libsyntax/parse
parent759b8a8e7dbe4e9ada9f33847ab8d698ee020165 (diff)
downloadrust-c1b850d3041e5c36dc133c22b59319b179f5ddc6.tar.gz
rust-c1b850d3041e5c36dc133c22b59319b179f5ddc6.zip
cleanup: Refactor parser method `finish_parsing_statement` -> `parse_full_stmt`.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs18
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> {