Convert some <InternedSlice>::new_from_iter() to new_from_slice()

It's faster, when you have a slice available.
This commit is contained in:
Chayim Refael Friedman 2025-12-18 03:29:12 +02:00
parent dc81edaa9e
commit d92e6c9688
10 changed files with 22 additions and 40 deletions

View file

@ -780,7 +780,7 @@ impl<'db> InferenceContext<'_, 'db> {
Ty::new_adt(
self.interner(),
adt,
GenericArgs::new_from_iter(self.interner(), [GenericArg::from(ty)]),
GenericArgs::new_from_slice(&[GenericArg::from(ty)]),
)
};
match (range_type, lhs_ty, rhs_ty) {
@ -2164,10 +2164,8 @@ impl<'db> InferenceContext<'_, 'db> {
if let ItemContainerId::TraitId(trait_) = f.lookup(self.db).container {
// construct a TraitRef
let trait_params_len = generics(self.db, trait_.into()).len();
let substs = GenericArgs::new_from_iter(
self.interner(),
parameters.as_slice()[..trait_params_len].iter().copied(),
);
let substs =
GenericArgs::new_from_slice(&parameters.as_slice()[..trait_params_len]);
self.table.register_predicate(Obligation::new(
self.interner(),
ObligationCause::new(),

View file

@ -240,10 +240,7 @@ impl<'db> InferenceContext<'_, 'db> {
if let ItemContainerId::TraitId(trait_) = container {
let parent_len = generics(self.db, def).parent_generics().map_or(0, |g| g.len_self());
let parent_subst = GenericArgs::new_from_iter(
interner,
subst.as_slice()[..parent_len].iter().copied(),
);
let parent_subst = GenericArgs::new_from_slice(&subst.as_slice()[..parent_len]);
let trait_ref = TraitRef::new(interner, trait_.into(), parent_subst);
self.table.register_predicate(Obligation::new(
interner,

View file

@ -469,7 +469,7 @@ where
Canonical {
value,
max_universe: rustc_type_ir::UniverseIndex::ZERO,
variables: CanonicalVars::new_from_iter(interner, error_replacer.vars),
variables: CanonicalVars::new_from_slice(&error_replacer.vars),
}
}

View file

@ -2336,10 +2336,7 @@ pub(crate) fn associated_ty_item_bounds<'db>(
Some(ExistentialPredicate::Trait(ExistentialTraitRef::new_from_args(
interner,
t.def_id(),
GenericArgs::new_from_iter(
interner,
t.trait_ref.args.iter().skip(1),
),
GenericArgs::new_from_slice(&t.trait_ref.args[1..]),
)))
}
}
@ -2347,10 +2344,7 @@ pub(crate) fn associated_ty_item_bounds<'db>(
ExistentialPredicate::Projection(ExistentialProjection::new_from_args(
interner,
p.def_id(),
GenericArgs::new_from_iter(
interner,
p.projection_term.args.iter().skip(1),
),
GenericArgs::new_from_slice(&p.projection_term.args[1..]),
p.term,
)),
),
@ -2380,7 +2374,7 @@ pub(crate) fn associated_ty_item_bounds<'db>(
bounds.push(sized_clause);
}
EarlyBinder::bind(BoundExistentialPredicates::new_from_iter(interner, bounds))
EarlyBinder::bind(BoundExistentialPredicates::new_from_slice(&bounds))
}
pub(crate) fn associated_type_by_name_including_super_traits<'db>(

View file

@ -1283,7 +1283,7 @@ pub(crate) fn substs_from_args_and_bindings<'db>(
}
}
GenericArgs::new_from_iter(interner, substs)
GenericArgs::new_from_slice(&substs)
}
fn type_looks_like_const(

View file

@ -392,10 +392,10 @@ pub fn is_dyn_method<'db>(
};
let trait_params = db.generic_params(trait_id.into()).len();
let fn_params = fn_subst.len() - trait_params;
let trait_ref = TraitRef::new(
let trait_ref = TraitRef::new_from_args(
interner,
trait_id.into(),
GenericArgs::new_from_iter(interner, fn_subst.iter().take(trait_params)),
GenericArgs::new_from_slice(&fn_subst[..trait_params]),
);
let self_ty = trait_ref.self_ty();
if let TyKind::Dynamic(d, _) = self_ty.kind() {
@ -427,10 +427,10 @@ pub(crate) fn lookup_impl_method_query<'db>(
return (func, fn_subst);
};
let trait_params = db.generic_params(trait_id.into()).len();
let trait_ref = TraitRef::new(
let trait_ref = TraitRef::new_from_args(
interner,
trait_id.into(),
GenericArgs::new_from_iter(interner, fn_subst.iter().take(trait_params)),
GenericArgs::new_from_slice(&fn_subst[..trait_params]),
);
let name = &db.function_signature(func).name;

View file

@ -698,10 +698,7 @@ impl<'db> rustc_type_ir::inherent::GenericArgs<DbInterner<'db>> for GenericArgs<
let inputs = Ty::new_tup(interner, s.inputs());
let output = s.output();
FnSigTys {
inputs_and_output: Tys::new_from_iter(
interner,
[inputs, output],
),
inputs_and_output: Tys::new_from_slice(&[inputs, output]),
}
}),
header,

