Change default mode for fns to be by-copy, except for fn&

This commit is contained in:
Tim Chevalier 2012-10-03 16:34:14 -07:00
parent a1ab0cd6a8
commit 53906bb4fb
1 changed files with 9 additions and 6 deletions

View File

@ -1093,12 +1093,15 @@ pure fn mach_sty(cfg: @session::config, t: t) -> sty {
}
fn default_arg_mode_for_ty(tcx: ctxt, ty: ty::t) -> ast::rmode {
return if type_is_fn(ty) {
// ^^^^^^^^^^^^^^
// FIXME(#2202) --- We retain by-ref by default to workaround a memory
// leak that otherwise results when @fn is upcast to &fn.
ast::by_ref
} else if tcx.legacy_modes {
// FIXME(#2202) --- We retain by-ref for fn& things to workaround a
// memory leak that otherwise results when @fn is upcast to &fn.
if type_is_fn(ty) {
match ty_fn_proto(ty) {
proto_vstore(vstore_slice(_)) => return ast::by_ref,
_ => ()
}
}
return if tcx.legacy_modes {
if type_is_borrowed(ty) {
// the old mode default was ++ for things like &ptr, but to be
// forward-compatible with non-legacy, we should use +