@@ -41,7 +41,8 @@ use syntax::ptr::P;
4141use syntax:: codemap:: Spanned ;
4242use syntax_pos:: * ;
4343
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 } ;
4546use span_utils:: SpanUtils ;
4647use sig;
4748
@@ -58,11 +59,11 @@ macro_rules! down_cast_data {
5859 } ;
5960}
6061
61- pub struct DumpVisitor < ' l , ' tcx : ' l , ' ll , D : ' ll > {
62+ pub struct DumpVisitor < ' l , ' tcx : ' l , ' ll , O : DumpOutput + ' ll > {
6263 save_ctxt : SaveContext < ' l , ' tcx > ,
6364 sess : & ' l Session ,
6465 tcx : TyCtxt < ' l , ' tcx , ' tcx > ,
65- dumper : & ' ll mut D ,
66+ dumper : & ' ll mut JsonDumper < O > ,
6667
6768 span : SpanUtils < ' l > ,
6869
@@ -75,10 +76,10 @@ pub struct DumpVisitor<'l, 'tcx: 'l, 'll, D: 'll> {
7576 // mac_defs: HashSet<Span>,
7677}
7778
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 > {
7980 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 > {
8283 let span_utils = SpanUtils :: new ( & save_ctxt. tcx . sess ) ;
8384 DumpVisitor {
8485 sess : & save_ctxt. tcx . sess ,
@@ -92,7 +93,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
9293 }
9394
9495 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 > )
9697 {
9798 let parent_scope = self . cur_scope ;
9899 self . cur_scope = scope_id;
@@ -101,7 +102,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
101102 }
102103
103104 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 > )
105106 {
106107 let item_def_id = self . tcx . hir . local_def_id ( item_id) ;
107108 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> {
531532 parent : Some ( :: id_from_def_id ( parent_id) ) ,
532533 children : vec ! [ ] ,
533534 decl_id : None ,
534- docs : docs_for_attrs ( attrs) ,
535+ docs : self . save_ctxt . docs_for_attrs ( attrs) ,
535536 sig,
536537 attributes : lower_attributes ( attrs. to_owned ( ) , & self . save_ctxt ) ,
537538 } ) ;
@@ -580,7 +581,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
580581 parent : None ,
581582 children : fields,
582583 decl_id : None ,
583- docs : docs_for_attrs ( & item. attrs ) ,
584+ docs : self . save_ctxt . docs_for_attrs ( & item. attrs ) ,
584585 sig : sig:: item_signature ( item, & self . save_ctxt ) ,
585586 attributes : lower_attributes ( item. attrs . clone ( ) , & self . save_ctxt ) ,
586587 } ) ;
@@ -637,7 +638,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
637638 parent,
638639 children : vec ! [ ] ,
639640 decl_id : None ,
640- docs : docs_for_attrs ( & variant. node . attrs ) ,
641+ docs : self . save_ctxt . docs_for_attrs ( & variant. node . attrs ) ,
641642 sig : sig:: variant_signature ( variant, & self . save_ctxt ) ,
642643 attributes : lower_attributes ( variant. node . attrs . clone ( ) ,
643644 & self . save_ctxt ) ,
@@ -671,7 +672,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
671672 parent,
672673 children : vec ! [ ] ,
673674 decl_id : None ,
674- docs : docs_for_attrs ( & variant. node . attrs ) ,
675+ docs : self . save_ctxt . docs_for_attrs ( & variant. node . attrs ) ,
675676 sig : sig:: variant_signature ( variant, & self . save_ctxt ) ,
676677 attributes : lower_attributes ( variant. node . attrs . clone ( ) ,
677678 & self . save_ctxt ) ,
@@ -742,7 +743,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
742743 parent : None ,
743744 children,
744745 decl_id : None ,
745- docs : docs_for_attrs ( & item. attrs ) ,
746+ docs : self . save_ctxt . docs_for_attrs ( & item. attrs ) ,
746747 sig : sig:: item_signature ( item, & self . save_ctxt ) ,
747748 attributes : lower_attributes ( item. attrs . clone ( ) , & self . save_ctxt ) ,
748749 } ) ;
@@ -1039,7 +1040,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
10391040 parent : Some ( :: id_from_def_id ( trait_id) ) ,
10401041 children : vec ! [ ] ,
10411042 decl_id : None ,
1042- docs : docs_for_attrs ( & trait_item. attrs ) ,
1043+ docs : self . save_ctxt . docs_for_attrs ( & trait_item. attrs ) ,
10431044 sig : sig:: assoc_type_signature ( trait_item. id ,
10441045 trait_item. ident ,
10451046 Some ( bounds) ,
@@ -1089,7 +1090,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
10891090 }
10901091}
10911092
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 > {
10931094 fn visit_mod ( & mut self , m : & ' l ast:: Mod , span : Span , attrs : & [ ast:: Attribute ] , id : NodeId ) {
10941095 // Since we handle explicit modules ourselves in visit_item, this should
10951096 // 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,
11131114 children,
11141115 parent : None ,
11151116 decl_id : None ,
1116- docs : docs_for_attrs ( attrs) ,
1117+ docs : self . save_ctxt . docs_for_attrs ( attrs) ,
11171118 sig : None ,
11181119 attributes : lower_attributes ( attrs. to_owned ( ) , & self . save_ctxt ) ,
11191120 } ) ;
@@ -1250,7 +1251,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
12501251 parent : None ,
12511252 children : vec ! [ ] ,
12521253 decl_id : None ,
1253- docs : docs_for_attrs ( & item. attrs ) ,
1254+ docs : self . save_ctxt . docs_for_attrs ( & item. attrs ) ,
12541255 sig : sig:: item_signature ( item, & self . save_ctxt ) ,
12551256 attributes : lower_attributes ( item. attrs . clone ( ) , & self . save_ctxt ) ,
12561257 } ) ;
@@ -1314,8 +1315,8 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
13141315 ast:: ExprKind :: Struct ( ref path, ref fields, ref base) => {
13151316 let hir_expr = self . save_ctxt . tcx . hir . expect_expr ( ex. id ) ;
13161317 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+ _ => {
13191320 visit:: walk_expr ( self , ex) ;
13201321 return ;
13211322 }
0 commit comments