1
Fork 0

Store a Symbol instead of an Ident in VariantDef/FieldDef

The field is also renamed from `ident` to `name. In most cases,
we don't actually need the `Span`. A new `ident` method is added
to `VariantDef` and `FieldDef`, which constructs the full `Ident`
using `tcx.def_ident_span()`. This method is used in the cases
where we actually need an `Ident`.

This makes incremental compilation properly track changes
to the `Span`, without all of the invalidations caused by storing
a `Span` directly via an `Ident`.
This commit is contained in:
Aaron Hill 2022-01-02 22:37:05 -05:00
parent e4b1d58414
commit 450ef8613c
No known key found for this signature in database
GPG key ID: B4087E510E98B164
38 changed files with 120 additions and 107 deletions

View file

@ -2439,7 +2439,7 @@ impl<'tcx> Debug for Rvalue<'tcx> {
CtorKind::Fictive => {
let mut struct_fmt = fmt.debug_struct(&name);
for (field, place) in iter::zip(&variant_def.fields, places) {
struct_fmt.field(field.ident.as_str(), place);
struct_fmt.field(field.name.as_str(), place);
}
struct_fmt.finish()
}
@ -2785,7 +2785,7 @@ impl UserTypeProjection {
field: Field,
) -> Self {
self.projs.push(ProjectionElem::Downcast(
Some(adt_def.variants[variant_index].ident.name),
Some(adt_def.variants[variant_index].name),
variant_index,
));
self.projs.push(ProjectionElem::Field(field, ()));