diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-03-19 17:47:43 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-03-19 17:47:43 +0000 |
commit | 1ba03c6995015b3143a417ed07437f0c9028a97d (patch) | |
tree | ce3eb047dd9fe9005750a3b1417d95b1aa8fe01e /crates/ra_hir_def/src/adt.rs | |
parent | 988f1dda6bde576ec2457dd97a7525014609c771 (diff) | |
parent | f840fcb2f525c13809d6a736e434155edf075a06 (diff) |
Merge #3656
3656: Simplify arenas r=matklad a=matklad
At the moment, Arena is paranetrized by two types: index and data. The original motivation was to allow index to be defined in the downstream crate, so that you can add inherent impls to the index.
However, it seems like we've never actually used that capability, so perhaps we should switch to a generic Index impl? This PR tries this out, switching only `raw.rs` and parts of `hir_def`.
wdyt?
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_hir_def/src/adt.rs')
-rw-r--r-- | crates/ra_hir_def/src/adt.rs | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/crates/ra_hir_def/src/adt.rs b/crates/ra_hir_def/src/adt.rs index d55c49938..de07fc952 100644 --- a/crates/ra_hir_def/src/adt.rs +++ b/crates/ra_hir_def/src/adt.rs | |||
@@ -27,7 +27,7 @@ pub struct StructData { | |||
27 | #[derive(Debug, Clone, PartialEq, Eq)] | 27 | #[derive(Debug, Clone, PartialEq, Eq)] |
28 | pub struct EnumData { | 28 | pub struct EnumData { |
29 | pub name: Name, | 29 | pub name: Name, |
30 | pub variants: Arena<LocalEnumVariantId, EnumVariantData>, | 30 | pub variants: Arena<EnumVariantData>, |
31 | } | 31 | } |
32 | 32 | ||
33 | #[derive(Debug, Clone, PartialEq, Eq)] | 33 | #[derive(Debug, Clone, PartialEq, Eq)] |
@@ -38,8 +38,8 @@ pub struct EnumVariantData { | |||
38 | 38 | ||
39 | #[derive(Debug, Clone, PartialEq, Eq)] | 39 | #[derive(Debug, Clone, PartialEq, Eq)] |
40 | pub enum VariantData { | 40 | pub enum VariantData { |
41 | Record(Arena<LocalStructFieldId, StructFieldData>), | 41 | Record(Arena<StructFieldData>), |
42 | Tuple(Arena<LocalStructFieldId, StructFieldData>), | 42 | Tuple(Arena<StructFieldData>), |
43 | Unit, | 43 | Unit, |
44 | } | 44 | } |
45 | 45 | ||
@@ -104,7 +104,7 @@ impl HasChildSource for EnumId { | |||
104 | 104 | ||
105 | fn lower_enum( | 105 | fn lower_enum( |
106 | db: &dyn DefDatabase, | 106 | db: &dyn DefDatabase, |
107 | trace: &mut Trace<LocalEnumVariantId, EnumVariantData, ast::EnumVariant>, | 107 | trace: &mut Trace<EnumVariantData, ast::EnumVariant>, |
108 | ast: &InFile<ast::EnumDef>, | 108 | ast: &InFile<ast::EnumDef>, |
109 | ) { | 109 | ) { |
110 | for var in ast.value.variant_list().into_iter().flat_map(|it| it.variants()) { | 110 | for var in ast.value.variant_list().into_iter().flat_map(|it| it.variants()) { |
@@ -128,8 +128,8 @@ impl VariantData { | |||
128 | } | 128 | } |
129 | } | 129 | } |
130 | 130 | ||
131 | pub fn fields(&self) -> &Arena<LocalStructFieldId, StructFieldData> { | 131 | pub fn fields(&self) -> &Arena<StructFieldData> { |
132 | const EMPTY: &Arena<LocalStructFieldId, StructFieldData> = &Arena::new(); | 132 | const EMPTY: &Arena<StructFieldData> = &Arena::new(); |
133 | match &self { | 133 | match &self { |
134 | VariantData::Record(fields) | VariantData::Tuple(fields) => fields, | 134 | VariantData::Record(fields) | VariantData::Tuple(fields) => fields, |
135 | _ => EMPTY, | 135 | _ => EMPTY, |
@@ -183,11 +183,7 @@ pub enum StructKind { | |||
183 | 183 | ||
184 | fn lower_struct( | 184 | fn lower_struct( |
185 | db: &dyn DefDatabase, | 185 | db: &dyn DefDatabase, |
186 | trace: &mut Trace< | 186 | trace: &mut Trace<StructFieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>, |
187 | LocalStructFieldId, | ||
188 | StructFieldData, | ||
189 | Either<ast::TupleFieldDef, ast::RecordFieldDef>, | ||
190 | >, | ||
191 | ast: &InFile<ast::StructKind>, | 187 | ast: &InFile<ast::StructKind>, |
192 | ) -> StructKind { | 188 | ) -> StructKind { |
193 | match &ast.value { | 189 | match &ast.value { |