Auto merge of #87568 - petrochenkov:localevel, r=cjgillot
rustc: Replace `HirId`s with `LocalDefId`s in `AccessLevels` tables and passes using those tables - primarily privacy checking, stability checking and dead code checking. All these passes work with definitions rather than with arbitrary HIR nodes. r? `@cjgillot` cc `@lambinoo` (#87487)
This commit is contained in:
commit
bb744e1e9f
27 changed files with 299 additions and 333 deletions
|
@ -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,
|
||||
|
@ -723,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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -985,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,
|
||||
|
@ -1001,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,
|
||||
|
@ -1058,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),
|
||||
|
@ -1071,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,
|
||||
|
@ -1146,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 =
|
||||
|
@ -1175,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);
|
||||
|
@ -1248,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,
|
||||
|
@ -1432,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) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue