File tree Expand file tree Collapse file tree 3 files changed +41
-24
lines changed Expand file tree Collapse file tree 3 files changed +41
-24
lines changed Original file line number Diff line number Diff line change 1
1
---
2
- refs/heads/master: aecc5e6e0f1a2927210f68973b2a3c6353c39f01
2
+ refs/heads/master: 8ac60e99ea194fefc286ced55d7eda01cc2fc332
Original file line number Diff line number Diff line change @@ -306,32 +306,15 @@ fn crate_link_metas(&ast::crate c) -> link_metas {
306
306
307
307
// This calculates CMH as defined above
308
308
fn crate_meta_extras_hash( sha1 sha, & ast:: crate crate) -> str {
309
- // FIXME (#487) Move this sorting stuff into middle::attr
310
- fn lteq ( & @ast:: meta_item ma, & @ast:: meta_item mb) -> bool {
311
- fn key ( & @ast:: meta_item m) -> ast:: ident {
312
- alt ( m. node ) {
313
- case ( ast:: meta_word ( ?name) ) {
314
- name
315
- }
316
- case ( ast:: meta_name_value ( ?name, _) ) {
317
- name
318
- }
319
- case ( ast:: meta_list ( ?name, _) ) {
320
- name
321
- }
322
- }
323
- }
324
- ret key( ma) <= key ( mb) ;
325
- }
326
309
fn len_and_str ( & str s) -> str { ret #fmt( "%u_%s" , str:: byte_len ( s) , s) ; }
310
+
311
+ auto cmh_items = {
312
+ auto cmh_items = crate_link_metas ( crate ) . cmh_items ;
313
+ attr:: sort_meta_items ( cmh_items)
314
+ } ;
327
315
328
- let vec[ mutable @ast:: meta_item] v = [ mutable ] ;
329
- for ( @ast:: meta_item mi in crate_link_metas( crate ) . cmh_items) {
330
- v += [ mutable mi] ;
331
- }
332
- sort:: quick_sort( lteq, v) ;
333
316
sha. reset ( ) ;
334
- for ( @ast:: meta_item m_ in v ) {
317
+ for ( @ast:: meta_item m_ in cmh_items ) {
335
318
auto m = m_;
336
319
alt ( m. node) {
337
320
case ( ast:: meta_name_value( ?key, ?value) ) {
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ export attr_metas;
8
8
export find_linkage_metas;
9
9
export find_attrs_by_name;
10
10
export contains;
11
+ export sort_meta_items;
11
12
12
13
// From a list of crate attributes get only the meta_items that impact crate
13
14
// linkage
@@ -103,6 +104,39 @@ fn contains(&vec[@ast::meta_item] haystack, @ast::meta_item needle) -> bool {
103
104
ret false ;
104
105
}
105
106
107
+ fn sort_meta_items ( & vec[ @ast:: meta_item] items ) -> vec[ @ast:: meta_item ] {
108
+ fn lteq ( & @ast:: meta_item ma, & @ast:: meta_item mb) -> bool {
109
+ fn key ( & @ast:: meta_item m) -> ast:: ident {
110
+ alt ( m. node ) {
111
+ case ( ast:: meta_word ( ?name) ) {
112
+ name
113
+ }
114
+ case ( ast:: meta_name_value ( ?name, _) ) {
115
+ name
116
+ }
117
+ case ( ast:: meta_list ( ?name, _) ) {
118
+ name
119
+ }
120
+ }
121
+ }
122
+ ret key( ma) <= key ( mb) ;
123
+ }
124
+
125
+ // This is sort of stupid here, converting to a vec of mutables and back
126
+ let vec[ mutable @ast:: meta_item] v = [ mutable ] ;
127
+ for ( @ast:: meta_item mi in items) {
128
+ v += [ mutable mi] ;
129
+ }
130
+
131
+ std:: sort:: quick_sort ( lteq, v) ;
132
+
133
+ let vec[ @ast:: meta_item] v2 = [ ] ;
134
+ for ( @ast:: meta_item mi in v) {
135
+ v2 += [ mi]
136
+ }
137
+ ret v2;
138
+ }
139
+
106
140
//
107
141
// Local Variables:
108
142
// mode: rust
You can’t perform that action at this time.
0 commit comments