@@ -153,135 +153,143 @@ impl LanguageItems {
153
153
154
154
// FIXME #4621: Method macros sure would be nice here.
155
155
156
- pub fn freeze_trait ( & self ) -> def_id {
157
- self . items [ FreezeTraitLangItem as uint ] . get ( )
156
+ pub fn require ( & self , it : LangItem ) -> Result < def_id , ~str > {
157
+ match self . items [ it as uint ] {
158
+ Some ( id) => Ok ( id) ,
159
+ None => Err ( fmt ! ( "requires `%s` lang_item" ,
160
+ LanguageItems :: item_name( it as uint) ) )
161
+ }
162
+ }
163
+
164
+ pub fn freeze_trait ( & self ) -> Option < def_id > {
165
+ self . items [ FreezeTraitLangItem as uint ]
158
166
}
159
- pub fn copy_trait ( & self ) -> def_id {
160
- self . items [ CopyTraitLangItem as uint ] . get ( )
167
+ pub fn copy_trait ( & self ) -> Option < def_id > {
168
+ self . items [ CopyTraitLangItem as uint ]
161
169
}
162
- pub fn send_trait ( & self ) -> def_id {
163
- self . items [ SendTraitLangItem as uint ] . get ( )
170
+ pub fn send_trait ( & self ) -> Option < def_id > {
171
+ self . items [ SendTraitLangItem as uint ]
164
172
}
165
- pub fn sized_trait ( & self ) -> def_id {
166
- self . items [ SizedTraitLangItem as uint ] . get ( )
173
+ pub fn sized_trait ( & self ) -> Option < def_id > {
174
+ self . items [ SizedTraitLangItem as uint ]
167
175
}
168
176
169
- pub fn drop_trait ( & self ) -> def_id {
170
- self . items [ DropTraitLangItem as uint ] . get ( )
177
+ pub fn drop_trait ( & self ) -> Option < def_id > {
178
+ self . items [ DropTraitLangItem as uint ]
171
179
}
172
180
173
- pub fn add_trait ( & self ) -> def_id {
174
- self . items [ AddTraitLangItem as uint ] . get ( )
181
+ pub fn add_trait ( & self ) -> Option < def_id > {
182
+ self . items [ AddTraitLangItem as uint ]
175
183
}
176
- pub fn sub_trait ( & self ) -> def_id {
177
- self . items [ SubTraitLangItem as uint ] . get ( )
184
+ pub fn sub_trait ( & self ) -> Option < def_id > {
185
+ self . items [ SubTraitLangItem as uint ]
178
186
}
179
- pub fn mul_trait ( & self ) -> def_id {
180
- self . items [ MulTraitLangItem as uint ] . get ( )
187
+ pub fn mul_trait ( & self ) -> Option < def_id > {
188
+ self . items [ MulTraitLangItem as uint ]
181
189
}
182
- pub fn div_trait ( & self ) -> def_id {
183
- self . items [ DivTraitLangItem as uint ] . get ( )
190
+ pub fn div_trait ( & self ) -> Option < def_id > {
191
+ self . items [ DivTraitLangItem as uint ]
184
192
}
185
- pub fn rem_trait ( & self ) -> def_id {
186
- self . items [ RemTraitLangItem as uint ] . get ( )
193
+ pub fn rem_trait ( & self ) -> Option < def_id > {
194
+ self . items [ RemTraitLangItem as uint ]
187
195
}
188
- pub fn neg_trait ( & self ) -> def_id {
189
- self . items [ NegTraitLangItem as uint ] . get ( )
196
+ pub fn neg_trait ( & self ) -> Option < def_id > {
197
+ self . items [ NegTraitLangItem as uint ]
190
198
}
191
- pub fn not_trait ( & self ) -> def_id {
192
- self . items [ NotTraitLangItem as uint ] . get ( )
199
+ pub fn not_trait ( & self ) -> Option < def_id > {
200
+ self . items [ NotTraitLangItem as uint ]
193
201
}
194
- pub fn bitxor_trait ( & self ) -> def_id {
195
- self . items [ BitXorTraitLangItem as uint ] . get ( )
202
+ pub fn bitxor_trait ( & self ) -> Option < def_id > {
203
+ self . items [ BitXorTraitLangItem as uint ]
196
204
}
197
- pub fn bitand_trait ( & self ) -> def_id {
198
- self . items [ BitAndTraitLangItem as uint ] . get ( )
205
+ pub fn bitand_trait ( & self ) -> Option < def_id > {
206
+ self . items [ BitAndTraitLangItem as uint ]
199
207
}
200
- pub fn bitor_trait ( & self ) -> def_id {
201
- self . items [ BitOrTraitLangItem as uint ] . get ( )
208
+ pub fn bitor_trait ( & self ) -> Option < def_id > {
209
+ self . items [ BitOrTraitLangItem as uint ]
202
210
}
203
- pub fn shl_trait ( & self ) -> def_id {
204
- self . items [ ShlTraitLangItem as uint ] . get ( )
211
+ pub fn shl_trait ( & self ) -> Option < def_id > {
212
+ self . items [ ShlTraitLangItem as uint ]
205
213
}
206
- pub fn shr_trait ( & self ) -> def_id {
207
- self . items [ ShrTraitLangItem as uint ] . get ( )
214
+ pub fn shr_trait ( & self ) -> Option < def_id > {
215
+ self . items [ ShrTraitLangItem as uint ]
208
216
}
209
- pub fn index_trait ( & self ) -> def_id {
210
- self . items [ IndexTraitLangItem as uint ] . get ( )
217
+ pub fn index_trait ( & self ) -> Option < def_id > {
218
+ self . items [ IndexTraitLangItem as uint ]
211
219
}
212
220
213
- pub fn eq_trait ( & self ) -> def_id {
214
- self . items [ EqTraitLangItem as uint ] . get ( )
221
+ pub fn eq_trait ( & self ) -> Option < def_id > {
222
+ self . items [ EqTraitLangItem as uint ]
215
223
}
216
- pub fn ord_trait ( & self ) -> def_id {
217
- self . items [ OrdTraitLangItem as uint ] . get ( )
224
+ pub fn ord_trait ( & self ) -> Option < def_id > {
225
+ self . items [ OrdTraitLangItem as uint ]
218
226
}
219
227
220
- pub fn str_eq_fn ( & self ) -> def_id {
221
- self . items [ StrEqFnLangItem as uint ] . get ( )
228
+ pub fn str_eq_fn ( & self ) -> Option < def_id > {
229
+ self . items [ StrEqFnLangItem as uint ]
222
230
}
223
- pub fn uniq_str_eq_fn ( & self ) -> def_id {
224
- self . items [ UniqStrEqFnLangItem as uint ] . get ( )
231
+ pub fn uniq_str_eq_fn ( & self ) -> Option < def_id > {
232
+ self . items [ UniqStrEqFnLangItem as uint ]
225
233
}
226
- pub fn annihilate_fn ( & self ) -> def_id {
227
- self . items [ AnnihilateFnLangItem as uint ] . get ( )
234
+ pub fn annihilate_fn ( & self ) -> Option < def_id > {
235
+ self . items [ AnnihilateFnLangItem as uint ]
228
236
}
229
- pub fn log_type_fn ( & self ) -> def_id {
230
- self . items [ LogTypeFnLangItem as uint ] . get ( )
237
+ pub fn log_type_fn ( & self ) -> Option < def_id > {
238
+ self . items [ LogTypeFnLangItem as uint ]
231
239
}
232
- pub fn fail_fn ( & self ) -> def_id {
233
- self . items [ FailFnLangItem as uint ] . get ( )
240
+ pub fn fail_fn ( & self ) -> Option < def_id > {
241
+ self . items [ FailFnLangItem as uint ]
234
242
}
235
- pub fn fail_bounds_check_fn ( & self ) -> def_id {
236
- self . items [ FailBoundsCheckFnLangItem as uint ] . get ( )
243
+ pub fn fail_bounds_check_fn ( & self ) -> Option < def_id > {
244
+ self . items [ FailBoundsCheckFnLangItem as uint ]
237
245
}
238
- pub fn exchange_malloc_fn ( & self ) -> def_id {
239
- self . items [ ExchangeMallocFnLangItem as uint ] . get ( )
246
+ pub fn exchange_malloc_fn ( & self ) -> Option < def_id > {
247
+ self . items [ ExchangeMallocFnLangItem as uint ]
240
248
}
241
- pub fn closure_exchange_malloc_fn ( & self ) -> def_id {
242
- self . items [ ClosureExchangeMallocFnLangItem as uint ] . get ( )
249
+ pub fn closure_exchange_malloc_fn ( & self ) -> Option < def_id > {
250
+ self . items [ ClosureExchangeMallocFnLangItem as uint ]
243
251
}
244
- pub fn exchange_free_fn ( & self ) -> def_id {
245
- self . items [ ExchangeFreeFnLangItem as uint ] . get ( )
252
+ pub fn exchange_free_fn ( & self ) -> Option < def_id > {
253
+ self . items [ ExchangeFreeFnLangItem as uint ]
246
254
}
247
- pub fn malloc_fn ( & self ) -> def_id {
248
- self . items [ MallocFnLangItem as uint ] . get ( )
255
+ pub fn malloc_fn ( & self ) -> Option < def_id > {
256
+ self . items [ MallocFnLangItem as uint ]
249
257
}
250
- pub fn free_fn ( & self ) -> def_id {
251
- self . items [ FreeFnLangItem as uint ] . get ( )
258
+ pub fn free_fn ( & self ) -> Option < def_id > {
259
+ self . items [ FreeFnLangItem as uint ]
252
260
}
253
- pub fn borrow_as_imm_fn ( & self ) -> def_id {
254
- self . items [ BorrowAsImmFnLangItem as uint ] . get ( )
261
+ pub fn borrow_as_imm_fn ( & self ) -> Option < def_id > {
262
+ self . items [ BorrowAsImmFnLangItem as uint ]
255
263
}
256
- pub fn borrow_as_mut_fn ( & self ) -> def_id {
257
- self . items [ BorrowAsMutFnLangItem as uint ] . get ( )
264
+ pub fn borrow_as_mut_fn ( & self ) -> Option < def_id > {
265
+ self . items [ BorrowAsMutFnLangItem as uint ]
258
266
}
259
- pub fn return_to_mut_fn ( & self ) -> def_id {
260
- self . items [ ReturnToMutFnLangItem as uint ] . get ( )
267
+ pub fn return_to_mut_fn ( & self ) -> Option < def_id > {
268
+ self . items [ ReturnToMutFnLangItem as uint ]
261
269
}
262
- pub fn check_not_borrowed_fn ( & self ) -> def_id {
263
- self . items [ CheckNotBorrowedFnLangItem as uint ] . get ( )
270
+ pub fn check_not_borrowed_fn ( & self ) -> Option < def_id > {
271
+ self . items [ CheckNotBorrowedFnLangItem as uint ]
264
272
}
265
- pub fn strdup_uniq_fn ( & self ) -> def_id {
266
- self . items [ StrDupUniqFnLangItem as uint ] . get ( )
273
+ pub fn strdup_uniq_fn ( & self ) -> Option < def_id > {
274
+ self . items [ StrDupUniqFnLangItem as uint ]
267
275
}
268
- pub fn record_borrow_fn ( & self ) -> def_id {
269
- self . items [ RecordBorrowFnLangItem as uint ] . get ( )
276
+ pub fn record_borrow_fn ( & self ) -> Option < def_id > {
277
+ self . items [ RecordBorrowFnLangItem as uint ]
270
278
}
271
- pub fn unrecord_borrow_fn ( & self ) -> def_id {
272
- self . items [ UnrecordBorrowFnLangItem as uint ] . get ( )
279
+ pub fn unrecord_borrow_fn ( & self ) -> Option < def_id > {
280
+ self . items [ UnrecordBorrowFnLangItem as uint ]
273
281
}
274
- pub fn start_fn ( & self ) -> def_id {
275
- self . items [ StartFnLangItem as uint ] . get ( )
282
+ pub fn start_fn ( & self ) -> Option < def_id > {
283
+ self . items [ StartFnLangItem as uint ]
276
284
}
277
- pub fn ty_desc ( & const self ) -> def_id {
278
- self . items [ TyDescStructLangItem as uint ] . get ( )
285
+ pub fn ty_desc ( & self ) -> Option < def_id > {
286
+ self . items [ TyDescStructLangItem as uint ]
279
287
}
280
- pub fn ty_visitor ( & const self ) -> def_id {
281
- self . items [ TyVisitorTraitLangItem as uint ] . get ( )
288
+ pub fn ty_visitor ( & self ) -> Option < def_id > {
289
+ self . items [ TyVisitorTraitLangItem as uint ]
282
290
}
283
- pub fn opaque ( & const self ) -> def_id {
284
- self . items [ OpaqueStructLangItem as uint ] . get ( )
291
+ pub fn opaque ( & self ) -> Option < def_id > {
292
+ self . items [ OpaqueStructLangItem as uint ]
285
293
}
286
294
}
287
295
@@ -439,23 +447,9 @@ impl<'self> LanguageItemCollector<'self> {
439
447
}
440
448
}
441
449
442
- pub fn check_completeness( & self ) {
443
- for self . item_refs. iter( ) . advance |( & key, & item_ref) | {
444
- match self . items. items[ item_ref] {
445
- None => {
446
- self . session. err( fmt ! ( "no item found for `%s`" , key) ) ;
447
- }
448
- Some ( _) => {
449
- // OK.
450
- }
451
- }
452
- }
453
- }
454
-
455
450
pub fn collect ( & mut self ) {
456
451
self . collect_local_language_items ( ) ;
457
452
self . collect_external_language_items ( ) ;
458
- self . check_completeness( ) ;
459
453
}
460
454
}
461
455
0 commit comments