about summary refs log tree commit diff
path: root/src/comp/back
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-06-28 15:46:09 -0700
committerBrian Anderson <banderson@mozilla.com>2011-06-28 15:46:09 -0700
commit8ac60e99ea194fefc286ced55d7eda01cc2fc332 (patch)
treefa482d5f20ab1b146d131d3964ee4ce44976c4a3 /src/comp/back
parentaecc5e6e0f1a2927210f68973b2a3c6353c39f01 (diff)
downloadrust-8ac60e99ea194fefc286ced55d7eda01cc2fc332.tar.gz
rust-8ac60e99ea194fefc286ced55d7eda01cc2fc332.zip
Extract meta_item sorting from back::link to middle::attr
Diffstat (limited to 'src/comp/back')
-rw-r--r--src/comp/back/link.rs29
1 files changed, 6 insertions, 23 deletions
diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs
index 1c1bdee8747..7876b1cfc59 100644
--- a/src/comp/back/link.rs
+++ b/src/comp/back/link.rs
@@ -306,32 +306,15 @@ fn crate_link_metas(&ast::crate c) -> link_metas {
 
 // This calculates CMH as defined above
 fn crate_meta_extras_hash(sha1 sha, &ast::crate crate) -> str {
-    // FIXME (#487) Move this sorting stuff into middle::attr
-    fn lteq(&@ast::meta_item ma, &@ast::meta_item mb) -> bool {
-        fn key(&@ast::meta_item m) -> ast::ident {
-            alt (m.node) {
-                case (ast::meta_word(?name)) {
-                    name
-                }
-                case (ast::meta_name_value(?name, _)) {
-                    name
-                }
-                case (ast::meta_list(?name, _)) {
-                    name
-                }
-            }
-        }
-        ret key(ma) <= key(mb);
-    }
     fn len_and_str(&str s) -> str { ret #fmt("%u_%s", str::byte_len(s), s); }
+    
+    auto cmh_items = {
+        auto cmh_items = crate_link_metas(crate).cmh_items;
+        attr::sort_meta_items(cmh_items)
+    };
 
-    let vec[mutable @ast::meta_item] v = [mutable ];
-    for (@ast::meta_item mi in crate_link_metas(crate).cmh_items) {
-        v += [mutable mi];
-    }
-    sort::quick_sort(lteq, v);
     sha.reset();
-    for (@ast::meta_item m_ in v) {
+    for (@ast::meta_item m_ in cmh_items) {
         auto m = m_;
         alt (m.node) {
             case (ast::meta_name_value(?key, ?value)) {