Skip to content

Commit c654a07

Browse files
committed
Auto merge of #25785 - arielb1:cleanup-201505, r=eddyb
The caching essentially eliminates "stability checking" time (my attempt to clean-up junk got tangled up with stability, so I added the caching while I was at it). r? @eddyb
2 parents 8a87294 + 0ec3183 commit c654a07

File tree

18 files changed

+210
-490
lines changed

18 files changed

+210
-490
lines changed

src/librustc/metadata/common.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ enum_from_u32! {
146146
tag_table_closure_kinds = 0x65,
147147
tag_table_upvar_capture_map = 0x66,
148148
tag_table_capture_modes = 0x67,
149-
tag_table_object_cast_map = 0x68,
149+
// GAP 0x68
150150
tag_table_const_qualif = 0x69,
151151
tag_table_cast_kinds = 0x6a,
152152
}

src/librustc/metadata/csearch.rs

+7-16
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,6 @@ pub fn get_impl_trait<'tcx>(tcx: &ty::ctxt<'tcx>,
297297
decoder::get_impl_trait(&*cdata, def.node, tcx)
298298
}
299299

300-
// Given a def_id for an impl, return information about its vtables
301-
pub fn get_impl_vtables<'tcx>(tcx: &ty::ctxt<'tcx>,
302-
def: ast::DefId)
303-
-> ty::vtable_res<'tcx> {
304-
let cstore = &tcx.sess.cstore;
305-
let cdata = cstore.get_crate_data(def.krate);
306-
decoder::get_impl_vtables(&*cdata, def.node, tcx)
307-
}
308-
309300
pub fn get_native_libraries(cstore: &cstore::CStore, crate_num: ast::CrateNum)
310301
-> Vec<(cstore::NativeLibraryKind, String)> {
311302
let cdata = cstore.get_crate_data(crate_num);
@@ -389,15 +380,20 @@ pub fn is_const_fn(cstore: &cstore::CStore, did: ast::DefId) -> bool {
389380
decoder::is_const_fn(&*cdata, did.node)
390381
}
391382

383+
pub fn is_impl(cstore: &cstore::CStore, did: ast::DefId) -> bool {
384+
let cdata = cstore.get_crate_data(did.krate);
385+
decoder::is_impl(&*cdata, did.node)
386+
}
387+
392388
pub fn get_stability(cstore: &cstore::CStore,
393389
def: ast::DefId)
394390
-> Option<attr::Stability> {
395391
let cdata = cstore.get_crate_data(def.krate);
396392
decoder::get_stability(&*cdata, def.node)
397393
}
398394

399-
pub fn is_staged_api(cstore: &cstore::CStore, def: ast::DefId) -> bool {
400-
let cdata = cstore.get_crate_data(def.krate);
395+
pub fn is_staged_api(cstore: &cstore::CStore, krate: ast::CrateNum) -> bool {
396+
let cdata = cstore.get_crate_data(krate);
401397
let attrs = decoder::get_crate_attributes(cdata.data());
402398
for attr in &attrs {
403399
if &attr.name()[..] == "staged_api" {
@@ -414,11 +410,6 @@ pub fn get_repr_attrs(cstore: &cstore::CStore, def: ast::DefId)
414410
decoder::get_repr_attrs(&*cdata, def.node)
415411
}
416412

417-
pub fn is_associated_type(cstore: &cstore::CStore, def: ast::DefId) -> bool {
418-
let cdata = cstore.get_crate_data(def.krate);
419-
decoder::is_associated_type(&*cdata, def.node)
420-
}
421-
422413
pub fn is_defaulted_trait(cstore: &cstore::CStore, trait_def_id: ast::DefId) -> bool {
423414
let cdata = cstore.get_crate_data(trait_def_id.krate);
424415
decoder::is_defaulted_trait(&*cdata, trait_def_id.node)

src/librustc/metadata/decoder.rs

+8-21
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ use middle::lang_items;
3030
use middle::subst;
3131
use middle::ty::{ImplContainer, TraitContainer};
3232
use middle::ty::{self, Ty};
33-
use middle::astencode::vtable_decoder_helpers;
3433
use util::nodemap::FnvHashMap;
3534

3635
use std::cell::{Cell, RefCell};
@@ -522,18 +521,6 @@ pub fn get_impl_trait<'tcx>(cdata: Cmd,
522521
}
523522
}
524523

525-
pub fn get_impl_vtables<'tcx>(cdata: Cmd,
526-
id: ast::NodeId,
527-
tcx: &ty::ctxt<'tcx>)
528-
-> ty::vtable_res<'tcx>
529-
{
530-
let item_doc = lookup_item(id, cdata.data());
531-
let vtables_doc = reader::get_doc(item_doc, tag_item_impl_vtables);
532-
let mut decoder = reader::Decoder::new(vtables_doc);
533-
decoder.read_vtable_res(tcx, cdata)
534-
}
535-
536-
537524
pub fn get_symbol(data: &[u8], id: ast::NodeId) -> String {
538525
return item_symbol(lookup_item(id, data));
539526
}
@@ -1546,6 +1533,14 @@ pub fn is_const_fn(cdata: Cmd, id: ast::NodeId) -> bool {
15461533
}
15471534
}
15481535

1536+
pub fn is_impl(cdata: Cmd, id: ast::NodeId) -> bool {
1537+
let item_doc = lookup_item(id, cdata.data());
1538+
match item_family(item_doc) {
1539+
Impl => true,
1540+
_ => false,
1541+
}
1542+
}
1543+
15491544
fn doc_generics<'tcx>(base_doc: rbml::Doc,
15501545
tcx: &ty::ctxt<'tcx>,
15511546
cdata: Cmd,
@@ -1623,14 +1618,6 @@ fn doc_predicates<'tcx>(base_doc: rbml::Doc,
16231618
ty::GenericPredicates { predicates: predicates }
16241619
}
16251620

1626-
pub fn is_associated_type(cdata: Cmd, id: ast::NodeId) -> bool {
1627-
let items = reader::get_doc(rbml::Doc::new(cdata.data()), tag_items);
1628-
match maybe_find_item(id, items) {
1629-
None => false,
1630-
Some(item) => item_sort(item) == Some('t'),
1631-
}
1632-
}
1633-
16341621
pub fn is_defaulted_trait(cdata: Cmd, trait_id: ast::NodeId) -> bool {
16351622
let trait_doc = lookup_item(trait_id, cdata.data());
16361623
assert!(item_family(trait_doc) == Family::Trait);

src/librustc/metadata/encoder.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,7 @@ fn encode_extension_implementations(ecx: &EncodeContext,
999999
});
10001000
}
10011001

