about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-09-25 17:56:54 -0700
committerBrian Anderson <banderson@mozilla.com>2013-09-26 15:04:13 -0700
commit88272a4f2421fdf095ee3573517ce6d9f654fedc (patch)
tree86926f9231a9b1a4417f79aa3da98c99bb4e4b7a /src
parent41826c48eddfb964b830229dff6f0480ac649827 (diff)
downloadrust-88272a4f2421fdf095ee3573517ce6d9f654fedc.tar.gz
rust-88272a4f2421fdf095ee3573517ce6d9f654fedc.zip
Add 'continue' as a synonym for 'loop'
Diffstat (limited to 'src')
-rw-r--r--src/librustc/metadata/decoder.rs22
-rw-r--r--src/librustc/metadata/encoder.rs10
-rw-r--r--src/libsyntax/ext/asm.rs12
-rw-r--r--src/libsyntax/parse/parser.rs12
-rw-r--r--src/libsyntax/parse/token.rs39
-rw-r--r--src/test/run-pass/while-cont.rs2
6 files changed, 56 insertions, 41 deletions
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;
     }
 }