about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorJohn Clements <clements@racket-lang.org>2014-07-06 15:11:44 -0700
committerJohn Clements <clements@racket-lang.org>2014-07-08 15:14:46 -0700
commit06b64345d681681adc97e64c0dd74a1c9b0762ea (patch)
treeb67f973cad3aa231f215301be97b9ccd5e9c1d77 /src/libsyntax/parse
parent728b269199484f50779c44bad495cc5ddecd4a15 (diff)
downloadrust-06b64345d681681adc97e64c0dd74a1c9b0762ea.tar.gz
rust-06b64345d681681adc97e64c0dd74a1c9b0762ea.zip
preserve context in parsing of `self` varref
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 2f6555dcb69..d0e44b20139 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -541,12 +541,13 @@ impl<'a> Parser<'a> {
     // if the next token is the given keyword, eat it and return
     // true. Otherwise, return false.
     pub fn eat_keyword(&mut self, kw: keywords::Keyword) -> bool {
-        let is_kw = match self.token {
-            token::IDENT(sid, false) => kw.to_ident().name == sid.name,
+        match self.token {
+            token::IDENT(sid, false) if kw.to_ident().name == sid.name => {
+                self.bump();
+                true
+            }
             _ => false
-        };
-        if is_kw { self.bump() }
-        is_kw
+        }
     }
 
     // if the given word is not a keyword, signal an error.
@@ -1917,7 +1918,7 @@ impl<'a> Parser<'a> {
                 return self.mk_expr(blk.span.lo, blk.span.hi,
                                     ExprBlock(blk));
             },
-            _ if token::is_bar(&self.token) => {
+            token::BINOP(token::OR) |  token::OROR => {
                 return self.parse_lambda_expr();
             },
             _ if self.eat_keyword(keywords::Proc) => {
@@ -1933,8 +1934,9 @@ impl<'a> Parser<'a> {
                     });
                 return self.mk_expr(lo, body.span.hi, ExprProc(decl, fakeblock));
             },
-            _ if self.eat_keyword(keywords::Self) => {
-                let path = ast_util::ident_to_path(mk_sp(lo, hi), special_idents::self_);
+            token::IDENT(id @ ast::Ident{name:token::SELF_KEYWORD_NAME,ctxt:_},false) => {
+                self.bump();
+                let path = ast_util::ident_to_path(mk_sp(lo, hi), id);
                 ex = ExprPath(path);
                 hi = self.last_span.hi;
             }
@@ -1982,7 +1984,7 @@ impl<'a> Parser<'a> {
             },
             token::LBRACKET => {
                 self.bump();
-                
+
                 if self.token == token::RBRACKET {
                     // Empty vector.
                     self.bump();