@@ -891,9 +891,9 @@ pub enum Expr_ {
|
||||
/// A referencing operation (`&a` or `&mut a`)
|
||||
ExprAddrOf(Mutability, P<Expr>),
|
||||
/// A `break`, with an optional label to break
|
||||
ExprBreak(Option<Ident>),
|
||||
ExprBreak(Option<SpannedIdent>),
|
||||
/// A `continue`, with an optional label
|
||||
ExprAgain(Option<Ident>),
|
||||
ExprAgain(Option<SpannedIdent>),
|
||||
/// A `return`, with an optional value to be returned
|
||||
ExprRet(Option<P<Expr>>),
|
||||
|
||||
|
||||
@@ -1299,8 +1299,14 @@ pub fn noop_fold_expr<T: Folder>(Expr {id, node, span}: Expr, folder: &mut T) ->
|
||||
});
|
||||
ExprPath(qself, folder.fold_path(path))
|
||||
}
|
||||
ExprBreak(opt_ident) => ExprBreak(opt_ident.map(|x| folder.fold_ident(x))),
|
||||
ExprAgain(opt_ident) => ExprAgain(opt_ident.map(|x| folder.fold_ident(x))),
|
||||
ExprBreak(opt_ident) => ExprBreak(opt_ident.map(|label|
|
||||
respan(folder.new_span(label.span),
|
||||
folder.fold_ident(label.node)))
|
||||
),
|
||||
ExprAgain(opt_ident) => ExprAgain(opt_ident.map(|label|
|
||||
respan(folder.new_span(label.span),
|
||||
folder.fold_ident(label.node)))
|
||||
),
|
||||
ExprRet(e) => ExprRet(e.map(|x| folder.fold_expr(x))),
|
||||
ExprInlineAsm(InlineAsm {
|
||||
inputs,
|
||||
|
||||
@@ -2143,9 +2143,12 @@ impl<'a> Parser<'a> {
|
||||
}
|
||||
if try!(self.eat_keyword(keywords::Continue) ){
|
||||
let ex = if self.token.is_lifetime() {
|
||||
let lifetime = self.get_lifetime();
|
||||
let ex = ExprAgain(Some(Spanned{
|
||||
node: self.get_lifetime(),
|
||||
span: self.span
|
||||
}));
|
||||
try!(self.bump());
|
||||
ExprAgain(Some(lifetime))
|
||||
ex
|
||||
} else {
|
||||
ExprAgain(None)
|
||||
};
|
||||
@@ -2161,7 +2164,6 @@ impl<'a> Parser<'a> {
|
||||
UnsafeBlock(ast::UserProvided));
|
||||
}
|
||||
if try!(self.eat_keyword(keywords::Return) ){
|
||||
// RETURN expression
|
||||
if self.token.can_begin_expr() {
|
||||
let e = try!(self.parse_expr_nopanic());
|
||||
hi = e.span.hi;
|
||||
@@ -2170,11 +2172,12 @@ impl<'a> Parser<'a> {
|
||||
ex = ExprRet(None);
|
||||
}
|
||||
} else if try!(self.eat_keyword(keywords::Break) ){
|
||||
// BREAK expression
|
||||
if self.token.is_lifetime() {
|
||||
let lifetime = self.get_lifetime();
|
||||
ex = ExprBreak(Some(Spanned {
|
||||
node: self.get_lifetime(),
|
||||
span: self.span
|
||||
}));
|
||||
try!(self.bump());
|
||||
ex = ExprBreak(Some(lifetime));
|
||||
} else {
|
||||
ex = ExprBreak(None);
|
||||
}
|
||||
|
||||
@@ -1911,7 +1911,7 @@ impl<'a> State<'a> {
|
||||
try!(word(&mut self.s, "break"));
|
||||
try!(space(&mut self.s));
|
||||
if let Some(ident) = opt_ident {
|
||||
try!(self.print_ident(ident));
|
||||
try!(self.print_ident(ident.node));
|
||||
try!(space(&mut self.s));
|
||||
}
|
||||
}
|
||||
@@ -1919,7 +1919,7 @@ impl<'a> State<'a> {
|
||||
try!(word(&mut self.s, "continue"));
|
||||
try!(space(&mut self.s));
|
||||
if let Some(ident) = opt_ident {
|
||||
try!(self.print_ident(ident));
|
||||
try!(self.print_ident(ident.node));
|
||||
try!(space(&mut self.s))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user