Skip to content

Commit 6812ca1

Browse files
committed
Move EnumData to the API.
1 parent 48e9ef6 commit 6812ca1

File tree

2 files changed

+72
-55
lines changed

2 files changed

+72
-55
lines changed

src/librustc_trans/save/dump_csv.rs

+49-54
Original file line numberDiff line numberDiff line change
@@ -604,65 +604,60 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
604604
item: &ast::Item,
605605
enum_definition: &ast::EnumDef,
606606
ty_params: &ast::Generics) {
607-
let enum_name = format!("::{}", self.analysis.ty_cx.map.path_to_string(item.id));
608-
let val = self.span.snippet(item.span);
609-
match self.span.sub_span_after_keyword(item.span, keywords::Enum) {
610-
Some(sub_span) => self.fmt.enum_str(item.span,
611-
Some(sub_span),
612-
item.id,
613-
&enum_name[..],
614-
self.cur_scope,
615-
&val[..]),
616-
None => self.sess.span_bug(item.span,
617-
&format!("Could not find subspan for enum {}",
618-
enum_name)),
619-
}
620-
for variant in &enum_definition.variants {
621-
let name = get_ident(variant.node.name);
622-
let name = &name;
623-
let mut qualname = enum_name.clone();
624-
qualname.push_str("::");
625-
qualname.push_str(name);
626-
let val = self.span.snippet(variant.span);
627-
match variant.node.kind {
628-
ast::TupleVariantKind(ref args) => {
629-
// first ident in span is the variant's name
630-
self.fmt.tuple_variant_str(variant.span,
631-
self.span.span_for_first_ident(variant.span),
632-
variant.node.id,
633-
name,
634-
&qualname[..],
635-
&enum_name[..],
636-
&val[..],
637-
item.id);
638-
for arg in args {
639-
self.visit_ty(&*arg.ty);
607+
let enum_data = self.save_ctxt.get_item_data(item);
608+
if let super::Data::EnumData(enum_data) = enum_data {
609+
self.fmt.enum_str(item.span,
610+
Some(enum_data.span),
611+
enum_data.id,
612+
&enum_data.qualname,
613+
self.cur_scope,
614+
&enum_data.value);
615+
for variant in &enum_definition.variants {
616+
let name = &get_ident(variant.node.name);
617+
let mut qualname = enum_data.qualname.clone();
618+
qualname.push_str("::");
619+
qualname.push_str(name);
620+
let val = self.span.snippet(variant.span);
621+
match variant.node.kind {
622+
ast::TupleVariantKind(ref args) => {
623+
// first ident in span is the variant's name
624+
self.fmt.tuple_variant_str(variant.span,
625+
self.span.span_for_first_ident(variant.span),
626+
variant.node.id,
627+
name,
628+
&qualname,
629+
&enum_data.qualname,
630+
&val,
631+
item.id);
632+
for arg in args {
633+
self.visit_ty(&*arg.ty);
634+
}
640635
}
641-
}
642-
ast::StructVariantKind(ref struct_def) => {
643-
let ctor_id = match struct_def.ctor_id {
644-
Some(node_id) => node_id,
645-
None => -1,
646-
};
647-
self.fmt.struct_variant_str(
648-
variant.span,
649-
self.span.span_for_first_ident(variant.span),
650-
variant.node.id,
651-
ctor_id,
652-
&qualname[..],
653-
&enum_name[..],
654-
&val[..],
655-
item.id);
656-
657-
for field in &struct_def.fields {
658-
self.process_struct_field_def(field, &qualname, variant.node.id);
659-
self.visit_ty(&*field.node.ty);
636+
ast::StructVariantKind(ref struct_def) => {
637+
let ctor_id = match struct_def.ctor_id {
638+
Some(node_id) => node_id,
639+
None => -1,
640+
};
641+
self.fmt.struct_variant_str(variant.span,
642+
self.span.span_for_first_ident(variant.span),
643+
variant.node.id,
644+
ctor_id,
645+
&qualname,
646+
&enum_data.qualname,
647+
&val,
648+
item.id);
649+
650+
for field in &struct_def.fields {
651+
self.process_struct_field_def(field, &qualname, variant.node.id);
652+
self.visit_ty(&*field.node.ty);
653+
}
660654
}
661655
}
662656
}
657+
self.process_generic_params(ty_params, item.span, &enum_data.qualname, item.id);
658+
} else {
659+
self.sess.span_bug(item.span, "expected EnumData");
663660
}
664-
665-
self.process_generic_params(ty_params, item.span, &enum_name[..], item.id);
666661
}
667662

668663
fn process_impl(&mut self,

src/librustc_trans/save/mod.rs

+23-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ pub enum Data {
5151
VariableData(VariableData),
5252
/// Data for modules.
5353
ModData(ModData),
54+
/// Data for Enums.
55+
EnumData(EnumData),
5456

5557
/// Data for the use of some variable (e.g., the use of a local variable, which
5658
/// will refere to that variables declaration).
@@ -88,6 +90,14 @@ pub struct ModData {
8890
pub filename: String,
8991
}
9092

93+
/// Data for enum declarations.
94+
pub struct EnumData {
95+
pub id: NodeId,
96+
pub value: String,
97+
pub qualname: String,
98+
pub span: Span,
99+
}
100+
91101
/// Data for the use of some item (e.g., the use of a local variable, which
92102
/// will refere to that variables declaration (by ref_id)).
93103
pub struct VariableRefData {
@@ -188,7 +198,19 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
188198
scope: self.analysis.ty_cx.map.get_parent(item.id),
189199
filename: filename,
190200
})
191-
}
201+
},
202+
ast::ItemEnum(..) => {
203+
let enum_name = format!("::{}", self.analysis.ty_cx.map.path_to_string(item.id));
204+
let val = self.span_utils.snippet(item.span);
205+
let sub_span = self.span_utils.sub_span_after_keyword(item.span, keywords::Enum);
206+
207+
Data::EnumData(EnumData {
208+
id: item.id,
209+
value: val,
210+
span: sub_span.unwrap(),
211+
qualname: enum_name,
212+
})
213+
},
192214
_ => {
193215
// FIXME
194216
unimplemented!();

0 commit comments

Comments
 (0)