Remove <- operator from the compiler
Yield an obsolete syntax error on things like "let foo <- bar;" and "foo <- bar;" r=brson Progress on #3466
This commit is contained in:
parent
48c8d1fecd
commit
087cbb55d0
19 changed files with 53 additions and 132 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue