From: Nick Cameron Date: Sat, 25 Jul 2015 05:47:26 +0000 (+1200) Subject: save-analysis: return an Option from get_path_data X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=f91a20bbfb7594c22b26f4216d7eba72c33f6ff8;p=rust.git save-analysis: return an Option from get_path_data --- diff --git a/src/librustc_trans/save/dump_csv.rs b/src/librustc_trans/save/dump_csv.rs index f291413cedc..d1204c7a0a3 100644 --- a/src/librustc_trans/save/dump_csv.rs +++ b/src/librustc_trans/save/dump_csv.rs @@ -671,6 +671,15 @@ fn process_path(&mut self, } 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), diff --git a/src/librustc_trans/save/mod.rs b/src/librustc_trans/save/mod.rs index 077284a7c42..e812725e398 100644 --- a/src/librustc_trans/save/mod.rs +++ b/src/librustc_trans/save/mod.rs @@ -508,7 +508,7 @@ pub fn get_expr_data(&self, expr: &ast::Expr) -> Option { })) } ast::ExprPath(_, ref path) => { - Some(self.get_path_data(expr.id, path)) + self.get_path_data(expr.id, path) } _ => { // FIXME @@ -520,7 +520,7 @@ pub fn get_expr_data(&self, expr: &ast::Expr) -> Option { pub fn get_path_data(&self, id: NodeId, path: &ast::Path) - -> Data { + -> Option { 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 @@ pub fn get_path_data(&self, 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 @@ pub fn get_path_data(&self, } 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, } }