Add 'continue' as a synonym for 'loop'

This commit is contained in:
Brian Anderson 2013-09-25 17:56:54 -07:00
parent 41826c48ed
commit 88272a4f24
6 changed files with 54 additions and 39 deletions

View File

@ -564,7 +564,7 @@ impl<'self> EachItemContext<'self> {
}
}
let mut continue = (self.callback)(*self.path_builder, def_like, vis);
let mut continue_ = (self.callback)(*self.path_builder, def_like, vis);
let family = item_family(doc);
if family == ForeignMod {
@ -572,11 +572,11 @@ impl<'self> EachItemContext<'self> {
self.pop_name(old_len)
}
if continue {
if continue_ {
// Recurse if necessary.
match family {
Mod | ForeignMod | Trait | Impl => {
continue = self.each_item_of_module(def_id);
continue_ = self.each_item_of_module(def_id);
}
ImmStatic | MutStatic | Struct | UnsafeFn | Fn | ForeignFn |
UnsafeStaticMethod | StaticMethod | Type | ForeignType |
@ -589,7 +589,7 @@ impl<'self> EachItemContext<'self> {
self.pop_name(old_len)
}
continue
continue_
}
fn each_item_of_module(&mut self, def_id: ast::DefId) -> bool {
@ -612,7 +612,7 @@ impl<'self> EachItemContext<'self> {
}
fn each_child_of_module_or_crate(&mut self, item_doc: ebml::Doc) -> bool {
let mut continue = true;
let mut continue_ = true;
// Iterate over all children.
do reader::tagged_docs(item_doc, tag_mod_child) |child_info_doc| {
@ -654,16 +654,16 @@ impl<'self> EachItemContext<'self> {
// Process this item.
let vis = item_visibility(child_item_doc);
continue = self.process_item_and_pop_name(child_item_doc,
continue_ = self.process_item_and_pop_name(child_item_doc,
child_def_id,
old_len,
vis);
}
}
continue
continue_
};
if !continue {
if !continue_ {
return false
}
@ -705,7 +705,7 @@ impl<'self> EachItemContext<'self> {
match maybe_find_item(def_id.node, other_crates_items) {
None => { self.pop_name(old_len); }
Some(reexported_item_doc) => {
continue = self.process_item_and_pop_name(
continue_ = self.process_item_and_pop_name(
reexported_item_doc,
def_id,
old_len,
@ -713,10 +713,10 @@ impl<'self> EachItemContext<'self> {
}
}
continue
continue_
};
continue
continue_
}
}

View File

@ -521,12 +521,12 @@ fn encode_reexported_static_methods(ecx: &EncodeContext,
/// * For newtype structs, iterates through the node ID of the constructor.
fn each_auxiliary_node_id(item: @item, callback: &fn(NodeId) -> bool)
-> bool {
let mut continue = true;
let mut continue_ = true;
match item.node {
item_enum(ref enum_def, _) => {
for variant in enum_def.variants.iter() {
continue = callback(variant.node.id);
if !continue {
continue_ = callback(variant.node.id);
if !continue_ {
break
}
}
@ -537,7 +537,7 @@ fn each_auxiliary_node_id(item: @item, callback: &fn(NodeId) -> bool)
Some(ctor_id) if struct_def.fields.len() > 0 &&
struct_def.fields[0].node.kind ==
ast::unnamed_field => {
continue = callback(ctor_id);
continue_ = callback(ctor_id);
}
_ => {}
}
@ -545,7 +545,7 @@ fn each_auxiliary_node_id(item: @item, callback: &fn(NodeId) -> bool)
_ => {}
}
continue
continue_
}
fn encode_reexports(ecx: &EncodeContext,

View File

@ -54,8 +54,8 @@ pub fn expand_asm(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree])
let mut state = Asm;
// Not using labeled break to get us through one round of bootstrapping.
let mut continue = true;
while continue {
let mut continue_ = true;
while continue_ {
match state {
Asm => {
asm = expr_to_str(cx, p.parse_expr(),
@ -142,7 +142,7 @@ pub fn expand_asm(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree])
match next_state(state) {
Some(x) => x,
None => {
continue = false;
continue_ = false;
break
}
}
@ -151,19 +151,19 @@ pub fn expand_asm(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree])
let s = match next_state(state) {
Some(x) => x,
None => {
continue = false;
continue_ = false;
break
}
};
match next_state(s) {
Some(x) => x,
None => {
continue = false;
continue_ = false;
break
}
}
} else if *p.token == token::EOF {
continue = false;
continue_ = false;
break;
} else {
state

View File

@ -1786,6 +1786,17 @@ impl Parser {
}
} else if self.eat_keyword(keywords::Loop) {
return self.parse_loop_expr(None);
} else if self.eat_keyword(keywords::Continue) {
let lo = self.span.lo;
let ex = if self.token_is_lifetime(&*self.token) {
let lifetime = self.get_lifetime(&*self.token);
self.bump();
ExprAgain(Some(lifetime.name))
} else {
ExprAgain(None)
};
let hi = self.span.hi;
return self.mk_expr(lo, hi, ex);
} else if self.eat_keyword(keywords::Match) {
return self.parse_match_expr();
} else if self.eat_keyword(keywords::Unsafe) {
@ -2578,6 +2589,7 @@ impl Parser {
return self.mk_expr(lo, hi, ExprLoop(body, opt_ident));
} else {
// This is a 'continue' expression
// FIXME #9467 rm support for 'loop' here after snapshot
if opt_ident.is_some() {
self.span_err(*self.last_span,
"a label may not be used with a `loop` expression");

View File

@ -477,14 +477,15 @@ fn mk_fresh_ident_interner() -> @ident_interner {
"use", // 61
"while", // 62
"in", // 63
"continue", // 64
"be", // 64
"pure", // 65
"yield", // 66
"typeof", // 67
"alignof", // 68
"offsetof", // 69
"sizeof", // 70
"be", // 65
"pure", // 66
"yield", // 67
"typeof", // 68
"alignof", // 69
"offsetof", // 70
"sizeof", // 71
];
@interner::StrInterner::prefill(init_vec)
@ -628,6 +629,7 @@ pub mod keywords {
Unsafe,
Use,
While,
Continue,
// Reserved keywords
Alignof,
@ -676,14 +678,15 @@ pub mod keywords {
Unsafe => Ident { name: 60, ctxt: 0 },
Use => Ident { name: 61, ctxt: 0 },
While => Ident { name: 62, ctxt: 0 },
Continue => Ident { name: 64, ctxt: 0 },
Alignof => Ident { name: 68, ctxt: 0 },
Be => Ident { name: 64, ctxt: 0 },
Offsetof => Ident { name: 69, ctxt: 0 },
Pure => Ident { name: 65, ctxt: 0 },
Sizeof => Ident { name: 70, ctxt: 0 },
Typeof => Ident { name: 67, ctxt: 0 },
Yield => Ident { name: 66, ctxt: 0 },
Alignof => Ident { name: 69, ctxt: 0 },
Be => Ident { name: 65, ctxt: 0 },
Offsetof => Ident { name: 70, ctxt: 0 },
Pure => Ident { name: 66, ctxt: 0 },
Sizeof => Ident { name: 71, ctxt: 0 },
Typeof => Ident { name: 68, ctxt: 0 },
Yield => Ident { name: 67, ctxt: 0 },
}
}
}
@ -709,7 +712,7 @@ pub fn is_any_keyword(tok: &Token) -> bool {
pub fn is_strict_keyword(tok: &Token) -> bool {
match *tok {
token::IDENT(sid, false) => match sid.name {
8 | 27 | 32 .. 63 => true,
8 | 27 | 32 .. 64 => true,
_ => false,
},
_ => false,
@ -719,7 +722,7 @@ pub fn is_strict_keyword(tok: &Token) -> bool {
pub fn is_reserved_keyword(tok: &Token) -> bool {
match *tok {
token::IDENT(sid, false) => match sid.name {
64 .. 70 => true,
65 .. 71 => true,
_ => false,
},
_ => false,

View File

@ -15,6 +15,6 @@ pub fn main() {
assert!((i > 0));
info!(i);
i -= 1;
loop;
continue;
}
}