Skip to content

Commit

Permalink
rustdoc: Use ThinVec in GenericParamDefKind
Browse files Browse the repository at this point in the history
This should hopefully reduce memory usage and improve performance since
these vectors are often empty.
  • Loading branch information
camelid committed Oct 29, 2023
1 parent 2cad938 commit 0039153
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
12 changes: 6 additions & 6 deletions src/librustdoc/clean/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ fn clean_generic_param_def<'tcx>(
) -> GenericParamDef {
let (name, kind) = match def.kind {
ty::GenericParamDefKind::Lifetime => {
(def.name, GenericParamDefKind::Lifetime { outlives: vec![] })
(def.name, GenericParamDefKind::Lifetime { outlives: ThinVec::new() })
}
ty::GenericParamDefKind::Type { has_default, synthetic, .. } => {
let default = if has_default {
Expand All @@ -515,7 +515,7 @@ fn clean_generic_param_def<'tcx>(
def.name,
GenericParamDefKind::Type {
did: def.def_id,
bounds: vec![], // These are filled in from the where-clauses.
bounds: ThinVec::new(), // These are filled in from the where-clauses.
default: default.map(Box::new),
synthetic,
},
Expand Down Expand Up @@ -567,7 +567,7 @@ fn clean_generic_param<'tcx>(
})
.collect()
} else {
Vec::new()
ThinVec::new()
};
(param.name.ident().name, GenericParamDefKind::Lifetime { outlives })
}
Expand All @@ -580,7 +580,7 @@ fn clean_generic_param<'tcx>(
.filter_map(|x| clean_generic_bound(x, cx))
.collect()
} else {
Vec::new()
ThinVec::new()
};
(
param.name.ident().name,
Expand Down Expand Up @@ -636,7 +636,7 @@ pub(crate) fn clean_generics<'tcx>(
match param.kind {
GenericParamDefKind::Lifetime { .. } => unreachable!(),
GenericParamDefKind::Type { did, ref bounds, .. } => {
cx.impl_trait_bounds.insert(did.into(), bounds.clone());
cx.impl_trait_bounds.insert(did.into(), bounds.to_vec());
}
GenericParamDefKind::Const { .. } => unreachable!(),
}
Expand Down Expand Up @@ -3146,7 +3146,7 @@ fn clean_bound_vars<'tcx>(
name,
kind: GenericParamDefKind::Type {
did,
bounds: Vec::new(),
bounds: ThinVec::new(),
default: None,
synthetic: false,
},
Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/clean/simplify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ pub(crate) fn move_bounds_to_generic_parameters(generics: &mut clean::Generics)
..
}) = generics.params.iter_mut().find(|param| &param.name == arg)
{
param_bounds.append(bounds);
param_bounds.extend(bounds.drain(..));
} else if let WherePredicate::RegionPredicate { lifetime: Lifetime(arg), bounds } = &mut pred
&& let Some(GenericParamDef {
kind: GenericParamDefKind::Lifetime { outlives: param_bounds },
Expand Down
6 changes: 3 additions & 3 deletions src/librustdoc/clean/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1325,8 +1325,8 @@ impl WherePredicate {

#[derive(Clone, PartialEq, Eq, Debug, Hash)]
pub(crate) enum GenericParamDefKind {
Lifetime { outlives: Vec<Lifetime> },
Type { did: DefId, bounds: Vec<GenericBound>, default: Option<Box<Type>>, synthetic: bool },
Lifetime { outlives: ThinVec<Lifetime> },
Type { did: DefId, bounds: ThinVec<GenericBound>, default: Option<Box<Type>>, synthetic: bool },
Const { ty: Box<Type>, default: Option<Box<String>>, is_host_effect: bool },
}

Expand All @@ -1344,7 +1344,7 @@ pub(crate) struct GenericParamDef {

impl GenericParamDef {
pub(crate) fn lifetime(name: Symbol) -> Self {
Self { name, kind: GenericParamDefKind::Lifetime { outlives: Vec::new() } }
Self { name, kind: GenericParamDefKind::Lifetime { outlives: ThinVec::new() } }
}

pub(crate) fn is_synthetic_param(&self) -> bool {
Expand Down

0 comments on commit 0039153

Please sign in to comment.