Skip to content

Commit 9c2db4c

Browse files
arielb1Ariel Ben-Yehuda
authored andcommitted
remove csearch from the rest of rustc
1 parent b00ec91 commit 9c2db4c

File tree

12 files changed

+242
-122
lines changed

12 files changed

+242
-122
lines changed

src/librustc/metadata/creader.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ impl<'a> CrateReader<'a> {
242242
// We're also sure to compare *paths*, not actual byte slices. The
243243
// `source` stores paths which are normalized which may be different
244244
// from the strings on the command line.
245-
let source = self.sess.cstore.get_used_crate_source(cnum).unwrap();
245+
let source = self.sess.cstore.do_get_used_crate_source(cnum).unwrap();
246246
if let Some(locs) = self.sess.opts.externs.get(name) {
247247
let found = locs.iter().any(|l| {
248248
let l = fs::canonicalize(l).ok();
@@ -415,7 +415,7 @@ impl<'a> CrateReader<'a> {
415415
if explicitly_linked && !data.explicitly_linked.get() {
416416
data.explicitly_linked.set(explicitly_linked);
417417
}
418-
(cnum, data, self.sess.cstore.get_used_crate_source(cnum).unwrap())
418+
(cnum, data, self.sess.cstore.do_get_used_crate_source(cnum).unwrap())
419419
}
420420
LookupResult::Loaded(library) => {
421421
self.register_crate(root, ident, name, span, library,

src/librustc/metadata/cstore.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ impl CStore {
159159
I: FnMut(ast::CrateNum, &crate_metadata, Option<CrateSource>),
160160
{
161161
for (&k, v) in self.metas.borrow().iter() {
162-
let origin = self.get_used_crate_source(k);
162+
let origin = self.do_get_used_crate_source(k);
163163
origin.as_ref().map(|cs| { assert!(k == cs.cnum); });
164164
i(k, &**v, origin);
165165
}
@@ -172,8 +172,9 @@ impl CStore {
172172
}
173173
}
174174

175-
pub fn get_used_crate_source(&self, cnum: ast::CrateNum)
176-
-> Option<CrateSource> {
175+
// TODO: killdo
176+
pub fn do_get_used_crate_source(&self, cnum: ast::CrateNum)
177+
-> Option<CrateSource> {
177178
self.used_crate_sources.borrow_mut()
178179
.iter().find(|source| source.cnum == cnum).cloned()
179180
}
@@ -196,8 +197,9 @@ impl CStore {
196197
// In order to get this left-to-right dependency ordering, we perform a
197198
// topological sort of all crates putting the leaves at the right-most
198199
// positions.
199-
pub fn get_used_crates(&self, prefer: LinkagePreference)
200-
-> Vec<(ast::CrateNum, Option<PathBuf>)> {
200+
// TODO: killdo
201+
pub fn do_get_used_crates(&self, prefer: LinkagePreference)
202+
-> Vec<(ast::CrateNum, Option<PathBuf>)> {
201203
let mut ordering = Vec::new();
202204
fn visit(cstore: &CStore, cnum: ast::CrateNum,
203205
ordering: &mut Vec<ast::CrateNum>) {

src/librustc/metadata/util.rs

Lines changed: 143 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,36 @@
1111
use front::map as ast_map;
1212
use metadata::cstore;
1313
use metadata::decoder;
14+
use metadata::encoder;
15+
use metadata::loader;
1416
use middle::astencode;
17+
use middle::def;
1518
use middle::lang_items;
16-
use middle::ty;
19+
use middle::ty::{self, Ty};
1720
use middle::def_id::{DefId, DefIndex};
21+
use util::nodemap::{NodeMap, NodeSet};
1822

1923
use std::any::Any;
24+
use std::cell::RefCell;
2025
use std::rc::Rc;
26+
use std::path::PathBuf;
2127
use syntax::ast;
2228
use syntax::attr;
29+
use rustc_back::target::Target;
2330
use rustc_front::hir;
2431

32+
pub use metadata::common::LinkMeta;
33+
pub use metadata::creader::validate_crate_name;
2534
pub use metadata::csearch::FoundAst;
35+
pub use metadata::cstore::CrateSource;
2636
pub use metadata::cstore::LinkagePreference;
37+
pub use metadata::cstore::NativeLibraryKind;
2738
pub use metadata::decoder::DecodeInlinedItem;
2839
pub use metadata::decoder::DefLike;
2940
pub use metadata::inline::InlinedItem;
3041

3142
pub use self::DefLike::{DlDef, DlField, DlImpl};
43+
pub use self::NativeLibraryKind::{NativeStatic, NativeFramework, NativeUnknown};
3244

3345
pub struct ChildItem {
3446
pub def: DefLike,
@@ -54,6 +66,7 @@ pub trait CrateStore<'tcx> : Any {
5466
fn item_super_predicates(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
5567
-> ty::GenericPredicates<'tcx>;
5668
fn item_attrs(&self, def_id: DefId) -> Vec<ast::Attribute>;
69+
fn item_symbol(&self, def: DefId) -> String;
5770
fn trait_def(&self, tcx: &ty::ctxt<'tcx>, def: DefId)-> ty::TraitDef<'tcx>;
5871
fn adt_def(&self, tcx: &ty::ctxt<'tcx>, def: DefId) -> ty::AdtDefMaster<'tcx>;
5972
fn inherent_implementations_for_type(&self, def_id: DefId) -> Vec<DefId>;
@@ -86,14 +99,21 @@ pub trait CrateStore<'tcx> : Any {
8699
fn is_defaulted_trait(&self, did: DefId) -> bool;
87100
fn is_impl(&self, did: DefId) -> bool;
88101
fn is_static_method(&self, did: DefId) -> bool;
102+
fn is_extern_fn(&self, tcx: &ty::ctxt<'tcx>, did: DefId) -> bool;
103+
fn is_static(&self, did: DefId) -> bool;
89104

90-
// metadata
105+
// crate metadata
91106
fn dylib_dependency_formats(&self, cnum: ast::CrateNum)
92107
-> Vec<(ast::CrateNum, LinkagePreference)>;
93108
fn lang_items(&self, cnum: ast::CrateNum) -> Vec<(DefIndex, usize)>;
94109
fn missing_lang_items(&self, cnum: ast::CrateNum) -> Vec<lang_items::LangItem>;
95110
fn is_staged_api(&self, cnum: ast::CrateNum) -> bool;
111+
fn is_explicitly_linked(&self, cnum: ast::CrateNum) -> bool;
112+
fn is_allocator(&self, cnum: ast::CrateNum) -> bool;
113+
fn crate_name(&self, cnum: ast::CrateNum) -> String;
96114
fn plugin_registrar_fn(&self, cnum: ast::CrateNum) -> Option<DefId>;
115+
fn native_libraries(&self, cnum: ast::CrateNum) -> Vec<(NativeLibraryKind, String)>;
116+
fn reachable_ids(&self, cnum: ast::CrateNum) -> Vec<DefId>;
97117

98118
// resolve
99119
fn def_path(&self, def: DefId) -> ast_map::DefPath;
@@ -102,9 +122,24 @@ pub trait CrateStore<'tcx> : Any {
102122
fn item_children(&self, did: DefId) -> Vec<ChildItem>;
103123
fn crate_top_level_items(&self, cnum: ast::CrateNum) -> Vec<ChildItem>;
104124

105-
// misc.
125+
// misc. metadata
106126
fn maybe_get_item_ast(&'tcx self, tcx: &ty::ctxt<'tcx>, def: DefId)
107127
-> FoundAst<'tcx>;
128+
129+
// utility functions
130+
fn metadata_filename(&self) -> &str;
131+
fn metadata_section_name(&self, target: &Target) -> &str;
132+
fn encode_type(&self, tcx: &ty::ctxt<'tcx>, ty: Ty<'tcx>) -> Vec<u8>;
133+
fn used_crates(&self, prefer: LinkagePreference) -> Vec<(ast::CrateNum, Option<PathBuf>)>;
134+
fn used_crate_source(&self, cnum: ast::CrateNum) -> CrateSource;
135+
fn encode_metadata(&self,
136+
tcx: &ty::ctxt<'tcx>,
137+
reexports: &def::ExportMap,
138+
item_symbols: &RefCell<NodeMap<String>>,
139+
link_meta: &LinkMeta,
140+
reachable: &NodeSet,
141+
krate: &hir::Crate) -> Vec<u8>;
142+
fn metadata_encoding_version(&self) -> &[u8];
108143
}
109144

110145
impl<'tcx> CrateStore<'tcx> for cstore::CStore {
@@ -165,6 +200,12 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
165200
decoder::get_item_attrs(&*cdata, def_id.index)
166201
}
167202

203+
fn item_symbol(&self, def: DefId) -> String
204+
{
205+
let cdata = self.get_crate_data(def.krate);
206+
decoder::get_symbol(&cdata, def.index)
207+
}
208+
168209
fn trait_def(&self, tcx: &ty::ctxt<'tcx>, def: DefId) -> ty::TraitDef<'tcx>
169210
{
170211
let cdata = self.get_crate_data(def.krate);
@@ -285,21 +326,36 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
285326
decoder::is_const_fn(&cdata, did.index)
286327
}
287328

288-
fn is_defaulted_trait(&self, trait_def_id: DefId) -> bool {
329+
fn is_defaulted_trait(&self, trait_def_id: DefId) -> bool
330+
{
289331
let cdata = self.get_crate_data(trait_def_id.krate);
290332
decoder::is_defaulted_trait(&*cdata, trait_def_id.index)
291333
}
292334

293-
fn is_impl(&self, did: DefId) -> bool {
335+
fn is_impl(&self, did: DefId) -> bool
336+
{
294337
let cdata = self.get_crate_data(did.krate);
295338
decoder::is_impl(&*cdata, did.index)
296339
}
297340

298-
fn is_static_method(&self, def: DefId) -> bool {
341+
fn is_static_method(&self, def: DefId) -> bool
342+
{
299343
let cdata = self.get_crate_data(def.krate);
300344
decoder::is_static_method(&*cdata, def.index)
301345
}
302346

347+
fn is_extern_fn(&self, tcx: &ty::ctxt<'tcx>, did: DefId) -> bool
348+
{
349+
let cdata = self.get_crate_data(did.krate);
350+
decoder::is_extern_fn(&*cdata, did.index, tcx)
351+
}
352+
353+
fn is_static(&self, did: DefId) -> bool
354+
{
355+
let cdata = self.get_crate_data(did.krate);
356+
decoder::is_static(&*cdata, did.index)
357+
}
358+
303359
fn dylib_dependency_formats(&self, cnum: ast::CrateNum)
304360
-> Vec<(ast::CrateNum, LinkagePreference)>
305361
{
@@ -329,6 +385,21 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
329385
self.get_crate_data(cnum).staged_api
330386
}
331387

388+
fn is_explicitly_linked(&self, cnum: ast::CrateNum) -> bool
389+
{
390+
self.get_crate_data(cnum).explicitly_linked.get()
391+
}
392+
393+
fn is_allocator(&self, cnum: ast::CrateNum) -> bool
394+
{
395+
self.get_crate_data(cnum).is_allocator()
396+
}
397+
398+
fn crate_name(&self, cnum: ast::CrateNum) -> String
399+
{
400+
self.get_crate_data(cnum).name.clone()
401+
}
402+
332403
fn plugin_registrar_fn(&self, cnum: ast::CrateNum) -> Option<DefId>
333404
{
334405
let cdata = self.get_crate_data(cnum);
@@ -338,6 +409,18 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
338409
})
339410
}
340411

412+
fn native_libraries(&self, cnum: ast::CrateNum) -> Vec<(NativeLibraryKind, String)>
413+
{
414+
let cdata = self.get_crate_data(cnum);
415+
decoder::get_native_libraries(&*cdata)
416+
}
417+
418+
fn reachable_ids(&self, cnum: ast::CrateNum) -> Vec<DefId>
419+
{
420+
let cdata = self.get_crate_data(cnum);
421+
decoder::get_reachable_ids(&*cdata)
422+
}
423+
341424
fn def_path(&self, def: DefId) -> ast_map::DefPath
342425
{
343426
let cdata = self.get_crate_data(def.krate);
@@ -396,4 +479,58 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
396479
let decode_inlined_item = Box::new(astencode::decode_inlined_item);
397480
decoder::maybe_get_item_ast(&*cdata, tcx, def.index, decode_inlined_item)
398481
}
482+
483+
fn metadata_filename(&self) -> &str
484+
{
485+
loader::METADATA_FILENAME
486+
}
487+
488+
fn metadata_section_name(&self, target: &Target) -> &str
489+
{
490+
loader::meta_section_name(target)
491+
}
492+
fn encode_type(&self, tcx: &ty::ctxt<'tcx>, ty: Ty<'tcx>) -> Vec<u8>
493+
{
494+
encoder::encoded_ty(tcx, ty)
495+
}
496+
497+
fn used_crates(&self, prefer: LinkagePreference) -> Vec<(ast::CrateNum, Option<PathBuf>)>
498+
{
499+
self.do_get_used_crates(prefer)
500+
}
501+
502+
fn used_crate_source(&self, cnum: ast::CrateNum) -> CrateSource
503+
{
504+
self.do_get_used_crate_source(cnum).unwrap()
505+
}
506+
507+
fn encode_metadata(&self,
508+
tcx: &ty::ctxt<'tcx>,
509+
reexports: &def::ExportMap,
510+
item_symbols: &RefCell<NodeMap<String>>,
511+
link_meta: &LinkMeta,
512+
reachable: &NodeSet,
513+
krate: &hir::Crate) -> Vec<u8>
514+
{
515+
let encode_inlined_item: encoder::EncodeInlinedItem =
516+
Box::new(|ecx, rbml_w, ii| astencode::encode_inlined_item(ecx, rbml_w, ii));
517+
518+
let encode_params = encoder::EncodeParams {
519+
diag: tcx.sess.diagnostic(),
520+
tcx: tcx,
521+
reexports: reexports,
522+
item_symbols: item_symbols,
523+
link_meta: link_meta,
524+
cstore: self,
525+
encode_inlined_item: encode_inlined_item,
526+
reachable: reachable
527+
};
528+
encoder::encode_metadata(encode_params, krate)
529+
530+
}
531+
532+
fn metadata_encoding_version(&self) -> &[u8]
533+
{
534+
encoder::metadata_encoding_version
535+
}
399536
}

0 commit comments

Comments
 (0)