diff options
| author | John Clements <clements@racket-lang.org> | 2014-07-06 15:11:44 -0700 |
|---|---|---|
| committer | John Clements <clements@racket-lang.org> | 2014-07-08 15:14:46 -0700 |
| commit | 06b64345d681681adc97e64c0dd74a1c9b0762ea (patch) | |
| tree | b67f973cad3aa231f215301be97b9ccd5e9c1d77 /src/libsyntax/parse | |
| parent | 728b269199484f50779c44bad495cc5ddecd4a15 (diff) | |
| download | rust-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.rs | 20 |
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(); |
