about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_trans/save/dump_csv.rs7
-rw-r--r--src/librustc_trans/save/mod.rs57
2 files changed, 57 insertions, 7 deletions
diff --git a/src/librustc_trans/save/dump_csv.rs b/src/librustc_trans/save/dump_csv.rs
index bfd5a618769..d3493251e2f 100644
--- a/src/librustc_trans/save/dump_csv.rs
+++ b/src/librustc_trans/save/dump_csv.rs
@@ -55,7 +55,7 @@ use util::ppaux;
 
 
 pub struct DumpCsvVisitor<'l, 'tcx: 'l> {
-    save_ctxt: SaveContext<'l>,
+    save_ctxt: SaveContext<'l, 'tcx>,
     sess: &'l Session,
     analysis: &'l ty::CrateAnalysis<'tcx>,
 
@@ -74,7 +74,10 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
                output_file: Box<File>) -> DumpCsvVisitor<'l, 'tcx> {
         DumpCsvVisitor {
             sess: sess,
-            save_ctxt: SaveContext { sess: sess },
+            save_ctxt: SaveContext::new(sess, analysis, SpanUtils {
+                sess: sess,
+                err_count: Cell::new(0)
+            }),
             analysis: analysis,
             collected_paths: vec![],
             collecting: false,
diff --git a/src/librustc_trans/save/mod.rs b/src/librustc_trans/save/mod.rs
index 260879ed324..98672a546cb 100644
--- a/src/librustc_trans/save/mod.rs
+++ b/src/librustc_trans/save/mod.rs
@@ -15,16 +15,22 @@ use std::env;
 use std::fs::{self, File};
 use std::path::{Path, PathBuf};
 
-use syntax::{ast, attr, visit};
+use syntax::{attr, visit};
+use syntax::ast::{self, NodeId, DefId};
+use syntax::parse::token::keywords;
 use syntax::codemap::*;
 
+use self::span_utils::SpanUtils;
+
 mod span_utils;
 mod recorder;
 
 mod dump_csv;
 
-pub struct SaveContext<'l> {
+pub struct SaveContext<'l, 'tcx: 'l> {
     sess: &'l Session,
+    analysis: &'l ty::CrateAnalysis<'tcx>,
+    span_utils: SpanUtils<'l>,
 }
 
 pub struct CrateData {
@@ -32,10 +38,27 @@ pub struct CrateData {
     pub number: u32,
 }
 
-impl<'l> SaveContext<'l> {
-    pub fn new<'ll>(sess: &'ll Session) -> SaveContext<'ll> {
+pub enum Data {
+    FunctionData(FunctionData),
+}
+
+pub struct FunctionData {
+    pub id: NodeId,
+    pub qualname: String,
+    pub declaration: Option<DefId>,
+    pub span: Span,
+    pub scope: NodeId,
+}
+
+impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
+    pub fn new(sess: &'l Session,
+               analysis: &'l ty::CrateAnalysis<'tcx>,
+               span_utils: SpanUtils<'l>)
+               -> SaveContext<'l, 'tcx> {
         SaveContext {
-            sess: sess
+            sess: sess,
+            analysis: analysis,
+            span_utils: span_utils,
         }
     }
 
@@ -49,6 +72,30 @@ impl<'l> SaveContext<'l> {
 
         result
     }
+
+    pub fn get_item_data(&self, item: &ast::Item) -> Data {
+        match item.node {
+            ast::Item_::ItemFn(..) => {
+                let qualname = format!("::{}", self.analysis.ty_cx.map.path_to_string(item.id));
+                let sub_span = self.span_utils.sub_span_after_keyword(item.span, keywords::Fn);
+
+                Data::FunctionData(FunctionData {
+                    id: item.id,
+                    qualname: qualname,
+                    declaration: None,
+                    span: sub_span.unwrap(),
+                    scope: self.analysis.ty_cx.map.get_parent(item.id),
+                })
+            }
+            _ => {
+                unimplemented!();
+            }
+        }
+    }
+
+    pub fn get_data_for_id(&self, id: &NodeId) -> Data {
+        unimplemented!();        
+    }
 }
 
 #[allow(deprecated)]