@@ -41,7 +41,8 @@ use syntax::ptr::P;
41
41
use syntax:: codemap:: Spanned ;
42
42
use syntax_pos:: * ;
43
43
44
- use { escape, generated_code, SaveContext , PathCollector , docs_for_attrs, lower_attributes, Dump } ;
44
+ use { escape, generated_code, SaveContext , PathCollector , lower_attributes} ;
45
+ use json_dumper:: { JsonDumper , DumpOutput } ;
45
46
use span_utils:: SpanUtils ;
46
47
use sig;
47
48
@@ -58,11 +59,11 @@ macro_rules! down_cast_data {
58
59
} ;
59
60
}
60
61
61
- pub struct DumpVisitor < ' l , ' tcx : ' l , ' ll , D : ' ll > {
62
+ pub struct DumpVisitor < ' l , ' tcx : ' l , ' ll , O : DumpOutput + ' ll > {
62
63
save_ctxt : SaveContext < ' l , ' tcx > ,
63
64
sess : & ' l Session ,
64
65
tcx : TyCtxt < ' l , ' tcx , ' tcx > ,
65
- dumper : & ' ll mut D ,
66
+ dumper : & ' ll mut JsonDumper < O > ,
66
67
67
68
span : SpanUtils < ' l > ,
68
69
@@ -75,10 +76,10 @@ pub struct DumpVisitor<'l, 'tcx: 'l, 'll, D: 'll> {
75
76
// mac_defs: HashSet<Span>,
76
77
}
77
78
78
- impl < ' l , ' tcx : ' l , ' ll , D : Dump + ' ll > DumpVisitor < ' l , ' tcx , ' ll , D > {
79
+ impl < ' l , ' tcx : ' l , ' ll , O : DumpOutput + ' ll > DumpVisitor < ' l , ' tcx , ' ll , O > {
79
80
pub fn new ( save_ctxt : SaveContext < ' l , ' tcx > ,
80
- dumper : & ' ll mut D )
81
- -> DumpVisitor < ' l , ' tcx , ' ll , D > {
81
+ dumper : & ' ll mut JsonDumper < O > )
82
+ -> DumpVisitor < ' l , ' tcx , ' ll , O > {
82
83
let span_utils = SpanUtils :: new ( & save_ctxt. tcx . sess ) ;
83
84
DumpVisitor {
84
85
sess : & save_ctxt. tcx . sess ,
@@ -92,7 +93,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
92
93
}
93
94
94
95
fn nest_scope < F > ( & mut self , scope_id : NodeId , f : F )
95
- where F : FnOnce ( & mut DumpVisitor < ' l , ' tcx , ' ll , D > )
96
+ where F : FnOnce ( & mut DumpVisitor < ' l , ' tcx , ' ll , O > )
96
97
{
97
98
let parent_scope = self . cur_scope ;
98
99
self . cur_scope = scope_id;
@@ -101,7 +102,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
101
102
}
102
103
103
104
fn nest_tables < F > ( & mut self , item_id : NodeId , f : F )
104
- where F : FnOnce ( & mut DumpVisitor < ' l , ' tcx , ' ll , D > )
105
+ where F : FnOnce ( & mut DumpVisitor < ' l , ' tcx , ' ll , O > )
105
106
{
106
107
let item_def_id = self . tcx . hir . local_def_id ( item_id) ;
107
108
if self . tcx . has_typeck_tables ( item_def_id) {
@@ -531,7 +532,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
531
532
parent : Some ( :: id_from_def_id ( parent_id) ) ,
532
533
children : vec ! [ ] ,
533
534
decl_id : None ,
534
- docs : docs_for_attrs ( attrs) ,
535
+ docs : self . save_ctxt . docs_for_attrs ( attrs) ,
535
536
sig,
536
537
attributes : lower_attributes ( attrs. to_owned ( ) , & self . save_ctxt ) ,
537
538
} ) ;
@@ -580,7 +581,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
580
581
parent : None ,
581
582
children : fields,
582
583
decl_id : None ,
583
- docs : docs_for_attrs ( & item. attrs ) ,
584
+ docs : self . save_ctxt . docs_for_attrs ( & item. attrs ) ,
584
585
sig : sig:: item_signature ( item, & self . save_ctxt ) ,
585
586
attributes : lower_attributes ( item. attrs . clone ( ) , & self . save_ctxt ) ,
586
587
} ) ;
@@ -637,7 +638,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
637
638
parent,
638
639
children : vec ! [ ] ,
639
640
decl_id : None ,
640
- docs : docs_for_attrs ( & variant. node . attrs ) ,
641
+ docs : self . save_ctxt . docs_for_attrs ( & variant. node . attrs ) ,
641
642
sig : sig:: variant_signature ( variant, & self . save_ctxt ) ,
642
643
attributes : lower_attributes ( variant. node . attrs . clone ( ) ,
643
644
& self . save_ctxt ) ,
@@ -671,7 +672,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
671
672
parent,
672
673
children : vec ! [ ] ,
673
674
decl_id : None ,
674
- docs : docs_for_attrs ( & variant. node . attrs ) ,
675
+ docs : self . save_ctxt . docs_for_attrs ( & variant. node . attrs ) ,
675
676
sig : sig:: variant_signature ( variant, & self . save_ctxt ) ,
676
677
attributes : lower_attributes ( variant. node . attrs . clone ( ) ,
677
678
& self . save_ctxt ) ,
@@ -742,7 +743,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
742
743
parent : None ,
743
744
children,
744
745
decl_id : None ,
745
- docs : docs_for_attrs ( & item. attrs ) ,
746
+ docs : self . save_ctxt . docs_for_attrs ( & item. attrs ) ,
746
747
sig : sig:: item_signature ( item, & self . save_ctxt ) ,
747
748
attributes : lower_attributes ( item. attrs . clone ( ) , & self . save_ctxt ) ,
748
749
} ) ;
@@ -1039,7 +1040,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
1039
1040
parent : Some ( :: id_from_def_id ( trait_id) ) ,
1040
1041
children : vec ! [ ] ,
1041
1042
decl_id : None ,
1042
- docs : docs_for_attrs ( & trait_item. attrs ) ,
1043
+ docs : self . save_ctxt . docs_for_attrs ( & trait_item. attrs ) ,
1043
1044
sig : sig:: assoc_type_signature ( trait_item. id ,
1044
1045
trait_item. ident ,
1045
1046
Some ( bounds) ,
@@ -1089,7 +1090,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
1089
1090
}
1090
1091
}
1091
1092
1092
- impl < ' l , ' tcx : ' l , ' ll , D : Dump + ' ll > Visitor < ' l > for DumpVisitor < ' l , ' tcx , ' ll , D > {
1093
+ impl < ' l , ' tcx : ' l , ' ll , O : DumpOutput + ' ll > Visitor < ' l > for DumpVisitor < ' l , ' tcx , ' ll , O > {
1093
1094
fn visit_mod ( & mut self , m : & ' l ast:: Mod , span : Span , attrs : & [ ast:: Attribute ] , id : NodeId ) {
1094
1095
// Since we handle explicit modules ourselves in visit_item, this should
1095
1096
// only get called for the root module of a crate.
@@ -1113,7 +1114,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
1113
1114
children,
1114
1115
parent : None ,
1115
1116
decl_id : None ,
1116
- docs : docs_for_attrs ( attrs) ,
1117
+ docs : self . save_ctxt . docs_for_attrs ( attrs) ,
1117
1118
sig : None ,
1118
1119
attributes : lower_attributes ( attrs. to_owned ( ) , & self . save_ctxt ) ,
1119
1120
} ) ;
@@ -1250,7 +1251,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
1250
1251
parent : None ,
1251
1252
children : vec ! [ ] ,
1252
1253
decl_id : None ,
1253
- docs : docs_for_attrs ( & item. attrs ) ,
1254
+ docs : self . save_ctxt . docs_for_attrs ( & item. attrs ) ,
1254
1255
sig : sig:: item_signature ( item, & self . save_ctxt ) ,
1255
1256
attributes : lower_attributes ( item. attrs . clone ( ) , & self . save_ctxt ) ,
1256
1257
} ) ;
@@ -1314,8 +1315,8 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
1314
1315
ast:: ExprKind :: Struct ( ref path, ref fields, ref base) => {
1315
1316
let hir_expr = self . save_ctxt . tcx . hir . expect_expr ( ex. id ) ;
1316
1317
let adt = match self . save_ctxt . tables . expr_ty_opt ( & hir_expr) {
1317
- Some ( ty) => ty. ty_adt_def ( ) . unwrap ( ) ,
1318
- None => {
1318
+ Some ( ty) if ty . ty_adt_def ( ) . is_some ( ) => ty. ty_adt_def ( ) . unwrap ( ) ,
1319
+ _ => {
1319
1320
visit:: walk_expr ( self , ex) ;
1320
1321
return ;
1321
1322
}
0 commit comments