mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-02 18:12:51 +00:00
Generalize FieldIds -> IdRange<T>
This commit is contained in:
parent
2a8fc9e682
commit
b06214d164
@ -699,18 +699,19 @@ pub struct Variant {
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct FieldIds {
|
||||
pub struct IdRange<T> {
|
||||
range: Range<u32>,
|
||||
_p: PhantomData<T>,
|
||||
}
|
||||
|
||||
impl FieldIds {
|
||||
fn new(range: Range<Idx<Field>>) -> Self {
|
||||
Self { range: range.start.into_raw().into()..range.end.into_raw().into() }
|
||||
impl<T> IdRange<T> {
|
||||
fn new(range: Range<Idx<T>>) -> Self {
|
||||
Self { range: range.start.into_raw().into()..range.end.into_raw().into(), _p: PhantomData }
|
||||
}
|
||||
}
|
||||
|
||||
impl Iterator for FieldIds {
|
||||
type Item = Idx<Field>;
|
||||
impl<T> Iterator for IdRange<T> {
|
||||
type Item = Idx<T>;
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
self.range.next().map(|raw| Idx::from_raw(raw.into()))
|
||||
}
|
||||
@ -718,8 +719,8 @@ impl Iterator for FieldIds {
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub enum Fields {
|
||||
Record(FieldIds),
|
||||
Tuple(FieldIds),
|
||||
Record(IdRange<Field>),
|
||||
Tuple(IdRange<Field>),
|
||||
Unit,
|
||||
}
|
||||
|
||||
|
@ -196,7 +196,7 @@ impl Ctx {
|
||||
}
|
||||
}
|
||||
|
||||
fn lower_record_fields(&mut self, fields: &ast::RecordFieldDefList) -> FieldIds {
|
||||
fn lower_record_fields(&mut self, fields: &ast::RecordFieldDefList) -> IdRange<Field> {
|
||||
let start = self.next_field_idx();
|
||||
for field in fields.fields() {
|
||||
if let Some(data) = self.lower_record_field(&field) {
|
||||
@ -205,7 +205,7 @@ impl Ctx {
|
||||
}
|
||||
}
|
||||
let end = self.next_field_idx();
|
||||
FieldIds::new(start..end)
|
||||
IdRange::new(start..end)
|
||||
}
|
||||
|
||||
fn lower_record_field(&mut self, field: &ast::RecordFieldDef) -> Option<Field> {
|
||||
@ -216,7 +216,7 @@ impl Ctx {
|
||||
Some(res)
|
||||
}
|
||||
|
||||
fn lower_tuple_fields(&mut self, fields: &ast::TupleFieldDefList) -> FieldIds {
|
||||
fn lower_tuple_fields(&mut self, fields: &ast::TupleFieldDefList) -> IdRange<Field> {
|
||||
let start = self.next_field_idx();
|
||||
for (i, field) in fields.fields().enumerate() {
|
||||
if let Some(data) = self.lower_tuple_field(i, &field) {
|
||||
@ -225,7 +225,7 @@ impl Ctx {
|
||||
}
|
||||
}
|
||||
let end = self.next_field_idx();
|
||||
FieldIds::new(start..end)
|
||||
IdRange::new(start..end)
|
||||
}
|
||||
|
||||
fn lower_tuple_field(&mut self, idx: usize, field: &ast::TupleFieldDef) -> Option<Field> {
|
||||
@ -244,7 +244,7 @@ impl Ctx {
|
||||
Some(record_field_def_list) => {
|
||||
self.lower_fields(&StructKind::Record(record_field_def_list))
|
||||
}
|
||||
None => Fields::Record(FieldIds::new(self.next_field_idx()..self.next_field_idx())),
|
||||
None => Fields::Record(IdRange::new(self.next_field_idx()..self.next_field_idx())),
|
||||
};
|
||||
let ast_id = self.source_ast_id_map.ast_id(union);
|
||||
let res = Union { name, visibility, generic_params, fields, ast_id };
|
||||
|
Loading…
Reference in New Issue
Block a user