-struct FieldInfo {
- ind: usize,
- size: u64,
-}
-
-struct VariantInfo {
- ind: usize,
- size: u64,
- fields_size: Vec<FieldInfo>,
-}
-
-fn variants_size<'tcx>(
- cx: &LateContext<'tcx>,
- adt: AdtDef<'tcx>,
- subst: &'tcx List<GenericArg<'tcx>>,
-) -> Vec<VariantInfo> {
- let mut variants_size = adt
- .variants()
- .iter()
- .enumerate()
- .map(|(i, variant)| {
- let mut fields_size = variant
- .fields
- .iter()
- .enumerate()
- .map(|(i, f)| FieldInfo {
- ind: i,
- size: approx_ty_size(cx, f.ty(cx.tcx, subst)),
- })
- .collect::<Vec<_>>();
- fields_size.sort_by(|a, b| (a.size.cmp(&b.size)));
-
- VariantInfo {
- ind: i,
- size: fields_size.iter().map(|info| info.size).sum(),
- fields_size,
- }
- })
- .collect::<Vec<_>>();
- variants_size.sort_by(|a, b| (b.size.cmp(&a.size)));
- variants_size
-}
-