auto merge of #9504 : brson/rust/continue, r=alexcrichton
This commit is contained in:
commit
a94158ce64
@ -127,6 +127,7 @@
|
||||
(defconst rust-mode-keywords
|
||||
'("as"
|
||||
"break"
|
||||
"continue"
|
||||
"do"
|
||||
"else" "enum" "extern"
|
||||
"false" "fn" "for"
|
||||
|
@ -39,6 +39,7 @@
|
||||
<keyword>assert</keyword>
|
||||
<keyword>break</keyword>
|
||||
<keyword>const</keyword>
|
||||
<keyword>continue</keyword>
|
||||
<keyword>do</keyword>
|
||||
<keyword>drop</keyword>
|
||||
<keyword>else</keyword>
|
||||
|
@ -18,6 +18,7 @@
|
||||
<list name="keywords">
|
||||
<item> as </item>
|
||||
<item> break </item>
|
||||
<item> continue </item>
|
||||
<item> do </item>
|
||||
<item> drop </item>
|
||||
<item> else </item>
|
||||
|
@ -18,7 +18,7 @@ syn keyword rustOperator as
|
||||
|
||||
syn match rustAssert "\<assert\(\w\)*!" contained
|
||||
syn match rustFail "\<fail\(\w\)*!" contained
|
||||
syn keyword rustKeyword break do extern
|
||||
syn keyword rustKeyword break continue do extern
|
||||
syn keyword rustKeyword in if impl let log
|
||||
syn keyword rustKeyword for impl let log
|
||||
syn keyword rustKeyword loop mod once priv pub
|
||||
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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");
|
||||
|
@ -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,
|
||||
|
@ -15,6 +15,6 @@ pub fn main() {
|
||||
assert!((i > 0));
|
||||
info!(i);
|
||||
i -= 1;
|
||||
loop;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user