about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2012-10-23 11:28:20 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2012-10-23 12:10:19 -0700
commit087cbb55d06d833033e463b9c3a4237c04264319 (patch)
tree3f7f21846979bbd2a3d19930e58aee3699d97c21 /src/libsyntax/parse
parent48c8d1fecd55098e87cdb9c027c2675a22df370f (diff)
downloadrust-087cbb55d06d833033e463b9c3a4237c04264319.tar.gz
rust-087cbb55d06d833033e463b9c3a4237c04264319.zip
Remove <- operator from the compiler
Yield an obsolete syntax error on things like "let foo <- bar;"
and "foo <- bar;" r=brson

Progress on #3466
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/classify.rs4
-rw-r--r--src/libsyntax/parse/obsolete.rs10
-rw-r--r--src/libsyntax/parse/parser.rs34
3 files changed, 28 insertions, 20 deletions
diff --git a/src/libsyntax/parse/classify.rs b/src/libsyntax/parse/classify.rs
index 4838c91f856..ff3abb5379e 100644
--- a/src/libsyntax/parse/classify.rs
+++ b/src/libsyntax/parse/classify.rs
@@ -43,7 +43,6 @@ fn need_parens(expr: @ast::expr, outer_prec: uint) -> bool {
       ast::expr_cast(_, _) => parse::prec::as_prec < outer_prec,
       // This may be too conservative in some cases
       ast::expr_assign(_, _) => true,
-      ast::expr_move(_, _) => true,
       ast::expr_swap(_, _) => true,
       ast::expr_assign_op(_, _, _) => true,
       ast::expr_ret(_) => true,
@@ -61,8 +60,7 @@ fn ends_in_lit_int(ex: @ast::expr) -> bool {
         _ => false
       },
       ast::expr_binary(_, _, sub) | ast::expr_unary(_, sub) |
-      ast::expr_move(_, sub) | ast::expr_copy(sub) |
-      ast::expr_assign(_, sub) |
+      ast::expr_copy(sub) | ast::expr_assign(_, sub) |
       ast::expr_assign_op(_, _, sub) | ast::expr_swap(_, sub) |
       ast::expr_log(_, _, sub) | ast::expr_assert(sub) => {
         ends_in_lit_int(sub)
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs
index 1f607d849d9..1344c9b11ea 100644
--- a/src/libsyntax/parse/obsolete.rs
+++ b/src/libsyntax/parse/obsolete.rs
@@ -25,6 +25,8 @@ pub enum ObsoleteSyntax {
     ObsoleteModeInFnType,
     ObsoleteByMutRefMode,
     ObsoleteFixedLengthVec,
+    ObsoleteMoveInit,
+    ObsoleteBinaryMove
 }
 
 impl ObsoleteSyntax : cmp::Eq {
@@ -104,6 +106,14 @@ impl Parser : ObsoleteReporter {
                 "fixed-length vector",
                 "Fixed-length types are now written `[T * N]`, and instances \
                  are type-inferred"
+            ),
+            ObsoleteMoveInit => (
+                "initializer-by-move",
+                "Write `let foo = move bar` instead"
+            ),
+            ObsoleteBinaryMove => (
+                "binary move",
+                "Write `foo = move bar` instead"
             )
         };
 
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 672f86b7a10..6e16e4eec1a 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -20,7 +20,8 @@ use obsolete::{
     ObsoleteLowerCaseKindBounds, ObsoleteLet,
     ObsoleteFieldTerminator, ObsoleteStructCtor,
     ObsoleteWith, ObsoleteClassMethod, ObsoleteClassTraits,
-    ObsoleteModeInFnType, ObsoleteByMutRefMode
+    ObsoleteModeInFnType, ObsoleteByMutRefMode,
+    ObsoleteMoveInit, ObsoleteBinaryMove,
 };
 use ast::{_mod, add, arg, arm, attribute,
              bind_by_ref, bind_by_implicit_ref, bind_by_value, bind_by_move,
@@ -35,11 +36,11 @@ use ast::{_mod, add, arg, arm, attribute,
              expr_call, expr_cast, expr_copy, expr_do_body, expr_fail,
              expr_field, expr_fn, expr_fn_block, expr_if, expr_index,
              expr_lit, expr_log, expr_loop, expr_loop_body, expr_mac,
-             expr_move, expr_path, expr_rec, expr_repeat, expr_ret, expr_swap,
+             expr_path, expr_rec, expr_repeat, expr_ret, expr_swap,
              expr_struct, expr_tup, expr_unary, expr_unary_move, expr_vec,
              expr_vstore, expr_while, extern_fn, field, fn_decl, foreign_item,
              foreign_item_const, foreign_item_fn, foreign_mod, ident,
-             impure_fn, infer, inherited, init_assign, init_move, initializer,
+             impure_fn, infer, inherited,
              item, item_, item_class, item_const, item_enum, item_fn,
              item_foreign_mod, item_impl, item_mac, item_mod, item_trait,
              item_ty, lit, lit_, lit_bool, lit_float, lit_int,
@@ -1473,9 +1474,13 @@ impl Parser {
                                 expr_assign_op(aop, lhs, rhs));
           }
           token::LARROW => {
-            self.bump();
-            let rhs = self.parse_expr();
-            return self.mk_expr(lo, rhs.span.hi, expr_move(lhs, rhs));
+              self.obsolete(copy self.span, ObsoleteBinaryMove);
+              // Bogus value (but it's an error)
+              self.bump(); // <-
+              self.bump(); // rhs
+              self.bump(); // ;
+              return self.mk_expr(lo, self.span.hi,
+                                  expr_break(None));
           }
           token::DARROW => {
             self.bump();
@@ -1745,23 +1750,18 @@ impl Parser {
         return e;
     }
 
-    fn parse_initializer() -> Option<initializer> {
+    fn parse_initializer() -> Option<@expr> {
         match self.token {
           token::EQ => {
             self.bump();
-            return Some({op: init_assign, expr: self.parse_expr()});
+            return Some(self.parse_expr());
           }
           token::LARROW => {
-            self.bump();
-            return Some({op: init_move, expr: self.parse_expr()});
+              self.obsolete(copy self.span, ObsoleteMoveInit);
+              self.bump();
+              self.bump();
+              return None;
           }
-          // Now that the the channel is the first argument to receive,
-          // combining it with an initializer doesn't really make sense.
-          // case (token::RECV) {
-          //     self.bump();
-          //     return Some(rec(op = init_recv,
-          //                  expr = self.parse_expr()));
-          // }
           _ => {
             return None;
           }