View file

@ -562,7 +562,7 @@ impl<'cx, 'db> Canonicalizer<'cx, 'db> {
debug_assert!(!out_value.has_infer() && !out_value.has_placeholders());
let canonical_variables =
CanonicalVars::new_from_iter(tcx, canonicalizer.universe_canonicalized_variables());
CanonicalVars::new_from_slice(&canonicalizer.universe_canonicalized_variables());
let max_universe = canonical_variables
.iter()

View file

@ -21,9 +21,9 @@ use rustc_abi::{ReprFlags, ReprOptions};
use rustc_hash::FxHashSet;
use rustc_index::bit_set::DenseBitSet;
use rustc_type_ir::{
AliasTermKind, AliasTyKind, BoundVar, CollectAndApply, CoroutineWitnessTypes, DebruijnIndex,
EarlyBinder, FlagComputation, Flags, GenericArgKind, GenericTypeVisitable, ImplPolarity,
InferTy, Interner, TraitRef, TypeFlags, TypeVisitableExt, UniverseIndex, Upcast, Variance,
AliasTermKind, AliasTyKind, BoundVar, CoroutineWitnessTypes, DebruijnIndex, EarlyBinder,
FlagComputation, Flags, GenericArgKind, GenericTypeVisitable, ImplPolarity, InferTy, Interner,
TraitRef, TypeFlags, TypeVisitableExt, UniverseIndex, Upcast, Variance,
elaborate::elaborate,
error::TypeError,
fast_reject,
@ -1270,10 +1270,8 @@ impl<'db> Interner for DbInterner<'db> {
) -> (rustc_type_ir::TraitRef<Self>, Self::GenericArgsSlice) {
let trait_def_id = self.parent(def_id);
let trait_generics = self.generics_of(trait_def_id);
let trait_args = GenericArgs::new_from_iter(
self,
args.as_slice()[0..trait_generics.own_params.len()].iter().cloned(),
);
let trait_args =
GenericArgs::new_from_slice(&args.as_slice()[0..trait_generics.own_params.len()]);
let alias_args = &args.as_slice()[trait_generics.own_params.len()..];
(TraitRef::new_from_args(self, trait_def_id.try_into().unwrap(), trait_args), alias_args)
}
@ -2105,9 +2103,7 @@ impl<'db> Interner for DbInterner<'db> {
let mut map = Default::default();
let delegate = Anonymize { interner: self, map: &mut map };
let inner = self.replace_escaping_bound_vars_uncached(value.skip_binder(), delegate);
let bound_vars = CollectAndApply::collect_and_apply(map.into_values(), |xs| {
BoundVarKinds::new_from_iter(self, xs.iter().cloned())
});
let bound_vars = BoundVarKinds::new_from_iter(self, map.into_values());
Binder::bind_with_vars(inner, bound_vars)
}

View file

@ -82,7 +82,7 @@ fn variances_of_query(db: &dyn HirDatabase, def: GenericDefId) -> StoredVariance
}
}
VariancesOf::new_from_iter(interner, variances).store()
VariancesOf::new_from_slice(&variances).store()
}
// pub(crate) fn variances_of_cycle_fn(