tidy things up a bit
This commit is contained in:
parent
e06cd316a4
commit
0a3a46d3b6
|
@ -59,7 +59,9 @@ impl ObjectSafetyViolation {
|
|||
ObjectSafetyViolation::Method(name, MethodViolationCode::Generic) =>
|
||||
format!("method `{}` has generic type parameters", name).into(),
|
||||
ObjectSafetyViolation::Method(name, MethodViolationCode::NonStandardSelfType) =>
|
||||
format!("method `{}` has a non-standard `self` type. Only `&self`, `&mut self`, and `Box<Self>` are currently supported for trait objects", name).into(),
|
||||
format!("method `{}` has a non-standard `self` type. Only `&self`, \
|
||||
`&mut self`, and `Box<Self>` are currently supported \
|
||||
for trait objects", name).into(),
|
||||
ObjectSafetyViolation::AssociatedConst(name) =>
|
||||
format!("the trait cannot contain associated consts like `{}`", name).into(),
|
||||
}
|
||||
|
|
|
@ -1222,7 +1222,9 @@ impl<'tcx> ExplicitSelf<'tcx> {
|
|||
|
||||
match self_arg_ty.sty {
|
||||
_ if is_self_ty(self_arg_ty) => ByValue,
|
||||
ty::TyRef(region, ty::TypeAndMut { ty, mutbl}) if is_self_ty(ty) => ByReference(region, mutbl),
|
||||
ty::TyRef(region, ty::TypeAndMut { ty, mutbl}) if is_self_ty(ty) => {
|
||||
ByReference(region, mutbl)
|
||||
}
|
||||
ty::TyAdt(def, _) if def.is_box() && is_self_ty(self_arg_ty.boxed_ty()) => ByBox,
|
||||
_ => Other
|
||||
}
|
||||
|
|
|
@ -487,7 +487,8 @@ impl<'a, 'gcx> CheckTypeWellFormedVisitor<'a, 'gcx> {
|
|||
|
||||
loop {
|
||||
if let Some((potential_self_ty, _)) = autoderef.next() {
|
||||
debug!("check_method_receiver: potential self type `{:?}` to match `{:?}`", potential_self_ty, self_ty);
|
||||
debug!("check_method_receiver: potential self type `{:?}` to match `{:?}`",
|
||||
potential_self_ty, self_ty);
|
||||
|
||||
if fcx.infcx.can_eq(fcx.param_env, self_ty, potential_self_ty).is_ok() {
|
||||
autoderef.finalize();
|
||||
|
@ -497,7 +498,8 @@ impl<'a, 'gcx> CheckTypeWellFormedVisitor<'a, 'gcx> {
|
|||
break
|
||||
}
|
||||
} else {
|
||||
fcx.tcx.sess.diagnostic().mut_span_err(span, &format!("invalid `self` type: {:?}", self_arg_ty))
|
||||
fcx.tcx.sess.diagnostic().mut_span_err(
|
||||
span, &format!("invalid `self` type: {:?}", self_arg_ty))
|
||||
.note(&format!("type must be `{:?}` or a type that dereferences to it`", self_ty))
|
||||
.help("consider changing to `self`, `&self`, `&mut self`, or `self: Box<Self>`")
|
||||
.code(DiagnosticId::Error("E0307".into()))
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
#![feature(arbitrary_self_types)]
|
||||
|
||||
use std::rc::Rc;
|
||||
|
@ -35,7 +44,8 @@ fn make_foo() {
|
|||
//~| ERROR E0038
|
||||
//~| NOTE method `foo` has a non-standard `self` type
|
||||
//~| NOTE the trait `Foo` cannot be made into an object
|
||||
//~| NOTE required because of the requirements on the impl of `std::ops::CoerceUnsized<std::boxed::Box<Foo>>` for `std::boxed::Box<usize>`
|
||||
//~| NOTE required because of the requirements on the impl of
|
||||
//~| `std::ops::CoerceUnsized<std::boxed::Box<Foo>>` for `std::boxed::Box<usize>`
|
||||
}
|
||||
|
||||
fn make_bar() {
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::rc::Rc;
|
||||
|
||||
trait Foo {
|
||||
|
|
Loading…
Reference in New Issue