about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-08-27 14:08:37 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-08-27 14:27:43 -0700
commit3a1582012eafb8b672e15b12b5424e72ea6096af (patch)
tree497372d0ae35fa35b4f0f3360a51078330760249
parent2bb056f4ab416b08a499b2229a3cca6404ce3c54 (diff)
downloadrust-3a1582012eafb8b672e15b12b5424e72ea6096af.tar.gz
rust-3a1582012eafb8b672e15b12b5424e72ea6096af.zip
libcore: Implement ord and eq language items
-rw-r--r--src/libcore/cmp.rs4
-rw-r--r--src/rustc/middle/lang_items.rs87
2 files changed, 54 insertions, 37 deletions
diff --git a/src/libcore/cmp.rs b/src/libcore/cmp.rs
index b7b32722a10..8ccfb6dd1f4 100644
--- a/src/libcore/cmp.rs
+++ b/src/libcore/cmp.rs
@@ -4,10 +4,14 @@
 
 /// Interfaces used for comparison.
 
+#[cfg(notest)]
+#[lang="ord"]
 trait Ord {
     pure fn lt(&&other: self) -> bool;
 }
 
+#[cfg(notest)]
+#[lang="eq"]
 trait Eq {
     pure fn eq(&&other: self) -> bool;
 }
diff --git a/src/rustc/middle/lang_items.rs b/src/rustc/middle/lang_items.rs
index b6b88b55485..488602019b3 100644
--- a/src/rustc/middle/lang_items.rs
+++ b/src/rustc/middle/lang_items.rs
@@ -23,42 +23,52 @@ import std::map::{hashmap, str_hash};
 import str_eq = str::eq;
 
 struct LanguageItems {
-    let mut const_trait: Option<def_id>;
-    let mut copy_trait: Option<def_id>;
-    let mut send_trait: Option<def_id>;
-    let mut owned_trait: Option<def_id>;
-
-    let mut add_trait: Option<def_id>;
-    let mut sub_trait: Option<def_id>;
-    let mut mul_trait: Option<def_id>;
-    let mut div_trait: Option<def_id>;
-    let mut modulo_trait: Option<def_id>;
-    let mut neg_trait: Option<def_id>;
-    let mut bitxor_trait: Option<def_id>;
-    let mut bitand_trait: Option<def_id>;
-    let mut bitor_trait: Option<def_id>;
-    let mut shl_trait: Option<def_id>;
-    let mut shr_trait: Option<def_id>;
-    let mut index_trait: Option<def_id>;
-
-    new() {
-        self.const_trait = None;
-        self.copy_trait = None;
-        self.send_trait = None;
-        self.owned_trait = None;
-
-        self.add_trait = None;
-        self.sub_trait = None;
-        self.mul_trait = None;
-        self.div_trait = None;
-        self.modulo_trait = None;
-        self.neg_trait = None;
-        self.bitxor_trait = None;
-        self.bitand_trait = None;
-        self.bitor_trait = None;
-        self.shl_trait = None;
-        self.shr_trait = None;
-        self.index_trait = None;
+    mut const_trait: Option<def_id>;
+    mut copy_trait: Option<def_id>;
+    mut send_trait: Option<def_id>;
+    mut owned_trait: Option<def_id>;
+
+    mut add_trait: Option<def_id>;
+    mut sub_trait: Option<def_id>;
+    mut mul_trait: Option<def_id>;
+    mut div_trait: Option<def_id>;
+    mut modulo_trait: Option<def_id>;
+    mut neg_trait: Option<def_id>;
+    mut bitxor_trait: Option<def_id>;
+    mut bitand_trait: Option<def_id>;
+    mut bitor_trait: Option<def_id>;
+    mut shl_trait: Option<def_id>;
+    mut shr_trait: Option<def_id>;
+    mut index_trait: Option<def_id>;
+
+    mut eq_trait: Option<def_id>;
+    mut ord_trait: Option<def_id>;
+}
+
+mod LanguageItems {
+    fn make() -> LanguageItems {
+        LanguageItems {
+            const_trait: None,
+            copy_trait: None,
+            send_trait: None,
+            owned_trait: None,
+
+            add_trait: None,
+            sub_trait: None,
+            mul_trait: None,
+            div_trait: None,
+            modulo_trait: None,
+            neg_trait: None,
+            bitxor_trait: None,
+            bitand_trait: None,
+            bitor_trait: None,
+            shl_trait: None,
+            shr_trait: None,
+            index_trait: None,
+
+            eq_trait: None,
+            ord_trait: None
+        }
     }
 }
 
@@ -93,6 +103,9 @@ struct LanguageItemCollector {
         self.item_refs.insert(~"shl", &mut self.items.shl_trait);
         self.item_refs.insert(~"shr", &mut self.items.shr_trait);
         self.item_refs.insert(~"index", &mut self.items.index_trait);
+
+        self.item_refs.insert(~"eq", &mut self.items.eq_trait);
+        self.item_refs.insert(~"ord", &mut self.items.ord_trait);
     }
 
     fn match_and_collect_meta_item(item_def_id: def_id,
@@ -202,7 +215,7 @@ struct LanguageItemCollector {
 }
 
 fn collect_language_items(crate: @crate, session: session) -> LanguageItems {
-    let items = LanguageItems();
+    let items = LanguageItems::make();
     let collector = LanguageItemCollector(crate, session, &items);
     collector.collect();
     copy items