Make generator object debuginfo easier to read
This commit is contained in:
parent
961ba95e5a
commit
6e2e17d115
2 changed files with 21 additions and 12 deletions
|
@ -1333,7 +1333,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
name: if fallback {
|
name: if fallback {
|
||||||
String::new()
|
String::new()
|
||||||
} else {
|
} else {
|
||||||
variant_info.name_as_string()
|
variant_info.variant_name()
|
||||||
},
|
},
|
||||||
type_metadata: variant_type_metadata,
|
type_metadata: variant_type_metadata,
|
||||||
offset: Size::ZERO,
|
offset: Size::ZERO,
|
||||||
|
@ -1388,7 +1388,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
name: if fallback {
|
name: if fallback {
|
||||||
String::new()
|
String::new()
|
||||||
} else {
|
} else {
|
||||||
variant_info.name_as_string()
|
variant_info.variant_name()
|
||||||
},
|
},
|
||||||
type_metadata: variant_type_metadata,
|
type_metadata: variant_type_metadata,
|
||||||
offset: Size::ZERO,
|
offset: Size::ZERO,
|
||||||
|
@ -1455,7 +1455,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
self.layout,
|
self.layout,
|
||||||
self.layout.fields.offset(discr_index),
|
self.layout.fields.offset(discr_index),
|
||||||
self.layout.field(cx, discr_index).size);
|
self.layout.field(cx, discr_index).size);
|
||||||
variant_info_for(*niche_variants.start()).map_name(|variant_name| {
|
variant_info_for(*niche_variants.start()).map_struct_name(|variant_name| {
|
||||||
name.push_str(variant_name);
|
name.push_str(variant_name);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1506,7 +1506,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
|
||||||
};
|
};
|
||||||
|
|
||||||
MemberDescription {
|
MemberDescription {
|
||||||
name: variant_info.name_as_string(),
|
name: variant_info.variant_name(),
|
||||||
type_metadata: variant_type_metadata,
|
type_metadata: variant_type_metadata,
|
||||||
offset: Size::ZERO,
|
offset: Size::ZERO,
|
||||||
size: self.layout.size,
|
size: self.layout.size,
|
||||||
|
@ -1571,7 +1571,7 @@ enum VariantInfo<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> VariantInfo<'tcx> {
|
impl<'tcx> VariantInfo<'tcx> {
|
||||||
fn map_name<R>(&self, f: impl FnOnce(&str) -> R) -> R {
|
fn map_struct_name<R>(&self, f: impl FnOnce(&str) -> R) -> R {
|
||||||
match self {
|
match self {
|
||||||
VariantInfo::Adt(variant) => f(&variant.ident.as_str()),
|
VariantInfo::Adt(variant) => f(&variant.ident.as_str()),
|
||||||
VariantInfo::Generator(substs, variant_index) =>
|
VariantInfo::Generator(substs, variant_index) =>
|
||||||
|
@ -1579,8 +1579,17 @@ impl<'tcx> VariantInfo<'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn name_as_string(&self) -> String {
|
fn variant_name(&self) -> String {
|
||||||
self.map_name(|name| name.to_string())
|
match self {
|
||||||
|
VariantInfo::Adt(variant) => variant.ident.to_string(),
|
||||||
|
VariantInfo::Generator(_, variant_index) => {
|
||||||
|
// Since GDB currently prints out the raw discriminant along
|
||||||
|
// with every variant, make each variant name be just the value
|
||||||
|
// of the discriminant. The struct name for the variant includes
|
||||||
|
// the actual variant description.
|
||||||
|
format!("{}", variant_index.as_usize()).to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn field_name(&self, i: usize) -> String {
|
fn field_name(&self, i: usize) -> String {
|
||||||
|
@ -1604,7 +1613,7 @@ fn describe_enum_variant(
|
||||||
containing_scope: &'ll DIScope,
|
containing_scope: &'ll DIScope,
|
||||||
span: Span,
|
span: Span,
|
||||||
) -> (&'ll DICompositeType, MemberDescriptionFactory<'ll, 'tcx>) {
|
) -> (&'ll DICompositeType, MemberDescriptionFactory<'ll, 'tcx>) {
|
||||||
let metadata_stub = variant.map_name(|variant_name| {
|
let metadata_stub = variant.map_struct_name(|variant_name| {
|
||||||
let unique_type_id = debug_context(cx).type_map
|
let unique_type_id = debug_context(cx).type_map
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
.get_unique_type_id_of_enum_variant(
|
.get_unique_type_id_of_enum_variant(
|
||||||
|
|
|
@ -10,16 +10,16 @@
|
||||||
|
|
||||||
// gdb-command:run
|
// gdb-command:run
|
||||||
// gdb-command:print b
|
// gdb-command:print b
|
||||||
// gdb-check:$1 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 0, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#4: generator_objects::main::generator::variant#4 ([...])}}
|
// gdb-check:$1 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 0, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]), 4: generator_objects::main::generator::variant#4 ([...])}}
|
||||||
// gdb-command:continue
|
// gdb-command:continue
|
||||||
// gdb-command:print b
|
// gdb-command:print b
|
||||||
// gdb-check:$2 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 3, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 (6, 7), variant#4: generator_objects::main::generator::variant#4 ([...])}}
|
// gdb-check:$2 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 3, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 (6, 7), 4: generator_objects::main::generator::variant#4 ([...])}}
|
||||||
// gdb-command:continue
|
// gdb-command:continue
|
||||||
// gdb-command:print b
|
// gdb-command:print b
|
||||||
// gdb-check:$3 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 4, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#4: generator_objects::main::generator::variant#4 (7, 8)}}
|
// gdb-check:$3 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 4, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]), 4: generator_objects::main::generator::variant#4 (7, 8)}}
|
||||||
// gdb-command:continue
|
// gdb-command:continue
|
||||||
// gdb-command:print b
|
// gdb-command:print b
|
||||||
// gdb-check:$4 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 1, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#4: generator_objects::main::generator::variant#4 ([...])}}
|
// gdb-check:$4 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 1, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]), 4: generator_objects::main::generator::variant#4 ([...])}}
|
||||||
|
|
||||||
// === LLDB TESTS ==================================================================================
|
// === LLDB TESTS ==================================================================================
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue