}
}
+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. */
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,
--- /dev/null
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+pub fn main() {
+
+ return;
+ return ();
+ return as ();
+ return return as ();
+ return return return;
+
+ return if true {
+ ()
+ } else {
+ ()
+ };
+
+ loop {
+ return break as ();
+ }
+
+ return enum; //~ ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `enum`
+}