diff --git a/src/librustc/middle/ty/mod.rs b/src/librustc/middle/ty/mod.rs index 975a5adad2bd21a3f23624829a84cf23e2f3c2ad..573634414932bb7ef708f6a40f8cb9d79959240a 100644 --- a/src/librustc/middle/ty/mod.rs +++ b/src/librustc/middle/ty/mod.rs @@ -102,12 +102,12 @@ /// The complete set of all analyses described in this module. This is /// produced by the driver and fed to trans and later passes. -pub struct CrateAnalysis { +pub struct CrateAnalysis<'a> { pub export_map: ExportMap, pub exported_items: middle::privacy::ExportedItems, pub public_items: middle::privacy::PublicItems, pub reachable: NodeSet, - pub name: String, + pub name: &'a str, pub glob_map: Option, } diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 619fcd3406cbca662e53bfd3ac41116251b2a7a8..c086737b6406a15bed0dbedee7011bf61a7a66da 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -143,7 +143,7 @@ pub fn compile_input(sess: Session, phase_3_run_analysis_passes(&sess, ast_map, &arenas, - id, + &id, control.make_glob_map, |tcx, analysis| { @@ -155,7 +155,8 @@ pub fn compile_input(sess: Session, tcx.map.krate(), &analysis, tcx, - &lcx); + &lcx, + &id); (control.after_analysis.callback)(state); tcx.sess.abort_if_errors(); @@ -279,7 +280,7 @@ pub struct CompileState<'a, 'ast: 'a, 'tcx: 'a> { pub expanded_crate: Option<&'a ast::Crate>, pub hir_crate: Option<&'a hir::Crate>, pub ast_map: Option<&'a hir_map::Map<'ast>>, - pub analysis: Option<&'a ty::CrateAnalysis>, + pub analysis: Option<&'a ty::CrateAnalysis<'a>>, pub tcx: Option<&'a ty::ctxt<'tcx>>, pub lcx: Option<&'a LoweringContext<'a>>, pub trans: Option<&'a trans::CrateTranslation>, @@ -358,7 +359,8 @@ fn state_after_analysis(input: &'a Input, hir_crate: &'a hir::Crate, analysis: &'a ty::CrateAnalysis, tcx: &'a ty::ctxt<'tcx>, - lcx: &'a LoweringContext<'a>) + lcx: &'a LoweringContext<'a>, + crate_name: &'a str) -> CompileState<'a, 'ast, 'tcx> { CompileState { analysis: Some(analysis), @@ -366,6 +368,7 @@ fn state_after_analysis(input: &'a Input, krate: Some(krate), hir_crate: Some(hir_crate), lcx: Some(lcx), + crate_name: Some(crate_name), .. CompileState::empty(input, session, out_dir) } } @@ -661,7 +664,7 @@ pub fn make_map<'ast>(sess: &Session, pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session, ast_map: front::map::Map<'tcx>, arenas: &'tcx ty::CtxtArenas<'tcx>, - name: String, + name: &str, make_glob_map: resolve::MakeGlobMap, f: F) -> R diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 276b747feb2042b23359d73191b7c0d254f12d18..ce40d9b53ff0a66ff864fcf94a7ddc9338b21f8f 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -399,6 +399,7 @@ fn build_controller(&mut self, sess: &Session) -> CompileController<'a> { state.lcx.unwrap(), state.krate.unwrap(), state.analysis.unwrap(), + state.crate_name.unwrap(), state.out_dir)); }; control.make_glob_map = resolve::MakeGlobMap::Yes; diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index 57186cb6ce837f0eab2411fc879b2234166d4a6b..8407939bebc58b93c23ca69a27b0cc5af18f8286 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -158,7 +158,7 @@ fn call_with_pp_support_hir<'tcx, A, B, F>(&self, sess: &'tcx Session, ast_map: &hir_map::Map<'tcx>, arenas: &'tcx ty::CtxtArenas<'tcx>, - id: String, + id: &str, payload: B, f: F) -> A where F: FnOnce(&HirPrinterSupport, B, &hir::Crate) -> A, @@ -713,7 +713,7 @@ pub fn pretty_print_input(sess: Session, (PpmHir(s), None) => { let out: &mut Write = &mut out; s.call_with_pp_support_hir( - &sess, &ast_map.unwrap(), &arenas, id, box out, |annotation, out, krate| { + &sess, &ast_map.unwrap(), &arenas, &id, box out, |annotation, out, krate| { debug!("pretty printing source code {:?}", s); let sess = annotation.sess(); pprust_hir::print_crate(sess.codemap(), @@ -732,7 +732,7 @@ pub fn pretty_print_input(sess: Session, s.call_with_pp_support_hir(&sess, &ast_map.unwrap(), &arenas, - id, + &id, (out,uii), |annotation, (out,uii), _| { debug!("pretty printing source code {:?}", s); @@ -780,7 +780,7 @@ pub fn pretty_print_input(sess: Session, driver::phase_3_run_analysis_passes(&sess, ast_map, &arenas, - id, + &id, resolve::MakeGlobMap::No, |tcx, _| { print_flowgraph(variants, tcx, code, mode, out) diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs index ad0d8ef73c90a804128524e103ce401926aba89b..f2f8c13880a7eb13deb4b9ea294a1e3902f9811f 100644 --- a/src/librustc_trans/back/link.rs +++ b/src/librustc_trans/back/link.rs @@ -184,9 +184,9 @@ pub fn find_crate_name(sess: Option<&Session>, } pub fn build_link_meta(sess: &Session, krate: &hir::Crate, - name: String) -> LinkMeta { + name: &str) -> LinkMeta { let r = LinkMeta { - crate_name: name, + crate_name: name.to_owned(), crate_hash: Svh::calculate(&sess.opts.cg.metadata, krate), }; info!("{:?}", r); diff --git a/src/librustc_trans/save/dump_csv.rs b/src/librustc_trans/save/dump_csv.rs index e5fadc9a19b92d174207198fdde328590ebfe77d..8a5b8f4eb56ebdf414c0ed849fcbae5e54ca36c7 100644 --- a/src/librustc_trans/save/dump_csv.rs +++ b/src/librustc_trans/save/dump_csv.rs @@ -66,7 +66,7 @@ pub struct DumpCsvVisitor<'l, 'tcx: 'l> { save_ctxt: SaveContext<'l, 'tcx>, sess: &'l Session, tcx: &'l ty::ctxt<'tcx>, - analysis: &'l ty::CrateAnalysis, + analysis: &'l ty::CrateAnalysis<'l>, span: SpanUtils<'l>, fmt: FmtStrs<'l, 'tcx>, @@ -77,7 +77,7 @@ pub struct DumpCsvVisitor<'l, 'tcx: 'l> { impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> { pub fn new(tcx: &'l ty::ctxt<'tcx>, lcx: &'l LoweringContext<'l>, - analysis: &'l ty::CrateAnalysis, + analysis: &'l ty::CrateAnalysis<'l>, output_file: Box) -> DumpCsvVisitor<'l, 'tcx> { let span_utils = SpanUtils::new(&tcx.sess); diff --git a/src/librustc_trans/save/mod.rs b/src/librustc_trans/save/mod.rs index 72f665f63bf9efbbb758feba70042c27c349b843..af9f3e4896d2c8b3cbacf9323bbb73d6a5259972 100644 --- a/src/librustc_trans/save/mod.rs +++ b/src/librustc_trans/save/mod.rs @@ -20,7 +20,6 @@ use rustc::front::map::NodeItem; use rustc_front::{hir, lowering}; -use syntax::attr; use syntax::ast::{self, NodeId}; use syntax::ast_util; use syntax::codemap::*; @@ -714,19 +713,13 @@ pub fn process_crate<'l, 'tcx>(tcx: &'l ty::ctxt<'tcx>, lcx: &'l lowering::LoweringContext<'l>, krate: &ast::Crate, analysis: &ty::CrateAnalysis, + cratename: &str, odir: Option<&Path>) { if generated_code(krate.span) { return; } assert!(analysis.glob_map.is_some()); - let cratename = match attr::find_crate_name(&krate.attrs) { - Some(name) => name.to_string(), - None => { - info!("Could not find crate name, using 'unknown_crate'"); - String::from("unknown_crate") - } - }; info!("Dumping crate {}", cratename); @@ -751,7 +744,7 @@ pub fn process_crate<'l, 'tcx>(tcx: &'l ty::ctxt<'tcx>, } // Create output file. - let mut out_name = cratename.clone(); + let mut out_name = cratename.to_owned(); out_name.push_str(".csv"); root_path.push(&out_name); let output_file = match File::create(&root_path) { @@ -765,7 +758,7 @@ pub fn process_crate<'l, 'tcx>(tcx: &'l ty::ctxt<'tcx>, let mut visitor = dump_csv::DumpCsvVisitor::new(tcx, lcx, analysis, output_file); - visitor.dump_crate_info(&cratename, krate); + visitor.dump_crate_info(cratename, krate); visit::walk_crate(&mut visitor, krate); } diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 776917d6724d82632fb002eeebee8ce1f487edec..4955951d36e84afe7711445c5374d161cd9a439f 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -143,7 +143,7 @@ pub fn run_core(search_paths: SearchPaths, cfgs: Vec, externs: Externs, driver::phase_3_run_analysis_passes(&sess, hir_map, &arenas, - name, + &name, resolve::MakeGlobMap::No, |tcx, analysis| { let ty::CrateAnalysis { exported_items, public_items, .. } = analysis; diff --git a/src/test/run-make/execution-engine/test.rs b/src/test/run-make/execution-engine/test.rs index bad0afe79d69189da14ba3730f36ad0dbff1ba21..f4031a3aaae1cc3621f02558d54cdbfed45feca7 100644 --- a/src/test/run-make/execution-engine/test.rs +++ b/src/test/run-make/execution-engine/test.rs @@ -229,7 +229,7 @@ fn compile_program(input: &str, sysroot: PathBuf) let ast_map = driver::make_map(&sess, &mut hir_forest); driver::phase_3_run_analysis_passes( - &sess, ast_map, &arenas, id, MakeGlobMap::No, |tcx, analysis| { + &sess, ast_map, &arenas, &id, MakeGlobMap::No, |tcx, analysis| { let trans = driver::phase_4_translate_to_llvm(tcx, analysis);