about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-01-28 02:50:51 +0000
committerbors <bors@rust-lang.org>2017-01-28 02:50:51 +0000
commit0f8a296475d8bc27dfa48ec1053cec8fa2f73673 (patch)
treeddda8dff0a83c98eb56a0152b4c758d95efb32bb /src/libsyntax/parse
parent154c202afb256c379b7d454ec0244da69eaa2ced (diff)
parent1767d9715c7e90ef9add83d866066a69b2103806 (diff)
downloadrust-0f8a296475d8bc27dfa48ec1053cec8fa2f73673.tar.gz
rust-0f8a296475d8bc27dfa48ec1053cec8fa2f73673.zip
Auto merge of #39353 - alexcrichton:rollup, r=alexcrichton
Rollup of 21 pull requests

- Successful merges: #38617, #39284, #39285, #39290, #39302, #39305, #39306, #39307, #39311, #39313, #39314, #39321, #39325, #39332, #39335, #39344, #39345, #39346, #39348, #39350, #39351
- Failed merges:
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/token.rs24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs
index d9e47a6b56e..0f0c6d0ca83 100644
--- a/src/libsyntax/parse/token.rs
+++ b/src/libsyntax/parse/token.rs
@@ -80,6 +80,28 @@ impl Lit {
     }
 }
 
+fn ident_can_begin_expr(ident: ast::Ident) -> bool {
+    let ident_token: Token = Ident(ident);
+
+    !ident_token.is_any_keyword() ||
+    ident_token.is_path_segment_keyword() ||
+    [
+        keywords::Box.name(),
+        keywords::Break.name(),
+        keywords::Continue.name(),
+        keywords::False.name(),
+        keywords::For.name(),
+        keywords::If.name(),
+        keywords::Loop.name(),
+        keywords::Match.name(),
+        keywords::Move.name(),
+        keywords::Return.name(),
+        keywords::True.name(),
+        keywords::Unsafe.name(),
+        keywords::While.name(),
+    ].contains(&ident.name)
+}
+
 #[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Eq, Hash, Debug)]
 pub enum Token {
     /* Expression-operator symbols. */
@@ -163,7 +185,7 @@ impl Token {
     pub fn can_begin_expr(&self) -> bool {
         match *self {
             OpenDelim(..)               => true,
-            Ident(..)                   => true,
+            Ident(ident)                => ident_can_begin_expr(ident),
             Literal(..)                 => true,
             Not                         => true,
             BinOp(Minus)                => true,