Remove by-mutable-ref mode from the compiler
and test cases. Closes #3513
This commit is contained in:
@@ -394,7 +394,6 @@ fn parse_arg(st: @pstate, conv: conv_did) -> ty::arg {
|
||||
|
||||
fn parse_mode(st: @pstate) -> ast::mode {
|
||||
let m = ast::expl(match next(st) {
|
||||
'&' => ast::by_mutbl_ref,
|
||||
'-' => ast::by_move,
|
||||
'+' => ast::by_copy,
|
||||
'=' => ast::by_ref,
|
||||
|
||||
@@ -333,7 +333,6 @@ fn enc_arg(w: io::Writer, cx: @ctxt, arg: ty::arg) {
|
||||
|
||||
fn enc_mode(w: io::Writer, cx: @ctxt, m: mode) {
|
||||
match ty::resolved_mode(cx.tcx, m) {
|
||||
by_mutbl_ref => w.write_char('&'),
|
||||
by_move => w.write_char('-'),
|
||||
by_copy => w.write_char('+'),
|
||||
by_ref => w.write_char('='),
|
||||
|
||||
@@ -529,7 +529,7 @@ impl check_loan_ctxt {
|
||||
ast::by_move => {
|
||||
self.check_move_out(*arg);
|
||||
}
|
||||
ast::by_mutbl_ref | ast::by_ref |
|
||||
ast::by_ref |
|
||||
ast::by_copy | ast::by_val => {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,10 +115,6 @@ fn req_loans_in_expr(ex: @ast::expr,
|
||||
let scope_r = ty::re_scope(ex.id);
|
||||
for vec::each2(args, arg_tys) |arg, arg_ty| {
|
||||
match ty::resolved_mode(self.tcx(), arg_ty.mode) {
|
||||
ast::by_mutbl_ref => {
|
||||
let arg_cmt = self.bccx.cat_expr(*arg);
|
||||
self.guarantee_valid(arg_cmt, m_mutbl, scope_r);
|
||||
}
|
||||
ast::by_ref => {
|
||||
let arg_cmt = self.bccx.cat_expr(*arg);
|
||||
self.guarantee_valid(arg_cmt, m_imm, scope_r);
|
||||
|
||||
@@ -323,7 +323,7 @@ fn check_expr(e: @expr, cx: ctx, v: visit::vt<ctx>) {
|
||||
for ty::ty_fn_args(ty::expr_ty(cx.tcx, f)).each |arg_t| {
|
||||
match ty::arg_mode(cx.tcx, *arg_t) {
|
||||
by_copy => maybe_copy(cx, args[i], None),
|
||||
by_ref | by_val | by_mutbl_ref | by_move => ()
|
||||
by_ref | by_val | by_move => ()
|
||||
}
|
||||
i += 1u;
|
||||
}
|
||||
@@ -335,7 +335,7 @@ fn check_expr(e: @expr, cx: ctx, v: visit::vt<ctx>) {
|
||||
Some(ref mme) => {
|
||||
match ty::arg_mode(cx.tcx, mme.self_arg) {
|
||||
by_copy => maybe_copy(cx, lhs, None),
|
||||
by_ref | by_val | by_mutbl_ref | by_move => ()
|
||||
by_ref | by_val | by_move => ()
|
||||
}
|
||||
}
|
||||
_ => ()
|
||||
@@ -465,14 +465,7 @@ fn check_imm_free_var(cx: ctx, def: def, sp: span) {
|
||||
cx.tcx.sess.span_err(sp, msg);
|
||||
}
|
||||
}
|
||||
def_arg(_, mode) => {
|
||||
match ty::resolved_mode(cx.tcx, mode) {
|
||||
by_ref | by_val | by_move | by_copy => { /* ok */ }
|
||||
by_mutbl_ref => {
|
||||
cx.tcx.sess.span_err(sp, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
def_arg(*) => { /* ok */ }
|
||||
def_upvar(_, def1, _, _) => {
|
||||
check_imm_free_var(cx, *def1, sp);
|
||||
}
|
||||
|
||||
@@ -398,7 +398,7 @@ impl IrMaps {
|
||||
|
||||
(*v).push(id);
|
||||
}
|
||||
Arg(_, _, by_ref) | Arg(_, _, by_mutbl_ref) |
|
||||
Arg(_, _, by_ref) |
|
||||
Arg(_, _, by_val) | Self | Field(_) | ImplicitRet |
|
||||
Local(LocalInfo {kind: FromMatch(bind_by_implicit_ref), _}) => {
|
||||
debug!("--but it is not owned");
|
||||
@@ -919,7 +919,7 @@ impl Liveness {
|
||||
// inputs passed by & mode should be considered live on exit:
|
||||
for decl.inputs.each |arg| {
|
||||
match ty::resolved_mode(self.tcx, arg.mode) {
|
||||
by_mutbl_ref | by_ref | by_val => {
|
||||
by_ref | by_val => {
|
||||
// These are "non-owned" modes, so register a read at
|
||||
// the end. This will prevent us from moving out of
|
||||
// such variables but also prevent us from registering
|
||||
@@ -1573,7 +1573,7 @@ fn check_expr(expr: @expr, &&self: @Liveness, vt: vt<@Liveness>) {
|
||||
let targs = ty::ty_fn_args(ty::expr_ty(self.tcx, f));
|
||||
for vec::each2(args, targs) |arg_expr, arg_ty| {
|
||||
match ty::resolved_mode(self.tcx, arg_ty.mode) {
|
||||
by_val | by_copy | by_ref | by_mutbl_ref => {}
|
||||
by_val | by_copy | by_ref => {}
|
||||
by_move => {
|
||||
self.check_move_from_expr(*arg_expr, vt);
|
||||
}
|
||||
@@ -1865,24 +1865,7 @@ impl @Liveness {
|
||||
fn warn_about_unused_args(sp: span, decl: fn_decl, entry_ln: LiveNode) {
|
||||
for decl.inputs.each |arg| {
|
||||
let var = self.variable(arg.id, arg.ty.span);
|
||||
match ty::resolved_mode(self.tcx, arg.mode) {
|
||||
by_mutbl_ref => {
|
||||
// for mutable reference arguments, something like
|
||||
// x = 1;
|
||||
// is not worth warning about, as it has visible
|
||||
// side effects outside the fn.
|
||||
match self.assigned_on_entry(entry_ln, var) {
|
||||
Some(_) => { /*ok*/ }
|
||||
None => {
|
||||
// but if it is not written, it ought to be used
|
||||
self.warn_about_unused(sp, entry_ln, var);
|
||||
}
|
||||
}
|
||||
}
|
||||
by_val | by_ref | by_move | by_copy => {
|
||||
self.warn_about_unused(sp, entry_ln, var);
|
||||
}
|
||||
}
|
||||
self.warn_about_unused(sp, entry_ln, var);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -523,9 +523,6 @@ impl &mem_categorization_ctxt {
|
||||
// m: mutability of the argument
|
||||
// lp: loan path, must be none for aliasable things
|
||||
let {m,lp} = match ty::resolved_mode(self.tcx, mode) {
|
||||
ast::by_mutbl_ref => {
|
||||
{m: m_mutbl, lp: None}
|
||||
}
|
||||
ast::by_move | ast::by_copy => {
|
||||
{m: m_imm, lp: Some(@lp_arg(vid))}
|
||||
}
|
||||
|
||||
@@ -1503,7 +1503,7 @@ fn copy_args_to_allocas(fcx: fn_ctxt,
|
||||
// the event it's not truly needed.
|
||||
let llarg;
|
||||
match ty::resolved_mode(tcx, arg_ty.mode) {
|
||||
ast::by_ref | ast::by_mutbl_ref => {
|
||||
ast::by_ref => {
|
||||
llarg = raw_llarg;
|
||||
}
|
||||
ast::by_move | ast::by_copy => {
|
||||
|
||||
@@ -592,7 +592,7 @@ fn trans_arg_expr(bcx: block,
|
||||
DoAutorefArg => { val = arg_datum.to_ref_llval(bcx); }
|
||||
DontAutorefArg => {
|
||||
match arg_mode {
|
||||
ast::by_ref | ast::by_mutbl_ref => {
|
||||
ast::by_ref => {
|
||||
val = arg_datum.to_ref_llval(bcx);
|
||||
}
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ fn trans_method_callee(bcx: block, callee_id: ast::node_id,
|
||||
typeck::method_trait(_, off, vstore) => {
|
||||
trans_trait_callee(bcx, callee_id, off, self, vstore)
|
||||
}
|
||||
typeck::method_self(_, off) => {
|
||||
typeck::method_self(*) => {
|
||||
bcx.tcx().sess.span_bug(self.span, ~"self method call");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,7 +210,6 @@ impl reflector {
|
||||
ast::expl(e) => match e {
|
||||
ast::by_ref => 1u,
|
||||
ast::by_val => 2u,
|
||||
ast::by_mutbl_ref => 3u,
|
||||
ast::by_move => 4u,
|
||||
ast::by_copy => 5u
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
|
||||
by_val | by_move | by_copy => {
|
||||
type_needs(cx, use_repr, arg.ty);
|
||||
}
|
||||
by_ref | by_mutbl_ref => {}
|
||||
by_ref => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user