Skip to content

Commit 43a6deb

Browse files
author
Ariel Ben-Yehuda
committed
fix rustc-test
1 parent 4190dce commit 43a6deb

File tree

4 files changed

+147
-10
lines changed

4 files changed

+147
-10
lines changed

src/grammar/verify.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ use std::path::Path;
2525
use syntax::parse;
2626
use syntax::parse::lexer;
2727
use rustc::session::{self, config};
28+
use rustc::middle::cstore::DummyCrateStore;
2829

30+
use std::rc::Rc;
2931
use syntax::ast;
3032
use syntax::ast::Name;
3133
use syntax::codemap;
@@ -286,7 +288,8 @@ fn main() {
286288

287289
let options = config::basic_options();
288290
let session = session::build_session(options, None,
289-
syntax::diagnostics::registry::Registry::new(&[]));
291+
syntax::diagnostics::registry::Registry::new(&[]),
292+
Rc::new(DummyCrateStore));
290293
let filemap = session.parse_sess.codemap().new_filemap(String::from("<n/a>"), code);
291294
let mut lexer = lexer::StringReader::new(session.diagnostic(), filemap);
292295
let cm = session.codemap();

src/librustc/middle/cstore.rs

+127
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,130 @@ pub fn validate_crate_name(sess: Option<&Session>, s: &str, sp: Option<Span>) {
278278
None => {}
279279
}
280280
}
281+
282+
/// A dummy crate store that does not support any non-local crates,
283+
/// for test purposes.
284+
pub struct DummyCrateStore;
285+
#[allow(unused_variables)]
286+
impl<'tcx> CrateStore<'tcx> for DummyCrateStore {
287+
// item info
288+
fn stability(&self, def: DefId) -> Option<attr::Stability> { unimplemented!() }
289+
fn closure_kind(&self, tcx: &ty::ctxt<'tcx>, def_id: DefId)
290+
-> ty::ClosureKind { unimplemented!() }
291+
fn closure_ty(&self, tcx: &ty::ctxt<'tcx>, def_id: DefId)
292+
-> ty::ClosureTy<'tcx> { unimplemented!() }
293+
fn item_variances(&self, def: DefId) -> ty::ItemVariances { unimplemented!() }
294+
fn repr_attrs(&self, def: DefId) -> Vec<attr::ReprAttr> { unimplemented!() }
295+
fn item_type(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
296+
-> ty::TypeScheme<'tcx> { unimplemented!() }
297+
fn item_path(&self, def: DefId) -> Vec<hir_map::PathElem> { unimplemented!() }
298+
fn item_name(&self, def: DefId) -> ast::Name { unimplemented!() }
299+
fn item_predicates(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
300+
-> ty::GenericPredicates<'tcx> { unimplemented!() }
301+
fn item_super_predicates(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
302+
-> ty::GenericPredicates<'tcx> { unimplemented!() }
303+
fn item_attrs(&self, def_id: DefId) -> Vec<ast::Attribute> { unimplemented!() }
304+
fn item_symbol(&self, def: DefId) -> String { unimplemented!() }
305+
fn trait_def(&self, tcx: &ty::ctxt<'tcx>, def: DefId)-> ty::TraitDef<'tcx>
306+
{ unimplemented!() }
307+
fn adt_def(&self, tcx: &ty::ctxt<'tcx>, def: DefId) -> ty::AdtDefMaster<'tcx>
308+
{ unimplemented!() }
309+
fn method_arg_names(&self, did: DefId) -> Vec<String> { unimplemented!() }
310+
fn inherent_implementations_for_type(&self, def_id: DefId) -> Vec<DefId> { vec![] }
311+
312+
// trait info
313+
fn implementations_of_trait(&self, def_id: DefId) -> Vec<DefId> { vec![] }
314+
fn provided_trait_methods(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
315+
-> Vec<Rc<ty::Method<'tcx>>> { unimplemented!() }
316+
fn trait_item_def_ids(&self, def: DefId)
317+
-> Vec<ty::ImplOrTraitItemId> { unimplemented!() }
318+
319+
// impl info
320+
fn impl_items(&self, impl_def_id: DefId) -> Vec<ty::ImplOrTraitItemId>
321+
{ unimplemented!() }
322+
fn impl_trait_ref(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
323+
-> Option<ty::TraitRef<'tcx>> { unimplemented!() }
324+
fn impl_polarity(&self, def: DefId) -> Option<hir::ImplPolarity> { unimplemented!() }
325+
fn custom_coerce_unsized_kind(&self, def: DefId)
326+
-> Option<ty::adjustment::CustomCoerceUnsized>
327+
{ unimplemented!() }
328+
fn associated_consts(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
329+
-> Vec<Rc<ty::AssociatedConst<'tcx>>> { unimplemented!() }
330+
331+
// trait/impl-item info
332+
fn trait_of_item(&self, tcx: &ty::ctxt<'tcx>, def_id: DefId)
333+
-> Option<DefId> { unimplemented!() }
334+
fn impl_or_trait_item(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
335+
-> ty::ImplOrTraitItem<'tcx> { unimplemented!() }
336+
337+
// flags
338+
fn is_const_fn(&self, did: DefId) -> bool { unimplemented!() }
339+
fn is_defaulted_trait(&self, did: DefId) -> bool { unimplemented!() }
340+
fn is_impl(&self, did: DefId) -> bool { unimplemented!() }
341+
fn is_default_impl(&self, impl_did: DefId) -> bool { unimplemented!() }
342+
fn is_extern_fn(&self, tcx: &ty::ctxt<'tcx>, did: DefId) -> bool { unimplemented!() }
343+
fn is_static(&self, did: DefId) -> bool { unimplemented!() }
344+
fn is_static_method(&self, did: DefId) -> bool { unimplemented!() }
345+
fn is_statically_included_foreign_item(&self, id: ast::NodeId) -> bool { false }
346+
fn is_typedef(&self, did: DefId) -> bool { unimplemented!() }
347+
348+
// crate metadata
349+
fn dylib_dependency_formats(&self, cnum: ast::CrateNum)
350+
-> Vec<(ast::CrateNum, LinkagePreference)>
351+
{ unimplemented!() }
352+
fn lang_items(&self, cnum: ast::CrateNum) -> Vec<(DefIndex, usize)>
353+
{ unimplemented!() }
354+
fn missing_lang_items(&self, cnum: ast::CrateNum) -> Vec<lang_items::LangItem>
355+
{ unimplemented!() }
356+
fn is_staged_api(&self, cnum: ast::CrateNum) -> bool { unimplemented!() }
357+
fn is_explicitly_linked(&self, cnum: ast::CrateNum) -> bool { unimplemented!() }
358+
fn is_allocator(&self, cnum: ast::CrateNum) -> bool { unimplemented!() }
359+
fn crate_attrs(&self, cnum: ast::CrateNum) -> Vec<ast::Attribute>
360+
{ unimplemented!() }
361+
fn crate_name(&self, cnum: ast::CrateNum) -> String { unimplemented!() }
362+
fn crate_hash(&self, cnum: ast::CrateNum) -> Svh { unimplemented!() }
363+
fn crate_struct_field_attrs(&self, cnum: ast::CrateNum)
364+
-> FnvHashMap<DefId, Vec<ast::Attribute>>
365+
{ unimplemented!() }
366+
fn plugin_registrar_fn(&self, cnum: ast::CrateNum) -> Option<DefId>
367+
{ unimplemented!() }
368+
fn native_libraries(&self, cnum: ast::CrateNum) -> Vec<(NativeLibraryKind, String)>
369+
{ unimplemented!() }
370+
fn reachable_ids(&self, cnum: ast::CrateNum) -> Vec<DefId> { unimplemented!() }
371+
372+
// resolve
373+
fn def_path(&self, def: DefId) -> hir_map::DefPath { unimplemented!() }
374+
fn tuple_struct_definition_if_ctor(&self, did: DefId) -> Option<DefId>
375+
{ unimplemented!() }
376+
fn struct_field_names(&self, def: DefId) -> Vec<ast::Name> { unimplemented!() }
377+
fn item_children(&self, did: DefId) -> Vec<ChildItem> { unimplemented!() }
378+
fn crate_top_level_items(&self, cnum: ast::CrateNum) -> Vec<ChildItem>
379+
{ unimplemented!() }
380+
381+
// misc. metadata
382+
fn maybe_get_item_ast(&'tcx self, tcx: &ty::ctxt<'tcx>, def: DefId)
383+
-> FoundAst<'tcx> { unimplemented!() }
384+
// This is basically a 1-based range of ints, which is a little
385+
// silly - I may fix that.
386+
fn crates(&self) -> Vec<ast::CrateNum> { vec![] }
387+
fn used_libraries(&self) -> Vec<(String, NativeLibraryKind)> { vec![] }
388+
fn used_link_args(&self) -> Vec<String> { vec![] }
389+
390+
// utility functions
391+
fn metadata_filename(&self) -> &str { unimplemented!() }
392+
fn metadata_section_name(&self, target: &Target) -> &str { unimplemented!() }
393+
fn encode_type(&self, tcx: &ty::ctxt<'tcx>, ty: Ty<'tcx>) -> Vec<u8>
394+
{ unimplemented!() }
395+
fn used_crates(&self, prefer: LinkagePreference) -> Vec<(ast::CrateNum, Option<PathBuf>)>
396+
{ vec![] }
397+
fn used_crate_source(&self, cnum: ast::CrateNum) -> CrateSource { unimplemented!() }
398+
fn extern_mod_stmt_cnum(&self, emod_id: ast::NodeId) -> Option<ast::CrateNum> { None }
399+
fn encode_metadata(&self,
400+
tcx: &ty::ctxt<'tcx>,
401+
reexports: &def::ExportMap,
402+
item_symbols: &RefCell<NodeMap<String>>,
403+
link_meta: &LinkMeta,
404+
reachable: &NodeSet,
405+
krate: &hir::Crate) -> Vec<u8> { vec![] }
406+
fn metadata_encoding_version(&self) -> &[u8] { unimplemented!() }
407+
}

src/librustc/session/config.rs

+11-6
Original file line numberDiff line numberDiff line change
@@ -1122,10 +1122,11 @@ impl fmt::Display for CrateType {
11221122

11231123
#[cfg(test)]
11241124
mod tests {
1125-
1125+
use middle::cstore::DummyCrateStore;
11261126
use session::config::{build_configuration, optgroups, build_session_options};
11271127
use session::build_session;
11281128

1129+
use std::rc::Rc;
11291130
use getopts::getopts;
11301131
use syntax::attr;
11311132
use syntax::attr::AttrMetaMethods;
@@ -1141,7 +1142,7 @@ mod tests {
11411142
};
11421143
let registry = diagnostics::registry::Registry::new(&[]);
11431144
let sessopts = build_session_options(matches);
1144-
let sess = build_session(sessopts, None, registry);
1145+
let sess = build_session(sessopts, None, registry, Rc::new(DummyCrateStore));
11451146
let cfg = build_configuration(&sess);
11461147
assert!((attr::contains_name(&cfg[..], "test")));
11471148
}
@@ -1160,7 +1161,8 @@ mod tests {
11601161
};
11611162
let registry = diagnostics::registry::Registry::new(&[]);
11621163
let sessopts = build_session_options(matches);
1163-
let sess = build_session(sessopts, None, registry);
1164+
let sess = build_session(sessopts, None, registry,
1165+
Rc::new(DummyCrateStore));
11641166
let cfg = build_configuration(&sess);
11651167
let mut test_items = cfg.iter().filter(|m| m.name() == "test");
11661168
assert!(test_items.next().is_some());
@@ -1175,7 +1177,8 @@ mod tests {
11751177
], &optgroups()).unwrap();
11761178
let registry = diagnostics::registry::Registry::new(&[]);
11771179
let sessopts = build_session_options(&matches);
1178-
let sess = build_session(sessopts, None, registry);
1180+
let sess = build_session(sessopts, None, registry,
1181+
Rc::new(DummyCrateStore));
11791182
assert!(!sess.can_print_warnings);
11801183
}
11811184

@@ -1186,7 +1189,8 @@ mod tests {
11861189
], &optgroups()).unwrap();
11871190
let registry = diagnostics::registry::Registry::new(&[]);
11881191
let sessopts = build_session_options(&matches);
1189-
let sess = build_session(sessopts, None, registry);
1192+
let sess = build_session(sessopts, None, registry,
1193+
Rc::new(DummyCrateStore));
11901194
assert!(sess.can_print_warnings);
11911195
}
11921196

@@ -1196,7 +1200,8 @@ mod tests {
11961200
], &optgroups()).unwrap();
11971201
let registry = diagnostics::registry::Registry::new(&[]);
11981202
let sessopts = build_session_options(&matches);
1199-
let sess = build_session(sessopts, None, registry);
1203+
let sess = build_session(sessopts, None, registry,
1204+
Rc::new(DummyCrateStore));
12001205
assert!(sess.can_print_warnings);
12011206
}
12021207
}

src/librustc_driver/test.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ use rustc_typeck::middle::infer::{self, TypeOrigin};
2929
use rustc_typeck::middle::infer::lub::Lub;
3030
use rustc_typeck::middle::infer::glb::Glb;
3131
use rustc_typeck::middle::infer::sub::Sub;
32+
use rustc_metadata::cstore::CStore;
3233
use rustc::front::map as hir_map;
3334
use rustc::session::{self, config};
35+
use std::rc::Rc;
3436
use syntax::{abi, ast};
3537
use syntax::codemap;
3638
use syntax::codemap::{Span, CodeMap, DUMMY_SP};
@@ -107,14 +109,14 @@ fn test_env<F>(source_string: &str,
107109
let diagnostic_handler = diagnostic::Handler::with_emitter(true, emitter);
108110
let span_diagnostic_handler = diagnostic::SpanHandler::new(diagnostic_handler, codemap);
109111

110-
let cstore = ::rustc_metadata::cstore::CStore::new(token::get_ident_interner());
112+
let cstore = Rc::new(CStore::new(token::get_ident_interner()));
111113
let sess = session::build_session_(options, None, span_diagnostic_handler,
112-
Box::new(cstore));
114+
cstore.clone());
113115
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
114116
let krate_config = Vec::new();
115117
let input = config::Input::Str(source_string.to_string());
116118
let krate = driver::phase_1_parse_input(&sess, krate_config, &input);
117-
let krate = driver::phase_2_configure_and_expand(&sess, krate, "test", None)
119+
let krate = driver::phase_2_configure_and_expand(&sess, &cstore, krate, "test", None)
118120
.expect("phase 2 aborted");
119121

120122
let krate = driver::assign_node_ids(&sess, krate);

0 commit comments

Comments
 (0)