@@ -46,21 +46,21 @@ export require_unique_names;
46
46
47
47
/* Constructors */
48
48
49
- fn mk_name_value_item_str ( name : ast:: ident , value : str ) -> @ast:: meta_item {
49
+ fn mk_name_value_item_str ( + name : ast:: ident , + value : str ) -> @ast:: meta_item {
50
50
let value_lit = dummy_spanned ( ast:: lit_str ( value) ) ;
51
51
ret mk_name_value_item ( name, value_lit) ;
52
52
}
53
53
54
- fn mk_name_value_item ( name : ast:: ident , value : ast:: lit ) -> @ast:: meta_item {
54
+ fn mk_name_value_item ( + name : ast:: ident , + value : ast:: lit ) -> @ast:: meta_item {
55
55
ret @dummy_spanned ( ast:: meta_name_value ( name, value) ) ;
56
56
}
57
57
58
- fn mk_list_item ( name : ast:: ident , items : [ @ast:: meta_item ] ) ->
58
+ fn mk_list_item ( + name : ast:: ident , + items : [ @ast:: meta_item ] ) ->
59
59
@ast:: meta_item {
60
60
ret @dummy_spanned ( ast:: meta_list ( name, items) ) ;
61
61
}
62
62
63
- fn mk_word_item ( name : ast:: ident ) -> @ast:: meta_item {
63
+ fn mk_word_item ( + name : ast:: ident ) -> @ast:: meta_item {
64
64
ret @dummy_spanned ( ast:: meta_word ( name) ) ;
65
65
}
66
66
@@ -89,9 +89,9 @@ fn get_attr_name(attr: ast::attribute) -> ast::ident {
89
89
90
90
fn get_meta_item_name ( meta : @ast:: meta_item ) -> ast:: ident {
91
91
alt meta. node {
92
- ast:: meta_word ( n) { n }
93
- ast:: meta_name_value ( n, _) { n }
94
- ast:: meta_list ( n, _) { n }
92
+ ast:: meta_word ( n) { /* FIXME bad */ copy n }
93
+ ast:: meta_name_value ( n, _) { /* FIXME bad */ copy n }
94
+ ast:: meta_list ( n, _) { /* FIXME bad */ copy n }
95
95
}
96
96
}
97
97
@@ -102,7 +102,14 @@ containing a string, otherwise none
102
102
fn get_meta_item_value_str ( meta : @ast:: meta_item ) -> option < str > {
103
103
alt meta. node {
104
104
ast:: meta_name_value ( _, v) {
105
- alt v. node { ast:: lit_str ( s) { option:: some ( s) } _ { option : : none } }
105
+ alt v. node {
106
+ ast:: lit_str ( s) {
107
+ option:: some ( /* FIXME bad */ copy s)
108
+ }
109
+ _ {
110
+ option : : none
111
+ }
112
+ }
106
113
}
107
114
_ { option : : none }
108
115
}
@@ -111,7 +118,7 @@ fn get_meta_item_value_str(meta: @ast::meta_item) -> option<str> {
111
118
#[ doc = "Gets a list of inner meta items from a list meta_item type" ]
112
119
fn get_meta_item_list ( meta : @ast:: meta_item ) -> option < [ @ast:: meta_item ] > {
113
120
alt meta. node {
114
- ast:: meta_list ( _, l) { option:: some ( l) }
121
+ ast:: meta_list ( _, l) { option:: some ( /* FIXME bad */ copy l) }
115
122
_ { option : : none }
116
123
}
117
124
}
@@ -126,7 +133,7 @@ fn get_name_value_str_pair(
126
133
alt attr:: get_meta_item_value_str ( item) {
127
134
some ( value) {
128
135
let name = attr:: get_meta_item_name ( item) ;
129
- some ( ( name, value) )
136
+ some ( ( name, /* FIXME bad */ copy value) )
130
137
}
131
138
none { none }
132
139
}
@@ -138,7 +145,7 @@ fn get_name_value_str_pair(
138
145
#[ doc = "
139
146
Search a list of attributes and return only those with a specific name
140
147
" ]
141
- fn find_attrs_by_name ( attrs : [ ast:: attribute ] , name : ast:: ident ) ->
148
+ fn find_attrs_by_name ( attrs : [ ast:: attribute ] , + name : ast:: ident ) ->
142
149
[ ast:: attribute ] {
143
150
let filter = (
144
151
fn @( a: ast:: attribute) -> option<ast:: attribute> {
@@ -153,7 +160,7 @@ fn find_attrs_by_name(attrs: [ast::attribute], name: ast::ident) ->
153
160
#[ doc = "
154
161
Searcha list of meta items and return only those with a specific name
155
162
" ]
156
- fn find_meta_items_by_name ( metas : [ @ast:: meta_item ] , name : ast:: ident ) ->
163
+ fn find_meta_items_by_name ( metas : [ @ast:: meta_item ] , + name : ast:: ident ) ->
157
164
[ @ast:: meta_item ] {
158
165
let filter = fn @( & & m: @ast:: meta_item) -> option<@ast:: meta_item> {
159
166
if get_meta_item_name ( m) == name {
@@ -201,16 +208,16 @@ fn eq(a: @ast::meta_item, b: @ast::meta_item) -> bool {
201
208
}
202
209
}
203
210
204
- fn contains_name ( metas : [ @ast:: meta_item ] , name : ast:: ident ) -> bool {
211
+ fn contains_name ( metas : [ @ast:: meta_item ] , + name : ast:: ident ) -> bool {
205
212
let matches = find_meta_items_by_name ( metas, name) ;
206
213
ret vec:: len ( matches) > 0 u;
207
214
}
208
215
209
- fn attrs_contains_name ( attrs : [ ast:: attribute ] , name : ast:: ident ) -> bool {
216
+ fn attrs_contains_name ( attrs : [ ast:: attribute ] , + name : ast:: ident ) -> bool {
210
217
vec:: is_not_empty ( find_attrs_by_name ( attrs, name) )
211
218
}
212
219
213
- fn first_attr_value_str_by_name ( attrs : [ ast:: attribute ] , name : ast:: ident )
220
+ fn first_attr_value_str_by_name ( attrs : [ ast:: attribute ] , + name : ast:: ident )
214
221
-> option < str > {
215
222
let mattrs = find_attrs_by_name ( attrs, name) ;
216
223
if vec:: len ( mattrs) > 0 u {
@@ -221,20 +228,20 @@ fn first_attr_value_str_by_name(attrs: [ast::attribute], name: ast::ident)
221
228
222
229
fn last_meta_item_by_name (
223
230
items : [ @ast:: meta_item ] ,
224
- name : str
231
+ + name : str
225
232
) -> option < @ast:: meta_item > {
226
233
let items = attr:: find_meta_items_by_name ( items, name) ;
227
234
vec:: last_opt ( items)
228
235
}
229
236
230
237
fn last_meta_item_value_str_by_name (
231
238
items : [ @ast:: meta_item ] ,
232
- name : str
239
+ + name : str
233
240
) -> option < str > {
234
241
alt last_meta_item_by_name ( items, name) {
235
242
some ( item) {
236
243
alt attr:: get_meta_item_value_str ( item) {
237
- some ( value) { some ( value) }
244
+ some ( value) { some ( /* FIXME bad */ copy value) }
238
245
none { none }
239
246
}
240
247
}
@@ -244,7 +251,7 @@ fn last_meta_item_value_str_by_name(
244
251
245
252
fn last_meta_item_list_by_name (
246
253
items : [ @ast:: meta_item ] ,
247
- name : str
254
+ + name : str
248
255
) -> option < [ @ast:: meta_item ] > {
249
256
alt last_meta_item_by_name ( items, name) {
250
257
some ( item) {
@@ -259,13 +266,13 @@ fn last_meta_item_list_by_name(
259
266
260
267
// FIXME: This needs to sort by meta_item variant in addition to the item name
261
268
// (See [Fixme-sorting])
262
- fn sort_meta_items ( items : [ @ast:: meta_item ] ) -> [ @ast:: meta_item ] {
269
+ fn sort_meta_items ( + items : [ @ast:: meta_item ] ) -> [ @ast:: meta_item ] {
263
270
fn lteq ( & & ma: @ast:: meta_item , & & mb: @ast:: meta_item ) -> bool {
264
271
fn key ( m : @ast:: meta_item ) -> ast:: ident {
265
272
alt m. node {
266
- ast:: meta_word ( name) { name }
267
- ast:: meta_name_value ( name, _) { name }
268
- ast:: meta_list ( name, _) { name }
273
+ ast:: meta_word ( name) { /* FIXME bad */ copy name }
274
+ ast:: meta_name_value ( name, _) { /* FIXME bad */ copy name }
275
+ ast:: meta_list ( name, _) { /* FIXME bad */ copy name }
269
276
}
270
277
}
271
278
ret key( ma) <= key ( mb) ;
@@ -280,13 +287,14 @@ fn sort_meta_items(items: [@ast::meta_item]) -> [@ast::meta_item] {
280
287
fn remove_meta_items_by_name ( items : [ @ast:: meta_item ] , name : str ) ->
281
288
[ @ast:: meta_item ] {
282
289
283
- let filter = fn @( & & item: @ast:: meta_item) -> option<@ast:: meta_item> {
290
+ ret vec:: filter_map ( items, {
291
+ |item|
284
292
if get_meta_item_name ( item) != name {
285
- option:: some ( item)
286
- } else { option :: none }
287
- } ;
288
-
289
- ret vec :: filter_map ( items , filter ) ;
293
+ option:: some ( /* FIXME bad */ copy item)
294
+ } else {
295
+ option :: none
296
+ }
297
+ } ) ;
290
298
}
291
299
292
300
fn find_linkage_attrs( attrs : [ ast:: attribute ] ) -> [ ast:: attribute ] {
@@ -307,7 +315,7 @@ linkage
307
315
fn find_linkage_metas( attrs: [ ast:: attribute] ) -> [ @ast:: meta_item] {
308
316
find_linkage_attrs( attrs) . flat_map { |attr|
309
317
alt check attr. node. value. node {
310
- ast : : meta_list( _, items) { items }
318
+ ast : : meta_list( _, items) { /* FIXME bad */ copy items }
311
319
}
312
320
}
313
321
}
@@ -362,6 +370,8 @@ fn require_unique_names(diagnostic: span_handler,
362
370
let map = map:: str_hash( ) ;
363
371
for metas. each { |meta|
364
372
let name = get_meta_item_name( meta) ;
373
+
374
+ // FIXME: How do I silence the warnings? --pcw
365
375
if map. contains_key( name) {
366
376
diagnostic. span_fatal( meta. span,
367
377
#fmt[ "duplicate meta item `%s`" , name] ) ;
0 commit comments