diff options
Diffstat (limited to 'compiler/rustc_metadata/src')
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/decoder.rs | 14 | ||||
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs | 3 |
2 files changed, 12 insertions, 5 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs index eace1747577..064a5b71fc7 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder.rs @@ -721,21 +721,25 @@ impl<'a, 'tcx> CrateMetadataRef<'a> { &self.raw_proc_macros.unwrap()[pos] } - fn item_ident(&self, item_index: DefIndex, sess: &Session) -> Ident { + fn try_item_ident(&self, item_index: DefIndex, sess: &Session) -> Result<Ident, String> { let name = self .def_key(item_index) .disambiguated_data .data .get_opt_name() - .expect("no name in item_ident"); + .ok_or_else(|| format!("Missing opt name for {:?}", item_index))?; let span = self .root .tables .ident_span .get(self, item_index) - .map(|data| data.decode((self, sess))) - .unwrap_or_else(|| panic!("Missing ident span for {:?} ({:?})", name, item_index)); - Ident::new(name, span) + .ok_or_else(|| format!("Missing ident span for {:?} ({:?})", name, item_index))? + .decode((self, sess)); + Ok(Ident::new(name, span)) + } + + fn item_ident(&self, item_index: DefIndex, sess: &Session) -> Ident { + self.try_item_ident(item_index, sess).unwrap() } fn def_kind(&self, index: DefIndex) -> DefKind { diff --git a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs index 96db0157422..9b199234331 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs @@ -129,6 +129,9 @@ provide! { <'tcx> tcx, def_id, other, cdata, generator_kind => { cdata.generator_kind(def_id.index) } def_kind => { cdata.def_kind(def_id.index) } def_span => { cdata.get_span(def_id.index, &tcx.sess) } + def_ident_span => { + cdata.try_item_ident(def_id.index, &tcx.sess).ok().map(|ident| ident.span) + } lookup_stability => { cdata.get_stability(def_id.index).map(|s| tcx.intern_stability(s)) } |
