diff options
| author | bors <bors@rust-lang.org> | 2021-09-04 18:18:00 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-09-04 18:18:00 +0000 |
| commit | b89e01cd8e831f4e831dd6dd9596488509fe1802 (patch) | |
| tree | b44bb9c3622c8609c237f62bb7e306bd230a1fbd | |
| parent | 226e181b80fa0be755872b66916ef7e704601ec2 (diff) | |
| parent | 5c0e6c18e1b2d71697ccfaf8e593922b7d220c2f (diff) | |
| download | rust-b89e01cd8e831f4e831dd6dd9596488509fe1802.tar.gz rust-b89e01cd8e831f4e831dd6dd9596488509fe1802.zip | |
Auto merge of #88574 - camelid:box-genericarg-const, r=GuillaumeGomez
rustdoc: Box `GenericArg::Const` to reduce enum size This should reduce the amount of memory allocated in the common cases where the `GenericArg` is a lifetime or type.
| -rw-r--r-- | src/librustdoc/clean/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustdoc/clean/types.rs | 7 | ||||
| -rw-r--r-- | src/librustdoc/clean/utils.rs | 2 | ||||
| -rw-r--r-- | src/librustdoc/json/conversions.rs | 2 |
4 files changed, 9 insertions, 4 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index a9baa1c31ae..d06506803c2 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1789,7 +1789,7 @@ impl Clean<GenericArgs> for hir::GenericArgs<'_> { } hir::GenericArg::Lifetime(_) => GenericArg::Lifetime(Lifetime::elided()), hir::GenericArg::Type(ty) => GenericArg::Type(ty.clean(cx)), - hir::GenericArg::Const(ct) => GenericArg::Const(ct.clean(cx)), + hir::GenericArg::Const(ct) => GenericArg::Const(Box::new(ct.clean(cx))), hir::GenericArg::Infer(_inf) => GenericArg::Infer, }) .collect(), diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 36b862120a2..47176070f65 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -2012,10 +2012,15 @@ impl Path { crate enum GenericArg { Lifetime(Lifetime), Type(Type), - Const(Constant), + Const(Box<Constant>), Infer, } +// `GenericArg` can occur many times in a single `Path`, so make sure it +// doesn't increase in size unexpectedly. +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))] +rustc_data_structures::static_assert_size!(GenericArg, 80); + #[derive(Clone, PartialEq, Eq, Debug, Hash)] crate enum GenericArgs { AngleBracketed { args: Vec<GenericArg>, bindings: Vec<TypeBinding> }, diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index bdfe3ffc13f..de2cd60d2ed 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -121,7 +121,7 @@ fn external_generic_args( ty_kind = Some(ty.kind()); Some(GenericArg::Type(ty.clean(cx))) } - GenericArgKind::Const(ct) => Some(GenericArg::Const(ct.clean(cx))), + GenericArgKind::Const(ct) => Some(GenericArg::Const(Box::new(ct.clean(cx)))), }) .collect(); diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index 228d718411f..46eeee8e3a4 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -139,7 +139,7 @@ impl FromWithTcx<clean::GenericArg> for GenericArg { match arg { Lifetime(l) => GenericArg::Lifetime(l.0.to_string()), Type(t) => GenericArg::Type(t.into_tcx(tcx)), - Const(c) => GenericArg::Const(c.into_tcx(tcx)), + Const(box c) => GenericArg::Const(c.into_tcx(tcx)), Infer => GenericArg::Infer, } } |
