diff options
| author | bors <bors@rust-lang.org> | 2013-09-26 18:46:10 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-09-26 18:46:10 -0700 |
| commit | a94158ce64524b7e21e6c8ec23a6b762d45926fb (patch) | |
| tree | 910767022dcecd289d5725833b1150054be5ef68 | |
| parent | 1434b4bfcafe90cffa6627e3be18a9e5b6501ad1 (diff) | |
| parent | c1d64297f071ea166ffbe5aea4fa5f94da3b3622 (diff) | |
auto merge of #9504 : brson/rust/continue, r=alexcrichton
| -rw-r--r-- | src/etc/emacs/rust-mode.el | 1 | ||||
| -rw-r--r-- | src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang | 1 | ||||
| -rw-r--r-- | src/etc/kate/rust.xml | 1 | ||||
| -rw-r--r-- | src/etc/vim/syntax/rust.vim | 2 | ||||
| -rw-r--r-- | src/librustc/metadata/decoder.rs | 22 | ||||
| -rw-r--r-- | src/librustc/metadata/encoder.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/ext/asm.rs | 12 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 12 | ||||
| -rw-r--r-- | src/libsyntax/parse/token.rs | 39 | ||||
| -rw-r--r-- | src/test/run-pass/while-cont.rs | 2 |
10 files changed, 60 insertions, 42 deletions
diff --git a/src/etc/emacs/rust-mode.el b/src/etc/emacs/rust-mode.el index a61d916f46f..bad1ea510be 100644 --- a/src/etc/emacs/rust-mode.el +++ b/src/etc/emacs/rust-mode.el @@ -127,6 +127,7 @@ (defconst rust-mode-keywords '("as" "break" + "continue" "do" "else" "enum" "extern" "false" "fn" "for" diff --git a/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang b/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang index 1d55d4a02e5..1869024e20b 100644 --- a/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang +++ b/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang @@ -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> diff --git a/src/etc/kate/rust.xml b/src/etc/kate/rust.xml index 6a603685537..ba6b9630c3b 100644 --- a/src/etc/kate/rust.xml +++ b/src/etc/kate/rust.xml @@ -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> diff --git a/src/etc/vim/syntax/rust.vim b/src/etc/vim/syntax/rust.vim index 689af99b5c4..c465f076c74 100644 --- a/src/etc/vim/syntax/rust.vim +++ b/src/etc/vim/syntax/rust.vim @@ -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 diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index fe7309d4467..69b3c79d1a9 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -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_ } } diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index de60927f2a2..e3cc155b013 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -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, diff --git a/src/libsyntax/ext/asm.rs b/src/libsyntax/ext/asm.rs index b350ef7bb08..d47435dab56 100644 --- a/src/libsyntax/ext/asm.rs +++ b/src/libsyntax/ext/asm.rs @@ -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 diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 74447b5dae1..d9fb53b4677 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -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"); diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 6cc1058954c..eec4a81b2cf 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -477,14 +477,15 @@ fn mk_fresh_ident_interner() -> @ident_interner { "use", // 61 "while", // 62 "in", // 63 - - "be", // 64 - "pure", // 65 - "yield", // 66 - "typeof", // 67 - "alignof", // 68 - "offsetof", // 69 - "sizeof", // 70 + "continue", // 64 + + "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 }, - - 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 }, + Continue => Ident { name: 64, 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, diff --git a/src/test/run-pass/while-cont.rs b/src/test/run-pass/while-cont.rs index 836f737b845..f0e6d4b45a5 100644 --- a/src/test/run-pass/while-cont.rs +++ b/src/test/run-pass/while-cont.rs @@ -15,6 +15,6 @@ pub fn main() { assert!((i > 0)); info!(i); i -= 1; - loop; + continue; } } |
