diff options
| author | leonardo.yvens <leoyvens@gmail.com> | 2017-09-13 12:00:40 -0300 |
|---|---|---|
| committer | leonardo.yvens <leoyvens@gmail.com> | 2017-09-13 12:00:40 -0300 |
| commit | ab30b6a6edac27b618240f05c0bdbcb39a999f8a (patch) | |
| tree | b20d8ec4b5ffc9af3d6b577f9c782968e897e265 | |
| parent | 74107f987b35e401969ca3b596cddb1897646d06 (diff) | |
| download | rust-ab30b6a6edac27b618240f05c0bdbcb39a999f8a.tar.gz rust-ab30b6a6edac27b618240f05c0bdbcb39a999f8a.zip | |
Refactor how to get a lang item's name
Small refactorings
| -rw-r--r-- | src/librustc/middle/lang_items.rs | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 645da2475c6..9a70d7b9e3f 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -46,6 +46,14 @@ enum_from_u32! { } } +impl LangItem { + fn name(self) -> &'static str { + match self { + $( $variant => $name, )* + } + } +} + pub struct LanguageItems { pub items: Vec<Option<DefId>>, pub missing: Vec<LangItem>, @@ -65,22 +73,8 @@ impl LanguageItems { &*self.items } - pub fn item_name(index: usize) -> &'static str { - let item: Option<LangItem> = LangItem::from_u32(index as u32); - match item { - $( Some($variant) => $name, )* - None => "???" - } - } - pub fn require(&self, it: LangItem) -> Result<DefId, String> { - match self.items[it as usize] { - Some(id) => Ok(id), - None => { - Err(format!("requires `{}` lang_item", - LanguageItems::item_name(it as usize))) - } - } + self.items[it as usize].ok_or(format!("requires `{}` lang_item", it.name())) } pub fn fn_trait_kind(&self, id: DefId) -> Option<ty::ClosureKind> { @@ -158,7 +152,7 @@ impl<'a, 'tcx> LanguageItemCollector<'a, 'tcx> { // Check for duplicates. match self.items.items[item_index] { Some(original_def_id) if original_def_id != item_def_id => { - let name = LanguageItems::item_name(item_index); + let name = LangItem::from_u32(item_index as u32).unwrap().name(); let mut err = match self.tcx.hir.span_if_local(item_def_id) { Some(span) => struct_span_err!( self.tcx.sess, |
