1
Fork 0

save-analysis: return an Option from get_path_data

This commit is contained in:
Nick Cameron 2015-07-25 17:47:26 +12:00
parent 52fd69c933
commit f91a20bbfb
2 changed files with 22 additions and 17 deletions

View file

@ -671,6 +671,15 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
}
let path_data = self.save_ctxt.get_path_data(id, path);
let path_data = match path_data {
Some(pd) => pd,
None => {
self.tcx.sess.span_bug(path.span,
&format!("Unexpected def kind while looking \
up path in `{}`",
self.span.snippet(path.span)))
}
};
match path_data {
Data::VariableRefData(ref vrd) => {
self.fmt.ref_str(ref_kind.unwrap_or(recorder::VarRef),

View file

@ -508,7 +508,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
}))
}
ast::ExprPath(_, ref path) => {
Some(self.get_path_data(expr.id, path))
self.get_path_data(expr.id, path)
}
_ => {
// FIXME
@ -520,7 +520,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
pub fn get_path_data(&self,
id: NodeId,
path: &ast::Path)
-> Data {
-> Option<Data> {
let def_map = self.tcx.def_map.borrow();
if !def_map.contains_key(&id) {
self.tcx.sess.span_bug(path.span,
@ -535,22 +535,22 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
def::DefConst(..) |
def::DefAssociatedConst(..) |
def::DefVariant(..) => {
Data::VariableRefData(VariableRefData {
Some(Data::VariableRefData(VariableRefData {
name: self.span_utils.snippet(sub_span.unwrap()),
span: sub_span.unwrap(),
scope: self.enclosing_scope(id),
ref_id: def.def_id(),
})
}))
}
def::DefStruct(def_id) |
def::DefTy(def_id, _) |
def::DefTrait(def_id) |
def::DefTyParam(_, _, def_id, _) => {
Data::TypeRefData(TypeRefData {
Some(Data::TypeRefData(TypeRefData {
span: sub_span.unwrap(),
ref_id: def_id,
scope: self.enclosing_scope(id),
})
}))
}
def::DefMethod(decl_id, provenence) => {
let sub_span = self.span_utils.sub_span_for_meth_name(path.span);
@ -581,32 +581,28 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
} else {
None
};
Data::MethodCallData(MethodCallData {
Some(Data::MethodCallData(MethodCallData {
span: sub_span.unwrap(),
scope: self.enclosing_scope(id),
ref_id: def_id,
decl_id: Some(decl_id),
})
}))
},
def::DefFn(def_id, _) => {
Data::FunctionCallData(FunctionCallData {
Some(Data::FunctionCallData(FunctionCallData {
ref_id: def_id,
span: sub_span.unwrap(),
scope: self.enclosing_scope(id),
})
}))
}
def::DefMod(def_id) => {
Data::ModRefData(ModRefData {
Some(Data::ModRefData(ModRefData {
ref_id: def_id,
span: sub_span.unwrap(),
scope: self.enclosing_scope(id),
})
}))
}
_ => self.tcx.sess.span_bug(path.span,
&format!("Unexpected def kind while looking \
up path in `{}`: `{:?}`",
self.span_utils.snippet(path.span),
def)),
_ => None,
}
}