Skip to content

Commit 60d5d36

Browse files
committed
move {Par}DeepVisitor to intravisit
1 parent e108721 commit 60d5d36

File tree

3 files changed

+56
-59
lines changed

3 files changed

+56
-59
lines changed

src/librustc/hir/intravisit.rs

+55-2
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,67 @@
3131
//! This order consistency is required in a few places in rustc, for
3232
//! example generator inference, and possibly also HIR borrowck.
3333
34-
use super::itemlikevisit::DeepVisitor;
35-
34+
use crate::hir::itemlikevisit::{ItemLikeVisitor, ParItemLikeVisitor};
3635
use crate::hir::map::Map;
3736
use crate::hir::*;
3837

3938
use rustc_span::Span;
4039
use syntax::ast::{Attribute, Ident, Label, Name};
4140

41+
pub struct DeepVisitor<'v, V> {
42+
visitor: &'v mut V,
43+
}
44+
45+
impl<'v, 'hir, V> DeepVisitor<'v, V>
46+
where
47+
V: Visitor<'hir> + 'v,
48+
{
49+
pub fn new(base: &'v mut V) -> Self {
50+
DeepVisitor { visitor: base }
51+
}
52+
}
53+
54+
impl<'v, 'hir, V> ItemLikeVisitor<'hir> for DeepVisitor<'v, V>
55+
where
56+
V: Visitor<'hir>,
57+
{
58+
fn visit_item(&mut self, item: &'hir Item<'hir>) {
59+
self.visitor.visit_item(item);
60+
}
61+
62+
fn visit_trait_item(&mut self, trait_item: &'hir TraitItem<'hir>) {
63+
self.visitor.visit_trait_item(trait_item);
64+
}
65+
66+
fn visit_impl_item(&mut self, impl_item: &'hir ImplItem<'hir>) {
67+
self.visitor.visit_impl_item(impl_item);
68+
}
69+
}
70+
71+
pub trait IntoVisitor<'hir> {
72+
type Visitor: Visitor<'hir>;
73+
fn into_visitor(&self) -> Self::Visitor;
74+
}
75+
76+
pub struct ParDeepVisitor<V>(pub V);
77+
78+
impl<'hir, V> ParItemLikeVisitor<'hir> for ParDeepVisitor<V>
79+
where
80+
V: IntoVisitor<'hir>,
81+
{
82+
fn visit_item(&self, item: &'hir Item<'hir>) {
83+
self.0.into_visitor().visit_item(item);
84+
}
85+
86+
fn visit_trait_item(&self, trait_item: &'hir TraitItem<'hir>) {
87+
self.0.into_visitor().visit_trait_item(trait_item);
88+
}
89+
90+
fn visit_impl_item(&self, impl_item: &'hir ImplItem<'hir>) {
91+
self.0.into_visitor().visit_impl_item(impl_item);
92+
}
93+
}
94+
4295
#[derive(Copy, Clone)]
4396
pub enum FnKind<'a> {
4497
/// `#[xxx] pub async/const/extern "Abi" fn foo()`

src/librustc/hir/itemlikevisit.rs

-55
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use super::intravisit::Visitor;
21
use super::{ImplItem, Item, TraitItem};
32

43
/// The "item-like visitor" defines only the top-level methods
@@ -50,63 +49,9 @@ pub trait ItemLikeVisitor<'hir> {
5049
fn visit_impl_item(&mut self, impl_item: &'hir ImplItem<'hir>);
5150
}
5251

53-
pub struct DeepVisitor<'v, V> {
54-
visitor: &'v mut V,
55-
}
56-
57-
impl<'v, 'hir, V> DeepVisitor<'v, V>
58-
where
59-
V: Visitor<'hir> + 'v,
60-
{
61-
pub fn new(base: &'v mut V) -> Self {
62-
DeepVisitor { visitor: base }
63-
}
64-
}
65-
66-
impl<'v, 'hir, V> ItemLikeVisitor<'hir> for DeepVisitor<'v, V>
67-
where
68-
V: Visitor<'hir>,
69-
{
70-
fn visit_item(&mut self, item: &'hir Item<'hir>) {
71-
self.visitor.visit_item(item);
72-
}
73-
74-
fn visit_trait_item(&mut self, trait_item: &'hir TraitItem<'hir>) {
75-
self.visitor.visit_trait_item(trait_item);
76-
}
77-
78-
fn visit_impl_item(&mut self, impl_item: &'hir ImplItem<'hir>) {
79-
self.visitor.visit_impl_item(impl_item);
80-
}
81-
}
82-
8352
/// A parallel variant of `ItemLikeVisitor`.
8453
pub trait ParItemLikeVisitor<'hir> {
8554
fn visit_item(&self, item: &'hir Item<'hir>);
8655
fn visit_trait_item(&self, trait_item: &'hir TraitItem<'hir>);
8756
fn visit_impl_item(&self, impl_item: &'hir ImplItem<'hir>);
8857
}
89-
90-
pub trait IntoVisitor<'hir> {
91-
type Visitor: Visitor<'hir>;
92-
fn into_visitor(&self) -> Self::Visitor;
93-
}
94-
95-
pub struct ParDeepVisitor<V>(pub V);
96-
97-
impl<'hir, V> ParItemLikeVisitor<'hir> for ParDeepVisitor<V>
98-
where
99-
V: IntoVisitor<'hir>,
100-
{
101-
fn visit_item(&self, item: &'hir Item<'hir>) {
102-
self.0.into_visitor().visit_item(item);
103-
}
104-
105-
fn visit_trait_item(&self, trait_item: &'hir TraitItem<'hir>) {
106-
self.0.into_visitor().visit_trait_item(trait_item);
107-
}
108-
109-
fn visit_impl_item(&self, impl_item: &'hir ImplItem<'hir>) {
110-
self.0.into_visitor().visit_impl_item(impl_item);
111-
}
112-
}

src/librustc_privacy/lib.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ extern crate syntax;
99
use rustc::bug;
1010
use rustc::hir::def::{DefKind, Res};
1111
use rustc::hir::def_id::{CrateNum, DefId, CRATE_DEF_INDEX, LOCAL_CRATE};
12-
use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor};
13-
use rustc::hir::itemlikevisit::DeepVisitor;
12+
use rustc::hir::intravisit::{self, DeepVisitor, NestedVisitorMap, Visitor};
1413
use rustc::hir::{self, AssocItemKind, HirIdSet, Node, PatKind};
1514
use rustc::lint;
1615
use rustc::middle::privacy::{AccessLevel, AccessLevels};

0 commit comments

Comments
 (0)