From 6252af9ce10f522dbd5b58bdbbeff1b3e8464066 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Wed, 4 Nov 2015 10:16:06 +1300 Subject: [PATCH] save-analysis: emit the crate root --- src/librustc_trans/save/dump_csv.rs | 11 ++++++++++- src/librustc_trans/save/recorder.rs | 6 +++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/librustc_trans/save/dump_csv.rs b/src/librustc_trans/save/dump_csv.rs index f6f504e27ae..3ea631bd7fb 100644 --- a/src/librustc_trans/save/dump_csv.rs +++ b/src/librustc_trans/save/dump_csv.rs @@ -107,8 +107,17 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> { } pub fn dump_crate_info(&mut self, name: &str, krate: &ast::Crate) { + let source_file = self.tcx.sess.local_crate_source_file.as_ref(); + let crate_root = match source_file { + Some(source_file) => match source_file.file_name() { + Some(_) => source_file.parent().unwrap().display().to_string(), + None => source_file.display().to_string(), + }, + None => "".to_owned(), + }; + // The current crate. - self.fmt.crate_str(krate.span, name); + self.fmt.crate_str(krate.span, name, &crate_root); // Dump info about all the external crates referenced from this crate. for c in &self.save_ctxt.get_external_crates() { diff --git a/src/librustc_trans/save/recorder.rs b/src/librustc_trans/save/recorder.rs index a32d8b1b761..34eb1d28263 100644 --- a/src/librustc_trans/save/recorder.rs +++ b/src/librustc_trans/save/recorder.rs @@ -198,7 +198,7 @@ impl<'a, 'tcx: 'a> FmtStrs<'a, 'tcx> { vec!("name", "crate", "file_name"), false, false), - Crate => ("crate", vec!("name"), true, false), + Crate => ("crate", vec!("name", "crate_root"), true, false), FnCall => ("fn_call", vec!("refid", "refidcrate", "qualname", "scopeid"), true, @@ -658,8 +658,8 @@ impl<'a, 'tcx: 'a> FmtStrs<'a, 'tcx> { self.check_and_record(Typedef, span, sub_span, svec!(id, qualname, value)); } - pub fn crate_str(&mut self, span: Span, name: &str) { - self.record_with_span(Crate, span, span, svec!(name)); + pub fn crate_str(&mut self, span: Span, name: &str, crate_root: &str) { + self.record_with_span(Crate, span, span, svec!(name, crate_root)); } pub fn external_crate_str(&mut self, span: Span, name: &str, num: ast::CrateNum) {