about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-03-03 12:14:25 -0800
committerEsteban Küber <esteban@kuber.com.ar>2019-03-06 18:46:11 -0800
commit51d0e86c221dbd937ca248f25a95dad787035b9e (patch)
treef27ebd02767e4c907470b4e989ccc9f7920d06d8 /src/libsyntax/parse/parser.rs
parentc70a516c23ae19ce568166a81e64c92a4ecf540a (diff)
downloadrust-51d0e86c221dbd937ca248f25a95dad787035b9e.tar.gz
rust-51d0e86c221dbd937ca248f25a95dad787035b9e.zip
Emit missing unclosed delimiter errors
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
-rw-r--r--src/libsyntax/parse/parser.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 33fe81ea8c4..bde14e192e9 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -7798,7 +7798,10 @@ impl<'a> Parser<'a> {
         attributes_allowed: bool,
     ) -> PResult<'a, Option<P<Item>>> {
         let (ret, tokens) = self.collect_tokens(|this| {
-            this.parse_item_implementation(attrs, macros_allowed, attributes_allowed)
+            let item = this.parse_item_implementation(attrs, macros_allowed, attributes_allowed);
+            let diag = this.diagnostic();
+            emit_unclosed_delims(&mut this.unclosed_delims, diag);
+            item
         })?;
 
         // Once we've parsed an item and recorded the tokens we got while
@@ -8555,8 +8558,8 @@ impl<'a> Parser<'a> {
             module: self.parse_mod_items(&token::Eof, lo)?,
             span: lo.to(self.span),
         });
-        emit_unclosed_delims(&self.unclosed_delims, self.diagnostic());
-        self.unclosed_delims.clear();
+        let diag = self.diagnostic();
+        emit_unclosed_delims(&mut self.unclosed_delims, diag);
         krate
     }
 
@@ -8587,8 +8590,8 @@ impl<'a> Parser<'a> {
     }
 }
 
-pub fn emit_unclosed_delims(unclosed_delims: &[UnmatchedBrace], handler: &errors::Handler) {
-    for unmatched in unclosed_delims {
+pub fn emit_unclosed_delims(unclosed_delims: &mut Vec<UnmatchedBrace>, handler: &errors::Handler) {
+    for unmatched in unclosed_delims.iter() {
         let mut err = handler.struct_span_err(unmatched.found_span, &format!(
             "incorrect close delimiter: `{}`",
             pprust::token_to_string(&token::Token::CloseDelim(unmatched.found_delim)),
@@ -8602,4 +8605,5 @@ pub fn emit_unclosed_delims(unclosed_delims: &[UnmatchedBrace], handler: &errors
         }
         err.emit();
     }
+    unclosed_delims.clear();
 }