diff options
| author | Lukas Markeffsky <@> | 2023-07-05 20:44:24 +0200 |
|---|---|---|
| committer | Lukas Markeffsky <@> | 2023-07-06 13:15:05 +0000 |
| commit | 7aa5f39d3b55eb746d9d64244ed5343874807ac4 (patch) | |
| tree | aaa24ada6be615e676ccb6046bf876f95a37dae0 /compiler/rustc_middle/src/ty | |
| parent | e3de14e46396694e48bfecf963fe9fa8e8a90d86 (diff) | |
| download | rust-7aa5f39d3b55eb746d9d64244ed5343874807ac4.tar.gz rust-7aa5f39d3b55eb746d9d64244ed5343874807ac4.zip | |
add helper methods for accessing struct tail
Diffstat (limited to 'compiler/rustc_middle/src/ty')
| -rw-r--r-- | compiler/rustc_middle/src/ty/mod.rs | 16 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/ty/util.rs | 4 |
2 files changed, 18 insertions, 2 deletions
diff --git a/compiler/rustc_middle/src/ty/mod.rs b/compiler/rustc_middle/src/ty/mod.rs index c100c45b61a..9a28122535d 100644 --- a/compiler/rustc_middle/src/ty/mod.rs +++ b/compiler/rustc_middle/src/ty/mod.rs @@ -2028,6 +2028,22 @@ impl VariantDef { &self.fields[FieldIdx::from_u32(0)] } + + /// Returns the last field in this variant, if present. + #[inline] + pub fn tail_opt(&self) -> Option<&FieldDef> { + self.fields.raw.last() + } + + /// Returns the last field in this variant. + /// + /// # Panics + /// + /// Panics, if the variant has no fields. + #[inline] + pub fn tail(&self) -> &FieldDef { + self.tail_opt().expect("expected unsized ADT to have a tail field") + } } impl PartialEq for VariantDef { diff --git a/compiler/rustc_middle/src/ty/util.rs b/compiler/rustc_middle/src/ty/util.rs index 720d770eed4..e2e4a2dbdc8 100644 --- a/compiler/rustc_middle/src/ty/util.rs +++ b/compiler/rustc_middle/src/ty/util.rs @@ -230,7 +230,7 @@ impl<'tcx> TyCtxt<'tcx> { if !def.is_struct() { break; } - match def.non_enum_variant().fields.raw.last() { + match def.non_enum_variant().tail_opt() { Some(field) => { f(); ty = field.ty(self, substs); @@ -304,7 +304,7 @@ impl<'tcx> TyCtxt<'tcx> { (&ty::Adt(a_def, a_substs), &ty::Adt(b_def, b_substs)) if a_def == b_def && a_def.is_struct() => { - if let Some(f) = a_def.non_enum_variant().fields.raw.last() { + if let Some(f) = a_def.non_enum_variant().tail_opt() { a = f.ty(self, a_substs); b = f.ty(self, b_substs); } else { |
