Skip to content

Commit ba4d920

Browse files
committed
Simplify annotator.
1 parent 65c0b7f commit ba4d920

File tree

1 file changed

+30
-58
lines changed

1 file changed

+30
-58
lines changed

compiler/rustc_passes/src/stability.rs

Lines changed: 30 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use rustc_middle::ty::print::with_no_trimmed_paths;
2828
use rustc_session::lint;
2929
use rustc_session::lint::builtin::{DEPRECATED, INEFFECTIVE_UNSTABLE_TRAIT_IMPL};
3030
use rustc_span::{Span, Symbol, sym};
31-
use tracing::{debug, info, instrument};
31+
use tracing::{info, instrument};
3232

3333
use crate::errors;
3434

@@ -326,43 +326,23 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
326326
/// Determine the stability for a node based on its attributes and inherited stability. The
327327
/// stability is recorded in the index and used as the parent. If the node is a function,
328328
/// `fn_sig` is its signature.
329-
#[instrument(level = "trace", skip(self, visit_children))]
330-
fn annotate<F>(&mut self, def_id: LocalDefId, visit_children: F)
331-
where
332-
F: FnOnce(&mut Self),
333-
{
334-
let attrs = self.tcx.hir_attrs(self.tcx.local_def_id_to_hir_id(def_id));
335-
debug!("annotate(id = {:?}, attrs = {:?})", def_id, attrs);
336-
337-
let stab = self.tcx.lookup_stability(def_id);
338-
329+
#[instrument(level = "trace", skip(self))]
330+
fn annotate(&mut self, def_id: LocalDefId) {
339331
if !self.tcx.features().staged_api() {
340-
visit_children(self);
341332
return;
342333
}
343334

344-
if let Some(Stability {
345-
level: StabilityLevel::Unstable { implied_by: Some(implied_by), .. },
346-
feature,
347-
}) = stab
335+
if let Some(stability) = self.tcx.lookup_stability(def_id)
336+
&& let StabilityLevel::Unstable { implied_by: Some(implied_by), .. } = stability.level
348337
{
349-
self.index.implications.insert(implied_by, feature);
338+
self.index.implications.insert(implied_by, stability.feature);
350339
}
351340

352-
// # Const stability
353-
354-
let const_stab = self.tcx.lookup_const_stability(def_id);
355-
356-
if let Some(ConstStability {
357-
level: StabilityLevel::Unstable { implied_by: Some(implied_by), .. },
358-
feature,
359-
..
360-
}) = const_stab
341+
if let Some(stability) = self.tcx.lookup_const_stability(def_id)
342+
&& let StabilityLevel::Unstable { implied_by: Some(implied_by), .. } = stability.level
361343
{
362-
self.index.implications.insert(implied_by, feature);
344+
self.index.implications.insert(implied_by, stability.feature);
363345
}
364-
365-
visit_children(self)
366346
}
367347
}
368348

@@ -380,53 +360,48 @@ impl<'a, 'tcx> Visitor<'tcx> for Annotator<'a, 'tcx> {
380360
match i.kind {
381361
hir::ItemKind::Struct(_, _, ref sd) => {
382362
if let Some(ctor_def_id) = sd.ctor_def_id() {
383-
self.annotate(ctor_def_id, |_| {})
363+
self.annotate(ctor_def_id);
384364
}
385365
}
386366
_ => {}
387367
}
388368

389-
self.annotate(i.owner_id.def_id, |v| intravisit::walk_item(v, i));
369+
self.annotate(i.owner_id.def_id);
370+
intravisit::walk_item(self, i)
390371
}
391372

392373
fn visit_trait_item(&mut self, ti: &'tcx hir::TraitItem<'tcx>) {
393-
self.annotate(ti.owner_id.def_id, |v| {
394-
intravisit::walk_trait_item(v, ti);
395-
});
374+
self.annotate(ti.owner_id.def_id);
375+
intravisit::walk_trait_item(self, ti);
396376
}
397377

398378
fn visit_impl_item(&mut self, ii: &'tcx hir::ImplItem<'tcx>) {
399-
self.annotate(ii.owner_id.def_id, |v| {
400-
intravisit::walk_impl_item(v, ii);
401-
});
379+
self.annotate(ii.owner_id.def_id);
380+
intravisit::walk_impl_item(self, ii);
402381
}
403382

404383
fn visit_variant(&mut self, var: &'tcx Variant<'tcx>) {
405-
self.annotate(var.def_id, |v| {
406-
if let Some(ctor_def_id) = var.data.ctor_def_id() {
407-
v.annotate(ctor_def_id, |_| {});
408-
}
384+
self.annotate(var.def_id);
385+
if let Some(ctor_def_id) = var.data.ctor_def_id() {
386+
self.annotate(ctor_def_id);
387+
}
409388

410-
intravisit::walk_variant(v, var)
411-
})
389+
intravisit::walk_variant(self, var)
412390
}
413391

414392
fn visit_field_def(&mut self, s: &'tcx FieldDef<'tcx>) {
415-
self.annotate(s.def_id, |v| {
416-
intravisit::walk_field_def(v, s);
417-
});
393+
self.annotate(s.def_id);
394+
intravisit::walk_field_def(self, s);
418395
}
419396

420397
fn visit_foreign_item(&mut self, i: &'tcx hir::ForeignItem<'tcx>) {
421-
self.annotate(i.owner_id.def_id, |v| {
422-
intravisit::walk_foreign_item(v, i);
423-
});
398+
self.annotate(i.owner_id.def_id);
399+
intravisit::walk_foreign_item(self, i);
424400
}
425401

426402
fn visit_generic_param(&mut self, p: &'tcx hir::GenericParam<'tcx>) {
427-
self.annotate(p.def_id, |v| {
428-
intravisit::walk_generic_param(v, p);
429-
});
403+
self.annotate(p.def_id);
404+
intravisit::walk_generic_param(self, p);
430405
}
431406
}
432407

@@ -637,12 +612,9 @@ impl<'tcx> Visitor<'tcx> for MissingStabilityAnnotations<'tcx> {
637612

638613
fn stability_index(tcx: TyCtxt<'_>, (): ()) -> Index {
639614
let mut index = Index { implications: Default::default() };
640-
641-
{
642-
let mut annotator = Annotator { tcx, index: &mut index };
643-
644-
annotator.annotate(CRATE_DEF_ID, |v| tcx.hir_walk_toplevel_module(v));
645-
}
615+
let mut annotator = Annotator { tcx, index: &mut index };
616+
annotator.annotate(CRATE_DEF_ID);
617+
tcx.hir_walk_toplevel_module(&mut annotator);
646618
index
647619
}
648620

0 commit comments

Comments
 (0)