Vigorously refactor _session::code_stats (nfc)
This commit is contained in:
parent
de66e08957
commit
d3ca9ba123
1 changed files with 11 additions and 19 deletions
|
@ -91,10 +91,10 @@ impl CodeStats {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
for info in &sorted {
|
for info in sorted {
|
||||||
|
let TypeSizeInfo { type_description, overall_size, align, kind, variants, .. } = info;
|
||||||
println!(
|
println!(
|
||||||
"print-type-size type: `{}`: {} bytes, alignment: {} bytes",
|
"print-type-size type: `{type_description}`: {overall_size} bytes, alignment: {align} bytes"
|
||||||
info.type_description, info.overall_size, info.align
|
|
||||||
);
|
);
|
||||||
let indent = " ";
|
let indent = " ";
|
||||||
|
|
||||||
|
@ -111,11 +111,11 @@ impl CodeStats {
|
||||||
// to reflect the presence of the discriminant.
|
// to reflect the presence of the discriminant.
|
||||||
let mut max_variant_size = discr_size;
|
let mut max_variant_size = discr_size;
|
||||||
|
|
||||||
let struct_like = match info.kind {
|
let struct_like = match kind {
|
||||||
DataTypeKind::Struct | DataTypeKind::Closure => true,
|
DataTypeKind::Struct | DataTypeKind::Closure => true,
|
||||||
DataTypeKind::Enum | DataTypeKind::Union => false,
|
DataTypeKind::Enum | DataTypeKind::Union => false,
|
||||||
};
|
};
|
||||||
for (i, variant_info) in info.variants.iter().enumerate() {
|
for (i, variant_info) in variants.into_iter().enumerate() {
|
||||||
let VariantInfo { ref name, kind: _, align: _, size, ref fields } = *variant_info;
|
let VariantInfo { ref name, kind: _, align: _, size, ref fields } = *variant_info;
|
||||||
let indent = if !struct_like {
|
let indent = if !struct_like {
|
||||||
let name = match name.as_ref() {
|
let name = match name.as_ref() {
|
||||||
|
@ -142,8 +142,8 @@ impl CodeStats {
|
||||||
let mut fields = fields.clone();
|
let mut fields = fields.clone();
|
||||||
fields.sort_by_key(|f| (f.offset, f.size));
|
fields.sort_by_key(|f| (f.offset, f.size));
|
||||||
|
|
||||||
for field in fields.iter() {
|
for field in fields {
|
||||||
let FieldInfo { ref name, offset, size, align } = *field;
|
let FieldInfo { ref name, offset, size, align } = field;
|
||||||
|
|
||||||
if offset > min_offset {
|
if offset > min_offset {
|
||||||
let pad = offset - min_offset;
|
let pad = offset - min_offset;
|
||||||
|
@ -171,18 +171,10 @@ impl CodeStats {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert!(
|
match overall_size.checked_sub(max_variant_size) {
|
||||||
max_variant_size <= info.overall_size,
|
None => panic!("max_variant_size {max_variant_size} > {overall_size} overall_size"),
|
||||||
"max_variant_size {} !<= {} overall_size",
|
Some(diff @ 1..) => println!("print-type-size {indent}end padding: {diff} bytes"),
|
||||||
max_variant_size,
|
Some(0) => {}
|
||||||
info.overall_size
|
|
||||||
);
|
|
||||||
if max_variant_size < info.overall_size {
|
|
||||||
println!(
|
|
||||||
"print-type-size {}end padding: {} bytes",
|
|
||||||
indent,
|
|
||||||
info.overall_size - max_variant_size
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue