Don't create strings in the fast path
This commit is contained in:
parent
88d1109600
commit
4b19c80819
@ -1318,10 +1318,10 @@ fn add_predicates_for_ast_type_binding(
|
||||
// those that do.
|
||||
self.one_bound_for_assoc_type(
|
||||
|| traits::supertraits(tcx, trait_ref),
|
||||
&trait_ref.print_only_trait_path().to_string(),
|
||||
|| trait_ref.print_only_trait_path().to_string(),
|
||||
binding.item_name,
|
||||
path_span,
|
||||
match binding.kind {
|
||||
|| match binding.kind {
|
||||
ConvertedBindingKind::Equality(ty) => Some(ty.to_string()),
|
||||
_ => None,
|
||||
},
|
||||
@ -1878,10 +1878,10 @@ fn find_bound_for_assoc_item(
|
||||
predicates.iter().filter_map(|(p, _)| p.to_opt_poly_trait_ref()),
|
||||
)
|
||||
},
|
||||
¶m_name.as_str(),
|
||||
|| param_name.to_string(),
|
||||
assoc_name,
|
||||
span,
|
||||
None,
|
||||
|| None,
|
||||
)
|
||||
}
|
||||
|
||||
@ -1890,10 +1890,10 @@ fn find_bound_for_assoc_item(
|
||||
fn one_bound_for_assoc_type<I>(
|
||||
&self,
|
||||
all_candidates: impl Fn() -> I,
|
||||
ty_param_name: &str,
|
||||
ty_param_name: impl Fn() -> String,
|
||||
assoc_name: ast::Ident,
|
||||
span: Span,
|
||||
is_equality: Option<String>,
|
||||
is_equality: impl Fn() -> Option<String>,
|
||||
) -> Result<ty::PolyTraitRef<'tcx>, ErrorReported>
|
||||
where
|
||||
I: Iterator<Item = ty::PolyTraitRef<'tcx>>,
|
||||
@ -1906,7 +1906,7 @@ fn one_bound_for_assoc_type<I>(
|
||||
None => {
|
||||
self.complain_about_assoc_type_not_found(
|
||||
all_candidates,
|
||||
ty_param_name,
|
||||
&ty_param_name(),
|
||||
assoc_name,
|
||||
span,
|
||||
);
|
||||
@ -1919,6 +1919,7 @@ fn one_bound_for_assoc_type<I>(
|
||||
if let Some(bound2) = matching_candidates.next() {
|
||||
debug!("one_bound_for_assoc_type: bound2 = {:?}", bound2);
|
||||
|
||||
let is_equality = is_equality();
|
||||
let bounds = iter::once(bound).chain(iter::once(bound2)).chain(matching_candidates);
|
||||
let mut err = if is_equality.is_some() {
|
||||
// More specific Error Index entry.
|
||||
@ -1928,7 +1929,7 @@ fn one_bound_for_assoc_type<I>(
|
||||
E0222,
|
||||
"ambiguous associated type `{}` in bounds of `{}`",
|
||||
assoc_name,
|
||||
ty_param_name
|
||||
ty_param_name()
|
||||
)
|
||||
} else {
|
||||
struct_span_err!(
|
||||
@ -1937,7 +1938,7 @@ fn one_bound_for_assoc_type<I>(
|
||||
E0221,
|
||||
"ambiguous associated type `{}` in bounds of `{}`",
|
||||
assoc_name,
|
||||
ty_param_name
|
||||
ty_param_name()
|
||||
)
|
||||
};
|
||||
err.span_label(span, format!("ambiguous associated type `{}`", assoc_name));
|
||||
@ -1975,7 +1976,7 @@ fn one_bound_for_assoc_type<I>(
|
||||
"use fully qualified syntax to disambiguate",
|
||||
format!(
|
||||
"<{} as {}>::{}",
|
||||
ty_param_name,
|
||||
ty_param_name(),
|
||||
bound.print_only_trait_path(),
|
||||
assoc_name,
|
||||
),
|
||||
@ -1985,7 +1986,7 @@ fn one_bound_for_assoc_type<I>(
|
||||
} else {
|
||||
err.note(&format!(
|
||||
"associated type `{}` could derive from `{}`",
|
||||
ty_param_name,
|
||||
ty_param_name(),
|
||||
bound.print_only_trait_path(),
|
||||
));
|
||||
}
|
||||
@ -1994,7 +1995,7 @@ fn one_bound_for_assoc_type<I>(
|
||||
err.help(&format!(
|
||||
"consider introducing a new type parameter `T` and adding `where` constraints:\
|
||||
\n where\n T: {},\n{}",
|
||||
ty_param_name,
|
||||
ty_param_name(),
|
||||
where_bounds.join(",\n"),
|
||||
));
|
||||
}
|
||||
@ -2108,10 +2109,10 @@ pub fn associated_path_to_ty(
|
||||
|
||||
self.one_bound_for_assoc_type(
|
||||
|| traits::supertraits(tcx, ty::Binder::bind(trait_ref)),
|
||||
"Self",
|
||||
|| "Self".to_string(),
|
||||
assoc_ident,
|
||||
span,
|
||||
None,
|
||||
|| None,
|
||||
)?
|
||||
}
|
||||
(&ty::Param(_), Res::SelfTy(Some(param_did), None))
|
||||
|
Loading…
Reference in New Issue
Block a user