summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorDaniel Grunwald <daniel@danielgrunwald.de>2015-01-11 00:14:03 +0100
committerDaniel Grunwald <daniel@danielgrunwald.de>2015-01-11 00:14:03 +0100
commitd0863adf24b316d8ecaca5a1b8866ee5db902313 (patch)
treeef28bce96abf5308f57ca5ad8eb45723af71a943 /src/libsyntax/parse
parent099b411e080d302ec0dc5f3aebe53d76c50acfc7 (diff)
downloadrust-d0863adf24b316d8ecaca5a1b8866ee5db902313.tar.gz
rust-d0863adf24b316d8ecaca5a1b8866ee5db902313.zip
Update Token::can_begin_expr() to make it consistent with the grammar:
 * add Token::AndAnd (double borrow)
 * add Token::DotDot (range notation)
 * remove Token::Pound and Token::At

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.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs12
-rw-r--r--src/libsyntax/parse/token.rs4
2 files changed, 5 insertions, 11 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 33f9e35d8b7..8d1599e176e 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -2167,6 +2167,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();
@@ -2773,6 +2774,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 => {
@@ -5590,13 +5592,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> {
@@ -5779,8 +5774,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) =
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs
index 4b3573f84c5..e5aef12e827 100644
--- a/src/libsyntax/parse/token.rs
+++ b/src/libsyntax/parse/token.rs
@@ -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,