Skip to content

Commit 7494250

Browse files
committed
Auto merge of #67803 - Centril:librustc_hir, r=Zoxc
Extract `rustc_hir` out of `rustc` The new crate contains: ```rust pub mod def; pub mod def_id; mod hir; pub mod hir_id; pub mod itemlikevisit; pub mod pat_util; pub mod print; mod stable_hash_impls; pub use hir::*; pub use hir_id::*; pub use stable_hash_impls::HashStableContext; ``` Remains to be done in follow-up PRs: - Move `rustc::hir::map` into `rustc_hir_map` -- this has to be a separate crate due to the `dep_graph` (blocked on #67761). - Move references to `rustc::hir` to `rustc_hir` where possible. cc #65031 r? @Zoxc
2 parents 760ce94 + cdf32e1 commit 7494250

File tree

139 files changed

+1104
-950
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

139 files changed

+1104
-950
lines changed

Cargo.lock

+20
Original file line numberDiff line numberDiff line change
@@ -3091,6 +3091,7 @@ dependencies = [
30913091
"rustc_errors",
30923092
"rustc_feature",
30933093
"rustc_fs_util",
3094+
"rustc_hir",
30943095
"rustc_index",
30953096
"rustc_macros",
30963097
"rustc_session",
@@ -3368,6 +3369,7 @@ dependencies = [
33683369
"rustc_error_codes",
33693370
"rustc_errors",
33703371
"rustc_index",
3372+
"rustc_session",
33713373
"rustc_span",
33723374
"rustc_target",
33733375
"smallvec 1.0.0",
@@ -3562,6 +3564,22 @@ dependencies = [
35623564
name = "rustc_fs_util"
35633565
version = "0.0.0"
35643566

3567+
[[package]]
3568+
name = "rustc_hir"
3569+
version = "0.0.0"
3570+
dependencies = [
3571+
"rustc_data_structures",
3572+
"rustc_errors",
3573+
"rustc_index",
3574+
"rustc_macros",
3575+
"rustc_session",
3576+
"rustc_span",
3577+
"rustc_target",
3578+
"serialize",
3579+
"smallvec 1.0.0",
3580+
"syntax",
3581+
]
3582+
35653583
[[package]]
35663584
name = "rustc_incremental"
35673585
version = "0.0.0"
@@ -3602,6 +3620,7 @@ dependencies = [
36023620
"rustc_data_structures",
36033621
"rustc_errors",
36043622
"rustc_expand",
3623+
"rustc_hir",
36053624
"rustc_incremental",
36063625
"rustc_lint",
36073626
"rustc_metadata",
@@ -3808,6 +3827,7 @@ dependencies = [
38083827
"rustc_expand",
38093828
"rustc_feature",
38103829
"rustc_metadata",
3830+
"rustc_session",
38113831
"rustc_span",
38123832
"smallvec 1.0.0",
38133833
"syntax",

src/librustc/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ rustc-rayon-core = "0.3.0"
2323
polonius-engine = "0.11.0"
2424
rustc_apfloat = { path = "../librustc_apfloat" }
2525
rustc_feature = { path = "../librustc_feature" }
26+
rustc_hir = { path = "../librustc_hir" }
2627
rustc_target = { path = "../librustc_target" }
2728
rustc_macros = { path = "../librustc_macros" }
2829
rustc_data_structures = { path = "../librustc_data_structures" }

src/librustc/arena.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ macro_rules! arena_types {
4141
rustc::hir::def_id::DefId,
4242
rustc::ty::subst::SubstsRef<$tcx>
4343
)>,
44-
[few, decode] mir_keys: rustc::util::nodemap::DefIdSet,
44+
[few, decode] mir_keys: rustc::hir::def_id::DefIdSet,
4545
[decode] specialization_graph: rustc::traits::specialization_graph::Graph,
4646
[] region_scope_tree: rustc::middle::region::ScopeTree,
47-
[] item_local_set: rustc::util::nodemap::ItemLocalSet,
47+
[] item_local_set: rustc::hir::ItemLocalSet,
4848
[decode] mir_const_qualif: rustc_index::bit_set::BitSet<rustc::mir::Local>,
4949
[] trait_impls_of: rustc::ty::trait_def::TraitImpls,
5050
[] dropck_outlives:
@@ -87,7 +87,7 @@ macro_rules! arena_types {
8787
>,
8888
[few] crate_inherent_impls: rustc::ty::CrateInherentImpls,
8989
[few] upstream_monomorphizations:
90-
rustc::util::nodemap::DefIdMap<
90+
rustc::hir::def_id::DefIdMap<
9191
rustc_data_structures::fx::FxHashMap<
9292
rustc::ty::subst::SubstsRef<'tcx>,
9393
rustc::hir::def_id::CrateNum
@@ -113,10 +113,10 @@ macro_rules! arena_types {
113113
>,
114114
[few] get_lib_features: rustc::middle::lib_features::LibFeatures,
115115
[few] defined_lib_features: rustc::middle::lang_items::LanguageItems,
116-
[few] visible_parent_map: rustc::util::nodemap::DefIdMap<rustc::hir::def_id::DefId>,
116+
[few] visible_parent_map: rustc::hir::def_id::DefIdMap<rustc::hir::def_id::DefId>,
117117
[few] foreign_module: rustc::middle::cstore::ForeignModule,
118118
[few] foreign_modules: Vec<rustc::middle::cstore::ForeignModule>,
119-
[few] reachable_non_generics: rustc::util::nodemap::DefIdMap<
119+
[few] reachable_non_generics: rustc::hir::def_id::DefIdMap<
120120
rustc::middle::exported_symbols::SymbolExportLevel
121121
>,
122122
[few] crate_variances: rustc::ty::CrateVariancesMap<'tcx>,

src/librustc/dep_graph/dep_node.rs

-6
Original file line numberDiff line numberDiff line change
@@ -396,12 +396,6 @@ impl DefPathHash {
396396
}
397397
}
398398

399-
impl DefId {
400-
pub fn to_dep_node(self, tcx: TyCtxt<'_>, kind: DepKind) -> DepNode {
401-
DepNode::from_def_path_hash(kind, tcx.def_path_hash(self))
402-
}
403-
}
404-
405399
rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
406400
// We use this for most things when incr. comp. is turned off.
407401
[] Null,

src/librustc/hir.rs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//! HIR datatypes. See the [rustc guide] for more info.
2+
//!
3+
//! [rustc guide]: https://rust-lang.github.io/rustc-guide/hir.html
4+
5+
pub mod check_attr;
6+
pub use rustc_hir::def;
7+
pub mod exports;
8+
pub use rustc_hir::def_id;
9+
pub use rustc_hir::hir_id::*;
10+
pub mod intravisit;
11+
pub use rustc_hir::itemlikevisit;
12+
pub mod map;
13+
pub use rustc_hir::pat_util;
14+
pub use rustc_hir::print;
15+
pub mod upvars;
16+
17+
pub use rustc_hir::BlockCheckMode::*;
18+
pub use rustc_hir::FunctionRetTy::*;
19+
pub use rustc_hir::PrimTy::*;
20+
pub use rustc_hir::UnOp::*;
21+
pub use rustc_hir::UnsafeSource::*;
22+
pub use rustc_hir::*;
23+
24+
use crate::ty::query::Providers;
25+
26+
pub fn provide(providers: &mut Providers<'_>) {
27+
check_attr::provide(providers);
28+
map::provide(providers);
29+
upvars::provide(providers);
30+
}

src/librustc/hir/check_attr.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
use crate::hir::def_id::DefId;
88
use crate::hir::intravisit::{self, NestedVisitorMap, Visitor};
99
use crate::hir::DUMMY_HIR_ID;
10-
use crate::hir::{self, Attribute, HirId, Item, ItemKind, TraitItem, TraitItemKind};
10+
use crate::hir::{self, HirId, Item, ItemKind, TraitItem, TraitItemKind};
1111
use crate::lint::builtin::UNUSED_ATTRIBUTES;
1212
use crate::ty::query::Providers;
1313
use crate::ty::TyCtxt;
1414

1515
use rustc_error_codes::*;
1616
use rustc_span::symbol::sym;
1717
use rustc_span::Span;
18+
use syntax::ast::Attribute;
1819
use syntax::attr;
1920

2021
use std::fmt::{self, Display};

src/librustc/hir/exports.rs

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use crate::hir::def::Res;
2+
use crate::hir::def_id::DefIdMap;
3+
use crate::ty;
4+
5+
use rustc_macros::HashStable;
6+
use rustc_span::Span;
7+
use syntax::ast;
8+
9+
use std::fmt::Debug;
10+
11+
/// This is the replacement export map. It maps a module to all of the exports
12+
/// within.
13+
pub type ExportMap<Id> = DefIdMap<Vec<Export<Id>>>;
14+
15+
#[derive(Copy, Clone, Debug, RustcEncodable, RustcDecodable, HashStable)]
16+
pub struct Export<Id> {
17+
/// The name of the target.
18+
pub ident: ast::Ident,
19+
/// The resolution of the target.
20+
pub res: Res<Id>,
21+
/// The span of the target.
22+
pub span: Span,
23+
/// The visibility of the export.
24+
/// We include non-`pub` exports for hygienic macros that get used from extern crates.
25+
pub vis: ty::Visibility,
26+
}
27+
28+
impl<Id> Export<Id> {
29+
pub fn map_id<R>(self, map: impl FnMut(Id) -> R) -> Export<R> {
30+
Export { ident: self.ident, res: self.res.map_id(map), span: self.span, vis: self.vis }
31+
}
32+
}

src/librustc/hir/intravisit.rs

+56-3
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,66 @@
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;
40-
use syntax::ast::{Attribute, Ident, Name};
39+
use syntax::ast::{Attribute, Ident, Label, Name};
40+
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+
}
4194

4295
#[derive(Copy, Clone)]
4396
pub enum FnKind<'a> {

src/librustc/hir/map/collector.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
use super::*;
22
use crate::dep_graph::{DepGraph, DepKind, DepNodeIndex};
33
use crate::hir;
4-
use crate::hir::def_id::{CrateNum, LOCAL_CRATE};
4+
use crate::hir::def_id::{CrateNum, DefIndex, LOCAL_CRATE};
55
use crate::hir::intravisit::{NestedVisitorMap, Visitor};
66
use crate::hir::map::HirEntryMap;
77
use crate::ich::Fingerprint;
88
use crate::middle::cstore::CrateStore;
9-
use crate::session::CrateDisambiguator;
10-
use crate::session::Session;
11-
use crate::util::nodemap::FxHashMap;
9+
use rustc_data_structures::fx::FxHashMap;
1210
use rustc_data_structures::svh::Svh;
1311
use rustc_index::vec::IndexVec;
12+
use rustc_session::{CrateDisambiguator, Session};
1413
use rustc_span::source_map::SourceMap;
1514
use rustc_span::Span;
1615
use std::iter::repeat;

src/librustc/hir/map/definitions.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
use crate::hir;
88
use crate::hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE};
99
use crate::ich::Fingerprint;
10-
use crate::session::CrateDisambiguator;
11-
use crate::util::nodemap::NodeMap;
1210

1311
use rustc_data_structures::fx::FxHashMap;
1412
use rustc_data_structures::stable_hasher::StableHasher;
1513
use rustc_index::vec::IndexVec;
14+
use rustc_session::node_id::NodeMap;
15+
use rustc_session::CrateDisambiguator;
1616
use rustc_span::hygiene::ExpnId;
1717
use rustc_span::symbol::{sym, Symbol};
1818
use rustc_span::Span;

src/librustc/hir/map/mod.rs

+5-43
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,21 @@ pub use self::definitions::{
44
};
55

66
use crate::dep_graph::{DepGraph, DepKind, DepNode, DepNodeIndex};
7-
use crate::hir::def_id::{DefId, LocalDefId, CRATE_DEF_INDEX};
7+
use crate::hir::def::{DefKind, Res};
8+
use crate::hir::def_id::{DefId, DefIndex, LocalDefId, CRATE_DEF_INDEX};
89
use crate::hir::itemlikevisit::ItemLikeVisitor;
910
use crate::hir::print::Nested;
10-
use crate::hir::DefKind;
1111
use crate::hir::*;
1212
use crate::middle::cstore::CrateStoreDyn;
1313
use crate::ty::query::Providers;
1414
use crate::util::common::time;
15-
use crate::util::nodemap::FxHashMap;
1615

16+
use rustc_data_structures::fx::FxHashMap;
1717
use rustc_data_structures::svh::Svh;
1818
use rustc_index::vec::IndexVec;
1919
use rustc_span::hygiene::MacroKind;
2020
use rustc_span::source_map::Spanned;
21+
use rustc_span::symbol::kw;
2122
use rustc_span::{Span, DUMMY_SP};
2223
use rustc_target::spec::abi::Abi;
2324
use syntax::ast::{self, Name, NodeId};
@@ -1203,7 +1204,7 @@ impl Named for ImplItem<'_> {
12031204
}
12041205

12051206
pub fn map_crate<'hir>(
1206-
sess: &crate::session::Session,
1207+
sess: &rustc_session::Session,
12071208
cstore: &CrateStoreDyn,
12081209
forest: &'hir Forest<'hir>,
12091210
definitions: Definitions,
@@ -1265,45 +1266,6 @@ impl<'hir> print::PpAnn for Map<'hir> {
12651266
}
12661267
}
12671268

1268-
impl<'a> print::State<'a> {
1269-
pub fn print_node(&mut self, node: Node<'_>) {
1270-
match node {
1271-
Node::Param(a) => self.print_param(&a),
1272-
Node::Item(a) => self.print_item(&a),
1273-
Node::ForeignItem(a) => self.print_foreign_item(&a),
1274-
Node::TraitItem(a) => self.print_trait_item(a),
1275-
Node::ImplItem(a) => self.print_impl_item(a),
1276-
Node::Variant(a) => self.print_variant(&a),
1277-
Node::AnonConst(a) => self.print_anon_const(&a),
1278-
Node::Expr(a) => self.print_expr(&a),
1279-
Node::Stmt(a) => self.print_stmt(&a),
1280-
Node::PathSegment(a) => self.print_path_segment(&a),
1281-
Node::Ty(a) => self.print_type(&a),
1282-
Node::TraitRef(a) => self.print_trait_ref(&a),
1283-
Node::Binding(a) | Node::Pat(a) => self.print_pat(&a),
1284-
Node::Arm(a) => self.print_arm(&a),
1285-
Node::Block(a) => {
1286-
// Containing cbox, will be closed by print-block at `}`.
1287-
self.cbox(print::INDENT_UNIT);
1288-
// Head-ibox, will be closed by print-block after `{`.
1289-
self.ibox(0);
1290-
self.print_block(&a)
1291-
}
1292-
Node::Lifetime(a) => self.print_lifetime(&a),
1293-
Node::Visibility(a) => self.print_visibility(&a),
1294-
Node::GenericParam(_) => bug!("cannot print Node::GenericParam"),
1295-
Node::Field(_) => bug!("cannot print StructField"),
1296-
// These cases do not carry enough information in the
1297-
// `hir_map` to reconstruct their full structure for pretty
1298-
// printing.
1299-
Node::Ctor(..) => bug!("cannot print isolated Ctor"),
1300-
Node::Local(a) => self.print_local_decl(&a),
1301-
Node::MacroDef(_) => bug!("cannot print MacroDef"),
1302-
Node::Crate => bug!("cannot print Crate"),
1303-
}
1304-
}
1305-
}
1306-
13071269
fn hir_id_to_string(map: &Map<'_>, id: HirId, include_id: bool) -> String {
13081270
let id_str = format!(" (hir_id={})", id);
13091271
let id_str = if include_id { &id_str[..] } else { "" };

0 commit comments

Comments
 (0)