1002-
fn encode_stability(rbml_w: &mut Encoder, stab_opt: Option<attr::Stability>) {
1002+
fn encode_stability(rbml_w: &mut Encoder, stab_opt: Option<&attr::Stability>) {
10031003
stab_opt.map(|stab| {
10041004
rbml_w.start_tag(tag_items_data_item_stability);
10051005
stab.encode(rbml_w).unwrap();
@@ -1215,11 +1215,11 @@ fn encode_info_for_item(ecx: &EncodeContext,
12151215
encode_name(rbml_w, item.ident.name);
12161216
encode_unsafety(rbml_w, unsafety);
12171217

1218-
let trait_ref = ty::impl_id_to_trait_ref(tcx, item.id);
1218+
let trait_ref = ty::impl_trait_ref(tcx, local_def(item.id)).unwrap();
12191219
encode_trait_ref(rbml_w, ecx, trait_ref, tag_item_trait_ref);
12201220
rbml_w.end_tag();
12211221
}
1222-
ast::ItemImpl(unsafety, polarity, _, ref opt_trait, ref ty, ref ast_items) => {
1222+
ast::ItemImpl(unsafety, polarity, _, _, ref ty, ref ast_items) => {
12231223
// We need to encode information about the default methods we
12241224
// have inherited, so we drive this based on the impl structure.
12251225
let impl_items = tcx.impl_items.borrow();
@@ -1269,8 +1269,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
12691269
}
12701270
rbml_w.end_tag();
12711271
}
1272-
if opt_trait.is_some() {
1273-
let trait_ref = ty::impl_id_to_trait_ref(tcx, item.id);
1272+
if let Some(trait_ref) = ty::impl_trait_ref(tcx, local_def(item.id)) {
12741273
encode_trait_ref(rbml_w, ecx, trait_ref, tag_item_trait_ref);
12751274
}
12761275
encode_path(rbml_w, path.clone());

src/librustc/middle/astencode.rs

-104
Original file line numberDiff line numberDiff line change
@@ -696,19 +696,6 @@ pub fn encode_cast_kind(ebml_w: &mut Encoder, kind: cast::CastKind) {
696696
pub trait vtable_decoder_helpers<'tcx> {
697697
fn read_vec_per_param_space<T, F>(&mut self, f: F) -> VecPerParamSpace<T> where
698698
F: FnMut(&mut Self) -> T;
699-
fn read_vtable_res_with_key(&mut self,
700-
tcx: &ty::ctxt<'tcx>,
701-
cdata: &cstore::crate_metadata)
702-
-> (u32, ty::vtable_res<'tcx>);
703-
fn read_vtable_res(&mut self,
704-
tcx: &ty::ctxt<'tcx>, cdata: &cstore::crate_metadata)
705-
-> ty::vtable_res<'tcx>;
706-
fn read_vtable_param_res(&mut self,
707-
tcx: &ty::ctxt<'tcx>, cdata: &cstore::crate_metadata)
708-
-> ty::vtable_param_res<'tcx>;
709-
fn read_vtable_origin(&mut self,
710-
tcx: &ty::ctxt<'tcx>, cdata: &cstore::crate_metadata)
711-
-> ty::vtable_origin<'tcx>;
712699
}
713700

714701
impl<'tcx, 'a> vtable_decoder_helpers<'tcx> for reader::Decoder<'a> {
@@ -720,85 +707,6 @@ impl<'tcx, 'a> vtable_decoder_helpers<'tcx> for reader::Decoder<'a> {
720707
let fns = self.read_to_vec(|this| Ok(f(this))).unwrap();
721708
VecPerParamSpace::new(types, selfs, fns)
722709
}
723-
724-
fn read_vtable_res_with_key(&mut self,
725-
tcx: &ty::ctxt<'tcx>,
726-
cdata: &cstore::crate_metadata)
727-
-> (u32, ty::vtable_res<'tcx>) {
728-
self.read_struct("VtableWithKey", 2, |this| {
729-
let autoderef = this.read_struct_field("autoderef", 0, |this| {
730-
Decodable::decode(this)
731-
}).unwrap();
732-
Ok((autoderef, this.read_struct_field("vtable_res", 1, |this| {
733-
Ok(this.read_vtable_res(tcx, cdata))
734-
}).unwrap()))
735-
}).unwrap()
736-
}
737-
738-
fn read_vtable_res(&mut self,
739-
tcx: &ty::ctxt<'tcx>,
740-
cdata: &cstore::crate_metadata)
741-
-> ty::vtable_res<'tcx>
742-
{
743-
self.read_vec_per_param_space(
744-
|this| this.read_vtable_param_res(tcx, cdata))
745-
}
746-
747-
fn read_vtable_param_res(&mut self,
748-
tcx: &ty::ctxt<'tcx>, cdata: &cstore::crate_metadata)
749-
-> ty::vtable_param_res<'tcx> {
750-
self.read_to_vec(|this| Ok(this.read_vtable_origin(tcx, cdata)))
751-
.unwrap().into_iter().collect()
752-
}
753-
754-
fn read_vtable_origin(&mut self,
755-
tcx: &ty::ctxt<'tcx>, cdata: &cstore::crate_metadata)
756-
-> ty::vtable_origin<'tcx> {
757-
self.read_enum("vtable_origin", |this| {
758-
this.read_enum_variant(&["vtable_static",
759-
"vtable_param",
760-
"vtable_error",
761-
"vtable_closure"],
762-
|this, i| {
763-
Ok(match i {
764-
0 => {
765-
ty::vtable_static(
766-
this.read_enum_variant_arg(0, |this| {
767-
Ok(this.read_def_id_nodcx(cdata))
768-
}).unwrap(),
769-
this.read_enum_variant_arg(1, |this| {
770-
Ok(this.read_substs_nodcx(tcx, cdata))
771-
}).unwrap(),
772-
this.read_enum_variant_arg(2, |this| {
773-
Ok(this.read_vtable_res(tcx, cdata))
774-
}).unwrap()
775-
)
776-
}
777-
1 => {
778-
ty::vtable_param(
779-
this.read_enum_variant_arg(0, |this| {
780-
Decodable::decode(this)
781-
}).unwrap(),
782-
this.read_enum_variant_arg(1, |this| {
783-
this.read_uint()
784-
}).unwrap()
785-
)
786-
}
787-
2 => {
788-
ty::vtable_closure(
789-
this.read_enum_variant_arg(0, |this| {
790-
Ok(this.read_def_id_nodcx(cdata))
791-
}).unwrap()
792-
)
793-
}
794-
3 => {
795-
ty::vtable_error
796-
}
797-
_ => panic!("bad enum variant")
798-
})
799-
})
800-
}).unwrap()
801-
}
802710
}
803711

804712
// ___________________________________________________________________________
@@ -1209,13 +1117,6 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
12091117
})
12101118
}
12111119

1212-
if let Some(trait_ref) = tcx.object_cast_map.borrow().get(&id) {
1213-
rbml_w.tag(c::tag_table_object_cast_map, |rbml_w| {
1214-
rbml_w.id(id);
1215-
rbml_w.emit_trait_ref(ecx, &trait_ref.0);
1216-
})
1217-
}
1218-
12191120
if let Some(adjustment) = tcx.adjustments.borrow().get(&id) {
12201121
match *adjustment {
12211122
ty::AdjustDerefRef(ref adj) => {
@@ -1800,11 +1701,6 @@ fn decode_side_tables(dcx: &DecodeContext,
18001701
};
18011702
dcx.tcx.method_map.borrow_mut().insert(method_call, method);
18021703
}
1803-
c::tag_table_object_cast_map => {
1804-
let trait_ref = val_dsr.read_poly_trait_ref(dcx);
1805-
dcx.tcx.object_cast_map.borrow_mut()
1806-
.insert(id, trait_ref);
1807-
}
18081704
c::tag_table_adjustments => {
18091705
let adj: ty::AutoAdjustment = val_dsr.read_auto_adjustment(dcx);
18101706
dcx.tcx.adjustments.borrow_mut().insert(id, adj);

0 commit comments

Comments
 (0)