Skip to content

Commit 8a6118b

Browse files
committed
move InlinedItem into librustc, where it belongs
1 parent c1e865c commit 8a6118b

File tree

13 files changed

+157
-126
lines changed

13 files changed

+157
-126
lines changed

src/librustc/ast_map/mod.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ pub use self::Node::*;
1212
pub use self::PathElem::*;
1313
use self::MapEntry::*;
1414

15+
use metadata::inline::InlinedItem;
16+
use metadata::inline::InlinedItem as II;
1517
use syntax::abi;
1618
use syntax::ast::*;
1719
use syntax::ast_util;
@@ -374,8 +376,8 @@ impl<'ast> Map<'ast> {
374376
pub fn get_parent_did(&self, id: NodeId) -> DefId {
375377
let parent = self.get_parent(id);
376378
match self.find_entry(parent) {
377-
Some(RootInlinedParent(&InlinedParent {ii: IITraitItem(did, _), ..})) => did,
378-
Some(RootInlinedParent(&InlinedParent {ii: IIImplItem(did, _), ..})) => did,
379+
Some(RootInlinedParent(&InlinedParent {ii: II::TraitItem(did, _), ..})) => did,
380+
Some(RootInlinedParent(&InlinedParent {ii: II::ImplItem(did, _), ..})) => did,
379381
_ => ast_util::local_def(parent)
380382
}
381383
}
@@ -967,16 +969,16 @@ pub fn map_decoded_item<'ast, F: FoldOps>(map: &Map<'ast>,
967969
-> &'ast InlinedItem {
968970
let mut fld = IdAndSpanUpdater { fold_ops: fold_ops };
969971
let ii = match ii {
970-
IIItem(i) => IIItem(fld.fold_item(i).expect_one("expected one item")),
971-
IITraitItem(d, ti) => {
972-
IITraitItem(fld.fold_ops.new_def_id(d),
973-
fld.fold_trait_item(ti).expect_one("expected one trait item"))
972+
II::Item(i) => II::Item(fld.fold_item(i).expect_one("expected one item")),
973+
II::TraitItem(d, ti) => {
974+
II::TraitItem(fld.fold_ops.new_def_id(d),
975+
fld.fold_trait_item(ti).expect_one("expected one trait item"))
974976
}
975-
IIImplItem(d, ii) => {
976-
IIImplItem(fld.fold_ops.new_def_id(d),
977-
fld.fold_impl_item(ii).expect_one("expected one impl item"))
977+
II::ImplItem(d, ii) => {
978+
II::ImplItem(fld.fold_ops.new_def_id(d),
979+
fld.fold_impl_item(ii).expect_one("expected one impl item"))
978980
}
979-
IIForeign(i) => IIForeign(fld.fold_foreign_item(i))
981+
II::Foreign(i) => II::Foreign(fld.fold_foreign_item(i))
980982
};
981983

982984
let ii_parent = map.forest.inlined_items.alloc(InlinedParent {
@@ -990,20 +992,20 @@ pub fn map_decoded_item<'ast, F: FoldOps>(map: &Map<'ast>,
990992
parent_node: ii_parent_id,
991993
};
992994
collector.insert_entry(ii_parent_id, RootInlinedParent(ii_parent));
993-
visit::walk_inlined_item(&mut collector, &ii_parent.ii);
995+
ii_parent.ii.visit(&mut collector);
994996

995997
// Methods get added to the AST map when their impl is visited. Since we
996998
// don't decode and instantiate the impl, but just the method, we have to
997999
// add it to the table now. Likewise with foreign items.
9981000
match ii_parent.ii {
999-
IIItem(_) => {}
1000-
IITraitItem(_, ref ti) => {
1001+
II::Item(_) => {}
1002+
II::TraitItem(_, ref ti) => {
10011003
collector.insert(ti.id, NodeTraitItem(ti));
10021004
}
1003-
IIImplItem(_, ref ii) => {
1005+
II::ImplItem(_, ref ii) => {
10041006
collector.insert(ii.id, NodeImplItem(ii));
10051007
}
1006-
IIForeign(ref i) => {
1008+
II::Foreign(ref i) => {
10071009
collector.insert(i.id, NodeForeignItem(i));
10081010
}
10091011
}

src/librustc/metadata/csearch.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use ast_map;
1414
use metadata::common::*;
1515
use metadata::cstore;
1616
use metadata::decoder;
17+
use metadata::inline::InlinedItem;
1718
use middle::lang_items;
1819
use middle::ty;
1920

@@ -96,8 +97,8 @@ pub fn get_item_path(tcx: &ty::ctxt, def: ast::DefId) -> Vec<ast_map::PathElem>
9697
}
9798

9899
pub enum FoundAst<'ast> {
99-
Found(&'ast ast::InlinedItem),
100-
FoundParent(ast::DefId, &'ast ast::InlinedItem),
100+
Found(&'ast InlinedItem),
101+
FoundParent(ast::DefId, &'ast InlinedItem),
101102
NotFound,
102103
}
103104

src/librustc/metadata/decoder.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use metadata::csearch::MethodInfo;
2323
use metadata::csearch;
2424
use metadata::cstore;
2525
use metadata::encoder::def_to_u64;
26+
use metadata::inline::InlinedItem;
2627
use metadata::tydecode::{parse_ty_data, parse_region_data,
2728
parse_type_param_def_data, parse_bare_fn_ty_data,
2829
parse_trait_ref_data, parse_predicate_data};
@@ -776,7 +777,7 @@ pub type DecodeInlinedItem<'a> =
776777
&ty::ctxt<'tcx>,
777778
Vec<ast_map::PathElem>,
778779
rbml::Doc)
779-
-> Result<&'tcx ast::InlinedItem, Vec<ast_map::PathElem>> + 'a>;
780+
-> Result<&'tcx InlinedItem, Vec<ast_map::PathElem>> + 'a>;
780781

781782
pub fn maybe_get_item_ast<'tcx>(cdata: Cmd, tcx: &ty::ctxt<'tcx>, id: ast::NodeId,
782783
mut decode_inlined_item: DecodeInlinedItem)

src/librustc/metadata/encoder.rs

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
#![allow(unused_must_use)] // everything is just a MemWriter, can't fail
1414
#![allow(non_camel_case_types)]
1515

16-
pub use self::InlinedItemRef::*;
17-
1816
use ast_map::{self, LinkedPath, PathElem, PathElems};
1917
use back::svh::Svh;
2018
use session::config;
2119
use metadata::common::*;
2220
use metadata::cstore;
2321
use metadata::decoder;
2422
use metadata::tyencode;
23+
use metadata::inline::InlinedItemRef;
2524
use middle::def;
2625
use middle::ty::{self, Ty};
2726
use middle::stability;
@@ -46,14 +45,6 @@ use syntax::visit;
4645
use syntax;
4746
use rbml::writer::Encoder;
4847

49-
/// A borrowed version of `ast::InlinedItem`.
50-
pub enum InlinedItemRef<'a> {
51-
IIItemRef(&'a ast::Item),
52-
IITraitItemRef(DefId, &'a ast::TraitItem),
53-
IIImplItemRef(DefId, &'a ast::ImplItem),
54-
IIForeignRef(&'a ast::ForeignItem)
55-
}
56-
5748
pub type EncodeInlinedItem<'a> =
5849
Box<FnMut(&EncodeContext, &mut Encoder, InlinedItemRef) + 'a>;
5950

@@ -830,7 +821,7 @@ fn encode_info_for_associated_const(ecx: &EncodeContext,
830821

831822
if let Some(ii) = impl_item_opt {
832823
encode_attributes(rbml_w, &ii.attrs);
833-
encode_inlined_item(ecx, rbml_w, IIImplItemRef(local_def(parent_id), ii));
824+
encode_inlined_item(ecx, rbml_w, InlinedItemRef::ImplItem(local_def(parent_id), ii));
834825
}
835826

836827
rbml_w.end_tag();
@@ -868,7 +859,7 @@ fn encode_info_for_method<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
868859
let needs_inline = any_types || is_default_impl ||
869860
attr::requests_inline(&impl_item.attrs);
870861
if needs_inline || sig.constness == ast::Constness::Const {
871-
encode_inlined_item(ecx, rbml_w, IIImplItemRef(local_def(parent_id),
862+
encode_inlined_item(ecx, rbml_w, InlinedItemRef::ImplItem(local_def(parent_id),
872863
impl_item));
873864
}
874865
encode_constness(rbml_w, sig.constness);
@@ -1050,7 +1041,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
10501041
encode_name(rbml_w, item.ident.name);
10511042
encode_path(rbml_w, path);
10521043
encode_attributes(rbml_w, &item.attrs);
1053-
encode_inlined_item(ecx, rbml_w, IIItemRef(item));
1044+
encode_inlined_item(ecx, rbml_w, InlinedItemRef::Item(item));
10541045
encode_visibility(rbml_w, vis);
10551046
encode_stability(rbml_w, stab);
10561047
rbml_w.end_tag();
@@ -1067,7 +1058,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
10671058
encode_attributes(rbml_w, &item.attrs);
10681059
let needs_inline = tps_len > 0 || attr::requests_inline(&item.attrs);
10691060
if needs_inline || constness == ast::Constness::Const {
1070-
encode_inlined_item(ecx, rbml_w, IIItemRef(item));
1061+
encode_inlined_item(ecx, rbml_w, InlinedItemRef::Item(item));
10711062
}
10721063
if tps_len == 0 {
10731064
encode_symbol(ecx, rbml_w, item.id);
@@ -1132,7 +1123,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
11321123
for v in &enum_definition.variants {
11331124
encode_variant_id(rbml_w, local_def(v.node.id));
11341125
}
1135-
encode_inlined_item(ecx, rbml_w, IIItemRef(item));
1126+
encode_inlined_item(ecx, rbml_w, InlinedItemRef::Item(item));
11361127
encode_path(rbml_w, path);
11371128

11381129
// Encode inherent implementations for this enumeration.
@@ -1180,7 +1171,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
11801171
needs to know*/
11811172
encode_struct_fields(rbml_w, variant, def_id);
11821173

1183-
encode_inlined_item(ecx, rbml_w, IIItemRef(item));
1174+
encode_inlined_item(ecx, rbml_w, InlinedItemRef::Item(item));
11841175

11851176
// Encode inherent implementations for this structure.
11861177
encode_inherent_implementations(ecx, rbml_w, def_id);
@@ -1455,7 +1446,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
14551446
match trait_item.node {
14561447
ast::ConstTraitItem(_, _) => {
14571448
encode_inlined_item(ecx, rbml_w,
1458-
IITraitItemRef(def_id, trait_item));
1449+
InlinedItemRef::TraitItem(def_id, trait_item));
14591450
}
14601451
ast::MethodTraitItem(ref sig, ref body) => {
14611452
// If this is a static method, we've already
@@ -1469,7 +1460,8 @@ fn encode_info_for_item(ecx: &EncodeContext,
14691460

14701461
if body.is_some() {
14711462
encode_item_sort(rbml_w, 'p');
1472-
encode_inlined_item(ecx, rbml_w, IITraitItemRef(def_id, trait_item));
1463+
encode_inlined_item(ecx, rbml_w,
1464+
InlinedItemRef::TraitItem(def_id, trait_item));
14731465
} else {
14741466
encode_item_sort(rbml_w, 'r');
14751467
}
@@ -1508,7 +1500,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
15081500
encode_bounds_and_type_for_item(rbml_w, ecx, nitem.id);
15091501
encode_name(rbml_w, nitem.ident.name);
15101502
if abi == abi::RustIntrinsic {
1511-
encode_inlined_item(ecx, rbml_w, IIForeignRef(nitem));
1503+
encode_inlined_item(ecx, rbml_w, InlinedItemRef::Foreign(nitem));
15121504
}
15131505
encode_attributes(rbml_w, &*nitem.attrs);
15141506
let stab = stability::lookup(ecx.tcx, ast_util::local_def(nitem.id));

src/librustc/metadata/inline.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
use syntax::ast;
12+
use syntax::ast_util::{IdRange, IdRangeComputingVisitor,
13+
IdVisitor, IdVisitingOperation};
14+
use syntax::ptr::P;
15+
use syntax::visit::Visitor;
16+
use self::InlinedItem::*;
17+
18+
/// The data we save and restore about an inlined item or method. This is not
19+
/// part of the AST that we parse from a file, but it becomes part of the tree
20+
/// that we trans.
21+
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
22+
pub enum InlinedItem {
23+
Item(P<ast::Item>),
24+
TraitItem(ast::DefId /* impl id */, P<ast::TraitItem>),
25+
ImplItem(ast::DefId /* impl id */, P<ast::ImplItem>),
26+
Foreign(P<ast::ForeignItem>),
27+
}
28+
29+
/// A borrowed version of `ast::InlinedItem`.
30+
pub enum InlinedItemRef<'a> {
31+
Item(&'a ast::Item),
32+
TraitItem(ast::DefId, &'a ast::TraitItem),
33+
ImplItem(ast::DefId, &'a ast::ImplItem),
34+
Foreign(&'a ast::ForeignItem)
35+
}
36+
37+
impl InlinedItem {
38+
pub fn visit<'ast,V>(&'ast self, visitor: &mut V)
39+
where V: Visitor<'ast>
40+
{
41+
match *self {
42+
Item(ref i) => visitor.visit_item(&**i),
43+
Foreign(ref i) => visitor.visit_foreign_item(&**i),
44+
TraitItem(_, ref ti) => visitor.visit_trait_item(ti),
45+
ImplItem(_, ref ii) => visitor.visit_impl_item(ii),
46+
}
47+
}
48+
49+
pub fn visit_ids<O: IdVisitingOperation>(&self, operation: &mut O) {
50+
let mut id_visitor = IdVisitor {
51+
operation: operation,
52+
pass_through_items: true,
53+
visited_outermost: false,
54+
};
55+
self.visit(&mut id_visitor);
56+
}
57+
58+
pub fn compute_id_range(&self) -> IdRange {
59+
let mut visitor = IdRangeComputingVisitor::new();
60+
self.visit_ids(&mut visitor);
61+
visitor.result()
62+
}
63+
}
64+

src/librustc/metadata/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ pub mod csearch;
1919
pub mod loader;
2020
pub mod filesearch;
2121
pub mod macro_import;
22+
pub mod inline;

0 commit comments

Comments
 (0)