Skip to content

Commit

Permalink
syntax: Stop the bump loop for trait items at } and EOF.
Browse files Browse the repository at this point in the history
  • Loading branch information
eddyb committed Mar 26, 2016
1 parent 6abab49 commit 221d0fb
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 14 deletions.
26 changes: 17 additions & 9 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -957,7 +957,9 @@ impl<'a> Parser<'a> {
{
self.expect(bra)?;
let result = self.parse_seq_to_before_end(ket, sep, f);
self.bump();
if self.token == *ket {
self.bump();
}
Ok(result)
}

Expand Down Expand Up @@ -1292,15 +1294,21 @@ impl<'a> Parser<'a> {
Ok(cua) => cua,
Err(e) => {
loop {
p.bump();
if p.token == token::Semi {
p.bump();
break;
}
match p.token {
token::Eof => break,

token::CloseDelim(token::Brace) |
token::Semi => {
p.bump();
break;
}

token::OpenDelim(token::Brace) => {
p.parse_token_tree()?;
break;
}

if p.token == token::OpenDelim(token::DelimToken::Brace) {
p.parse_token_tree()?;
break;
_ => p.bump()
}
}

Expand Down
3 changes: 1 addition & 2 deletions src/test/compile-fail/issue-10636-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,5 @@
pub fn trace_option(option: Option<isize>) {
option.map(|some| 42; //~ NOTE: unclosed delimiter
//~^ ERROR: expected one of
//~^^ ERROR: mismatched types
} //~ ERROR: incorrect close delimiter
//~^ ERROR: expected one of
//~^ ERROR: unexpected token
3 changes: 2 additions & 1 deletion src/test/compile-fail/token-error-correct-3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ pub mod raw {
if !is_directory(path.as_ref()) { //~ ERROR: unresolved name `is_directory`
callback(path.as_ref(); //~ NOTE: unclosed delimiter
//~^ ERROR: expected one of
fs::create_dir_all(path.as_ref()).map(|()| true) //~ ERROR: expected one of
fs::create_dir_all(path.as_ref()).map(|()| true) //~ ERROR: mismatched types
} else { //~ ERROR: incorrect close delimiter: `}`
//~^ ERROR: expected one of
Ok(false);
}

Expand Down
16 changes: 16 additions & 0 deletions src/test/parse-fail/issue-32446.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// compile-flags: -Z parse-only

fn main() {}

// This used to end up in an infite loop trying to bump past EOF.
trait T { ... } //~ ERROR
2 changes: 1 addition & 1 deletion src/test/parse-fail/pat-lt-bracket-6.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@

fn main() {
let Test(&desc[..]) = x; //~ error: expected one of `,` or `@`, found `[`
//~^ ERROR expected one of `:`, `;`, or `=`, found `..`
//~^ ERROR expected one of `:`, `;`, `=`, or `@`, found `[`
}
2 changes: 1 addition & 1 deletion src/test/parse-fail/pat-lt-bracket-7.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@

fn main() {
for thing(x[]) in foo {} //~ error: expected one of `,` or `@`, found `[`
//~^ ERROR: expected `in`, found `]`
//~^ ERROR expected one of `@` or `in`, found `[`
}

0 comments on commit 221d0fb

Please sign in to comment.