@@ -419,19 +419,15 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
419
419
id) ;
420
420
}
421
421
422
- fn process_trait_ref ( & mut self ,
423
- trait_ref : & ast:: TraitRef ) {
424
- match self . lookup_type_ref ( trait_ref. ref_id ) {
425
- Some ( id) => {
426
- let sub_span = self . span . sub_span_for_type_name ( trait_ref. path . span ) ;
427
- self . fmt . ref_str ( recorder:: TypeRef ,
428
- trait_ref. path . span ,
429
- sub_span,
430
- id,
431
- self . cur_scope ) ;
432
- visit:: walk_path ( self , & trait_ref. path ) ;
433
- } ,
434
- None => ( )
422
+ fn process_trait_ref ( & mut self , trait_ref : & ast:: TraitRef ) {
423
+ let trait_ref_data = self . save_ctxt . get_trait_ref_data ( trait_ref, self . cur_scope ) ;
424
+ if let Some ( trait_ref_data) = trait_ref_data {
425
+ self . fmt . ref_str ( recorder:: TypeRef ,
426
+ trait_ref. path . span ,
427
+ Some ( trait_ref_data. span ) ,
428
+ trait_ref_data. ref_id ,
429
+ trait_ref_data. scope ) ;
430
+ visit:: walk_path ( self , & trait_ref. path ) ;
435
431
}
436
432
}
437
433
@@ -600,8 +596,9 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
600
596
Some ( enum_data. span ) ,
601
597
enum_data. id ,
602
598
& enum_data. qualname ,
603
- self . cur_scope ,
599
+ enum_data . scope ,
604
600
& enum_data. value ) ;
601
+
605
602
for variant in & enum_definition. variants {
606
603
let name = & get_ident ( variant. node . name ) ;
607
604
let mut qualname = enum_data. qualname . clone ( ) ;
@@ -618,7 +615,7 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
618
615
& qualname,
619
616
& enum_data. qualname ,
620
617
& val,
621
- item . id ) ;
618
+ enum_data . id ) ;
622
619
for arg in args {
623
620
self . visit_ty ( & * arg. ty ) ;
624
621
}
@@ -635,7 +632,7 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
635
632
& qualname,
636
633
& enum_data. qualname ,
637
634
& val,
638
- item . id ) ;
635
+ enum_data . id ) ;
639
636
640
637
for field in & struct_def. fields {
641
638
self . process_struct_field_def ( field, variant. node . id ) ;
@@ -644,7 +641,7 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
644
641
}
645
642
}
646
643
}
647
- self . process_generic_params ( ty_params, item. span , & enum_data. qualname , item . id ) ;
644
+ self . process_generic_params ( ty_params, item. span , & enum_data. qualname , enum_data . id ) ;
648
645
} else {
649
646
self . sess . span_bug ( item. span , "expected EnumData" ) ;
650
647
}
@@ -656,43 +653,37 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
656
653
trait_ref : & Option < ast:: TraitRef > ,
657
654
typ : & ast:: Ty ,
658
655
impl_items : & [ P < ast:: ImplItem > ] ) {
659
- let trait_id = trait_ref. as_ref ( ) . and_then ( |tr| self . lookup_type_ref ( tr. ref_id ) ) ;
660
- match typ. node {
661
- // Common case impl for a struct or something basic.
662
- ast:: TyPath ( None , ref path) => {
663
- let sub_span = self . span . sub_span_for_type_name ( path. span ) ;
664
- let self_id = self . lookup_type_ref ( typ. id ) . map ( |id| {
656
+ let impl_data = self . save_ctxt . get_item_data ( item) ;
657
+ if let super :: Data :: ImplData ( impl_data) = impl_data {
658
+ match impl_data. self_ref {
659
+ Some ( ref self_ref) => {
665
660
self . fmt . ref_str ( recorder:: TypeRef ,
666
- path. span ,
667
- sub_span,
668
- id,
669
- self . cur_scope ) ;
670
- id
671
- } ) ;
672
- self . fmt . impl_str ( path. span ,
673
- sub_span,
674
- item. id ,
675
- self_id,
676
- trait_id,
677
- self . cur_scope ) ;
678
- } ,
679
- _ => {
680
- // Less useful case, impl for a compound type.
681
- self . visit_ty ( & * typ) ;
682
-
683
- let sub_span = self . span . sub_span_for_type_name ( typ. span ) ;
684
- self . fmt . impl_str ( typ. span ,
685
- sub_span,
686
- item. id ,
687
- None ,
688
- trait_id,
689
- self . cur_scope ) ;
661
+ item. span ,
662
+ Some ( self_ref. span ) ,
663
+ self_ref. ref_id ,
664
+ self_ref. scope ) ;
665
+ }
666
+ None => {
667
+ self . visit_ty ( & typ) ;
668
+ }
669
+ }
670
+ if let Some ( ref trait_ref_data) = impl_data. trait_ref {
671
+ self . fmt . ref_str ( recorder:: TypeRef ,
672
+ item. span ,
673
+ Some ( trait_ref_data. span ) ,
674
+ trait_ref_data. ref_id ,
675
+ trait_ref_data. scope ) ;
676
+ visit:: walk_path ( self , & trait_ref. as_ref ( ) . unwrap ( ) . path ) ;
690
677
}
691
- }
692
678
693
- match * trait_ref {
694
- Some ( ref trait_ref) => self . process_trait_ref ( trait_ref) ,
695
- None => ( ) ,
679
+ self . fmt . impl_str ( item. span ,
680
+ Some ( impl_data. span ) ,
681
+ impl_data. id ,
682
+ impl_data. self_ref . map ( |data| data. ref_id ) ,
683
+ impl_data. trait_ref . map ( |data| data. ref_id ) ,
684
+ impl_data. scope ) ;
685
+ } else {
686
+ self . sess . span_bug ( item. span , "expected ImplData" ) ;
696
687
}
697
688
698
689
self . process_generic_params ( type_parameters, item. span , "" , item. id ) ;
@@ -717,7 +708,7 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
717
708
& val) ;
718
709
719
710
// super-traits
720
- for super_bound in trait_refs. iter ( ) {
711
+ for super_bound in & trait_refs {
721
712
let trait_ref = match * super_bound {
722
713
ast:: TraitTyParamBound ( ref trait_ref, _) => {
723
714
trait_ref
@@ -1164,7 +1155,7 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> {
1164
1155
self . process_impl ( item,
1165
1156
ty_params,
1166
1157
trait_ref,
1167
- & * * typ,
1158
+ & typ,
1168
1159
impl_items)
1169
1160
}
1170
1161
ast:: ItemTrait ( _, ref generics, ref trait_refs, ref methods) =>
0 commit comments