]> git.proxmox.com Git - rustc.git/blobdiff - compiler/rustc_save_analysis/src/dump_visitor.rs
New upstream version 1.56.0~beta.4+dfsg1
[rustc.git] / compiler / rustc_save_analysis / src / dump_visitor.rs
index 842f7f9deee38ed3e887a922be597154188857e6..29068761d6d843849770cd1889ff57576628fc1c 100644 (file)
@@ -146,7 +146,7 @@ impl<'tcx> DumpVisitor<'tcx> {
             },
             crate_root: crate_root.unwrap_or_else(|| "<no source>".to_owned()),
             external_crates: self.save_ctxt.get_external_crates(),
-            span: self.span_from_span(krate.item.inner),
+            span: self.span_from_span(krate.module().inner),
         };
 
         self.dumper.crate_prelude(data);
@@ -185,7 +185,7 @@ impl<'tcx> DumpVisitor<'tcx> {
         };
 
         let data = CompilationOptions {
-            directory: self.tcx.sess.working_dir.remapped_path_if_available().into(),
+            directory: self.tcx.sess.opts.working_dir.remapped_path_if_available().into(),
             program,
             arguments,
             output: self.save_ctxt.compilation_output(crate_name),
@@ -255,16 +255,17 @@ impl<'tcx> DumpVisitor<'tcx> {
         &mut self,
         sig: &'tcx hir::FnSig<'tcx>,
         body: Option<hir::BodyId>,
-        hir_id: hir::HirId,
+        def_id: LocalDefId,
         ident: Ident,
         generics: &'tcx hir::Generics<'tcx>,
         vis: &hir::Visibility<'tcx>,
         span: Span,
     ) {
-        debug!("process_method: {}:{}", hir_id, ident);
+        debug!("process_method: {:?}:{}", def_id, ident);
 
         let map = &self.tcx.hir();
-        self.nest_typeck_results(map.local_def_id(hir_id), |v| {
+        let hir_id = map.local_def_id_to_hir_id(def_id);
+        self.nest_typeck_results(def_id, |v| {
             if let Some(mut method_data) = v.save_ctxt.get_method_data(hir_id, ident, span) {
                 if let Some(body) = body {
                     v.process_formals(map.body(body).params, &method_data.qualname);
@@ -275,7 +276,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                     fn_to_string(sig.decl, sig.header, Some(ident.name), generics, vis, &[], None);
                 method_data.sig = sig::method_signature(hir_id, ident, generics, sig, &v.save_ctxt);
 
-                v.dumper.dump_def(&access_from_vis!(v.save_ctxt, vis, hir_id), method_data);
+                v.dumper.dump_def(&access_from_vis!(v.save_ctxt, vis, def_id), method_data);
             }
 
             // walk arg and return types
@@ -301,7 +302,10 @@ impl<'tcx> DumpVisitor<'tcx> {
     ) {
         let field_data = self.save_ctxt.get_field_data(field, parent_id);
         if let Some(field_data) = field_data {
-            self.dumper.dump_def(&access_from!(self.save_ctxt, field, field.hir_id), field_data);
+            self.dumper.dump_def(
+                &access_from!(self.save_ctxt, field, self.tcx.hir().local_def_id(field.hir_id)),
+                field_data,
+            );
         }
     }
 
@@ -366,7 +370,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                 v.process_formals(body.params, &fn_data.qualname);
                 v.process_generic_params(ty_params, &fn_data.qualname, item.hir_id());
 
-                v.dumper.dump_def(&access_from!(v.save_ctxt, item, item.hir_id()), fn_data);
+                v.dumper.dump_def(&access_from!(v.save_ctxt, item, item.def_id), fn_data);
             }
 
             for arg in decl.inputs {
@@ -390,7 +394,7 @@ impl<'tcx> DumpVisitor<'tcx> {
         self.nest_typeck_results(item.def_id, |v| {
             if let Some(var_data) = v.save_ctxt.get_item_data(item) {
                 down_cast_data!(var_data, DefData, item.span);
-                v.dumper.dump_def(&access_from!(v.save_ctxt, item, item.hir_id()), var_data);
+                v.dumper.dump_def(&access_from!(v.save_ctxt, item, item.def_id), var_data);
             }
             v.visit_ty(&typ);
             v.visit_expr(expr);
@@ -399,7 +403,7 @@ impl<'tcx> DumpVisitor<'tcx> {
 
     fn process_assoc_const(
         &mut self,
-        hir_id: hir::HirId,
+        def_id: LocalDefId,
         ident: Ident,
         typ: &'tcx hir::Ty<'tcx>,
         expr: Option<&'tcx hir::Expr<'tcx>>,
@@ -407,15 +411,15 @@ impl<'tcx> DumpVisitor<'tcx> {
         vis: &hir::Visibility<'tcx>,
         attrs: &'tcx [ast::Attribute],
     ) {
-        let qualname =
-            format!("::{}", self.tcx.def_path_str(self.tcx.hir().local_def_id(hir_id).to_def_id()));
+        let qualname = format!("::{}", self.tcx.def_path_str(def_id.to_def_id()));
 
         if !self.span.filter_generated(ident.span) {
+            let hir_id = self.tcx.hir().local_def_id_to_hir_id(def_id);
             let sig = sig::assoc_const_signature(hir_id, ident.name, typ, expr, &self.save_ctxt);
             let span = self.span_from_span(ident.span);
 
             self.dumper.dump_def(
-                &access_from_vis!(self.save_ctxt, vis, hir_id),
+                &access_from_vis!(self.save_ctxt, vis, def_id),
                 Def {
                     kind: DefKind::Const,
                     id: id_from_hir_id(hir_id, &self.save_ctxt),
@@ -434,7 +438,7 @@ impl<'tcx> DumpVisitor<'tcx> {
         }
 
         // walk type and init value
-        self.nest_typeck_results(self.tcx.hir().local_def_id(hir_id), |v| {
+        self.nest_typeck_results(def_id, |v| {
             v.visit_ty(typ);
             if let Some(expr) = expr {
                 v.visit_expr(expr);
@@ -484,7 +488,7 @@ impl<'tcx> DumpVisitor<'tcx> {
             let span = self.span_from_span(item.ident.span);
             let attrs = self.tcx.hir().attrs(item.hir_id());
             self.dumper.dump_def(
-                &access_from!(self.save_ctxt, item, item.hir_id()),
+                &access_from!(self.save_ctxt, item, item.def_id),
                 Def {
                     kind,
                     id: id_from_def_id(item.def_id.to_def_id()),
@@ -525,7 +529,7 @@ impl<'tcx> DumpVisitor<'tcx> {
         };
         down_cast_data!(enum_data, DefData, item.span);
 
-        let access = access_from!(self.save_ctxt, item, item.hir_id());
+        let access = access_from!(self.save_ctxt, item, item.def_id);
 
         for variant in enum_definition.variants {
             let name = variant.ident.name.to_string();
@@ -660,7 +664,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                 methods.iter().map(|i| id_from_def_id(i.id.def_id.to_def_id())).collect();
             let attrs = self.tcx.hir().attrs(item.hir_id());
             self.dumper.dump_def(
-                &access_from!(self.save_ctxt, item, item.hir_id()),
+                &access_from!(self.save_ctxt, item, item.def_id),
                 Def {
                     kind: DefKind::Trait,
                     id,
@@ -689,6 +693,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                     (Some(self.tcx.require_lang_item(lang_item, Some(span))), span)
                 }
                 hir::GenericBound::Outlives(..) => continue,
+                hir::GenericBound::Unsized(_) => continue,
             };
 
             if let Some(id) = def_id {
@@ -722,7 +727,7 @@ impl<'tcx> DumpVisitor<'tcx> {
     fn process_mod(&mut self, item: &'tcx hir::Item<'tcx>) {
         if let Some(mod_data) = self.save_ctxt.get_item_data(item) {
             down_cast_data!(mod_data, DefData, item.span);
-            self.dumper.dump_def(&access_from!(self.save_ctxt, item, item.hir_id()), mod_data);
+            self.dumper.dump_def(&access_from!(self.save_ctxt, item, item.def_id), mod_data);
         }
     }
 
@@ -984,7 +989,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                 let respan = respan(vis_span, hir::VisibilityKind::Public);
                 let attrs = self.tcx.hir().attrs(trait_item.hir_id());
                 self.process_assoc_const(
-                    trait_item.hir_id(),
+                    trait_item.def_id,
                     trait_item.ident,
                     &ty,
                     body,
@@ -1000,7 +1005,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                 self.process_method(
                     sig,
                     body,
-                    trait_item.hir_id(),
+                    trait_item.def_id,
                     trait_item.ident,
                     &trait_item.generics,
                     &respan,
@@ -1057,7 +1062,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                 let body = self.tcx.hir().body(body);
                 let attrs = self.tcx.hir().attrs(impl_item.hir_id());
                 self.process_assoc_const(
-                    impl_item.hir_id(),
+                    impl_item.def_id,
                     impl_item.ident,
                     &ty,
                     Some(&body.value),
@@ -1070,7 +1075,7 @@ impl<'tcx> DumpVisitor<'tcx> {
                 self.process_method(
                     sig,
                     Some(body),
-                    impl_item.hir_id(),
+                    impl_item.def_id,
                     impl_item.ident,
                     &impl_item.generics,
                     &impl_item.vis,
@@ -1092,11 +1097,12 @@ impl<'tcx> DumpVisitor<'tcx> {
             format!("::{}", self.tcx.def_path_str(self.tcx.hir().local_def_id(id).to_def_id()));
 
         let sm = self.tcx.sess.source_map();
-        let filename = sm.span_to_filename(krate.item.inner);
+        let krate_mod = krate.module();
+        let filename = sm.span_to_filename(krate_mod.inner);
         let data_id = id_from_hir_id(id, &self.save_ctxt);
         let children =
-            krate.item.item_ids.iter().map(|i| id_from_def_id(i.def_id.to_def_id())).collect();
-        let span = self.span_from_span(krate.item.inner);
+            krate_mod.item_ids.iter().map(|i| id_from_def_id(i.def_id.to_def_id())).collect();
+        let span = self.span_from_span(krate_mod.inner);
         let attrs = self.tcx.hir().attrs(id);
 
         self.dumper.dump_def(
@@ -1144,7 +1150,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
             hir::ItemKind::Use(path, hir::UseKind::Single) => {
                 let sub_span = path.segments.last().unwrap().ident.span;
                 if !self.span.filter_generated(sub_span) {
-                    let access = access_from!(self.save_ctxt, item, item.hir_id());
+                    let access = access_from!(self.save_ctxt, item, item.def_id);
                     let ref_id = self.lookup_def_id(item.hir_id()).map(id_from_def_id);
                     let span = self.span_from_span(sub_span);
                     let parent =
@@ -1173,7 +1179,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
                 // we don't want to track anyway, since it's probably macro-internal `use`
                 if let Some(sub_span) = self.span.sub_span_of_star(item.span) {
                     if !self.span.filter_generated(item.span) {
-                        let access = access_from!(self.save_ctxt, item, item.hir_id());
+                        let access = access_from!(self.save_ctxt, item, item.def_id);
                         let span = self.span_from_span(sub_span);
                         let parent =
                             self.save_ctxt.tcx.parent(item.def_id.to_def_id()).map(id_from_def_id);
@@ -1246,7 +1252,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
                     let attrs = self.tcx.hir().attrs(item.hir_id());
 
                     self.dumper.dump_def(
-                        &access_from!(self.save_ctxt, item, item.hir_id()),
+                        &access_from!(self.save_ctxt, item, item.def_id),
                         Def {
                             kind: DefKind::Type,
                             id,
@@ -1430,7 +1436,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
     }
 
     fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem<'tcx>) {
-        let access = access_from!(self.save_ctxt, item, item.hir_id());
+        let access = access_from!(self.save_ctxt, item, item.def_id);
 
         match item.kind {
             hir::ForeignItemKind::Fn(decl, _, ref generics) => {