about summary refs log tree commit diff
diff options
context:
space:
mode:
authorleonardo.yvens <leoyvens@gmail.com>2017-09-13 12:00:40 -0300
committerleonardo.yvens <leoyvens@gmail.com>2017-09-13 12:00:40 -0300
commitab30b6a6edac27b618240f05c0bdbcb39a999f8a (patch)
treeb20d8ec4b5ffc9af3d6b577f9c782968e897e265
parent74107f987b35e401969ca3b596cddb1897646d06 (diff)
downloadrust-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.rs26
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,