Skip to content

Commit

Permalink
auto merge of #20901 : dgrunwald/rust/update-token-can-begin-expr, r=…
Browse files Browse the repository at this point in the history
…sanxiyn

 * add `Token::AndAnd` (double borrow)
 * add `Token::DotDot` (range notation)
 * remove `Token::Pound` and `Token::At`

This fixes a syntax error when parsing `fn f() -> RangeTo<i32> { return ..1; }`.

Also, remove `fn_expr_lookahead`.
It's from the `fn~` days and seems to no longer be necessary.
  • Loading branch information
bors committed Jan 18, 2015
2 parents 30f081e + ca8578a commit dcaeb6a
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 11 deletions.
12 changes: 3 additions & 9 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2139,6 +2139,7 @@ impl<'a> Parser<'a> {

let ex: Expr_;

// Note: when adding new syntax here, don't forget to adjust Token::can_begin_expr().
match self.token {
token::OpenDelim(token::Paren) => {
self.bump();
Expand Down Expand Up @@ -2776,6 +2777,7 @@ impl<'a> Parser<'a> {
let lo = self.span.lo;
let hi;

// Note: when adding new unary operators, don't forget to adjust Token::can_begin_expr()
let ex;
match self.token {
token::Not => {
Expand Down Expand Up @@ -5536,13 +5538,6 @@ impl<'a> Parser<'a> {
(id, ItemEnum(enum_definition, generics), None)
}

fn fn_expr_lookahead(tok: &token::Token) -> bool {
match *tok {
token::OpenDelim(token::Paren) | token::At | token::Tilde | token::BinOp(_) => true,
_ => false
}
}

/// Parses a string as an ABI spec on an extern type or module. Consumes
/// the `extern` keyword, if one is found.
fn parse_opt_abi(&mut self) -> Option<abi::Abi> {
Expand Down Expand Up @@ -5715,8 +5710,7 @@ impl<'a> Parser<'a> {
maybe_append(attrs, extra_attrs));
return IoviItem(item);
}
if self.token.is_keyword(keywords::Fn) &&
self.look_ahead(1, |f| !Parser::fn_expr_lookahead(f)) {
if self.token.is_keyword(keywords::Fn) {
// FUNCTION ITEM
self.bump();
let (ident, item_, extra_attrs) =
Expand Down
4 changes: 2 additions & 2 deletions src/libsyntax/parse/token.rs
Original file line number Diff line number Diff line change
Expand Up @@ -183,14 +183,14 @@ impl Token {
Underscore => true,
Tilde => true,
Literal(_, _) => true,
Pound => true,
At => true,
Not => true,
BinOp(Minus) => true,
BinOp(Star) => true,
BinOp(And) => true,
BinOp(Or) => true, // in lambda syntax
OrOr => true, // in lambda syntax
AndAnd => true, // double borrow
DotDot => true, // range notation
ModSep => true,
Interpolated(NtExpr(..)) => true,
Interpolated(NtIdent(..)) => true,
Expand Down
3 changes: 3 additions & 0 deletions src/test/run-pass/range.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@

fn foo() -> int { 42 }

// Test that range syntax works in return statements
fn return_range_to() -> ::std::ops::RangeTo<i32> { return ..1; }

pub fn main() {
let mut count = 0;
for i in 0u..10 {
Expand Down

0 comments on commit dcaeb6a

Please sign in to comment.