210
210
test( no_crate_inject, attr( deny( warnings) ) ) ,
211
211
test( attr( allow( dead_code, deprecated, unused_variables, unused_mut) ) ) ) ]
212
212
213
+ // Don't link to std. We are std.
214
+ #![ no_std]
215
+
216
+ #![ deny( missing_docs) ]
217
+
218
+ // Tell the compiler to link to either panic_abort or panic_unwind
213
219
#![ needs_panic_runtime]
214
220
221
+ // Always use alloc_system during stage0 since jemalloc might be unavailable or
222
+ // disabled (Issue #30592)
223
+ #![ cfg_attr( stage0, feature( alloc_system) ) ]
224
+
225
+ // Turn warnings into errors, but only after stage0, where it can be useful for
226
+ // code to emit warnings during language transitions
227
+ #![ cfg_attr( not( stage0) , deny( warnings) ) ]
228
+
229
+ // std may use features in a platform-specific way
230
+ #![ allow( unused_features) ]
231
+
232
+ // std is implemented with unstable features, many of which are internal
233
+ // compiler details that will never be stable
215
234
#![ feature( alloc) ]
216
235
#![ feature( allow_internal_unstable) ]
217
236
#![ feature( asm) ]
282
301
#![ feature( zero_one) ]
283
302
#![ cfg_attr( test, feature( update_panic_count) ) ]
284
303
285
- // Issue# 30592: Systematically use alloc_system during stage0 since jemalloc
286
- // might be unavailable or disabled
287
- #![ cfg_attr( stage0, feature( alloc_system) ) ]
288
-
289
- // Don't link to std. We are std.
290
- #![ no_std]
291
-
292
- #![ deny( missing_docs) ]
293
- #![ allow( unused_features) ] // std may use features in a platform-specific way
294
- #![ cfg_attr( not( stage0) , deny( warnings) ) ]
295
-
304
+ // Explicitly import the prelude. The compiler uses this same unstable attribute
305
+ // to import the prelude implicitly when building crates that depend on std.
296
306
#[ prelude_import]
297
307
#[ allow( unused) ]
298
308
use prelude:: v1:: * ;
299
309
310
+ // Access to Bencher, etc.
300
311
#[ cfg( test) ] extern crate test;
301
312
302
313
// We want to reexport a few macros from core but libcore has already been
@@ -324,11 +335,22 @@ extern crate alloc_system;
324
335
// compiler-rt intrinsics
325
336
extern crate compiler_builtins;
326
337
327
- // Make std testable by not duplicating lang items and other globals. See #2912
338
+ // During testing, this crate is not actually the "real" std library, but rather
339
+ // it links to the real std library, which was compiled from this same source
340
+ // code. So any lang items std defines are conditionally excluded (or else they
341
+ // wolud generate duplicate lang item errors), and any globals it defines are
342
+ // _not_ the globals used by "real" std. So this import, defined only during
343
+ // testing gives test-std access to real-std lang items and globals. See #2912
328
344
#[ cfg( test) ] extern crate std as realstd;
329
345
330
- // NB: These reexports are in the order they should be listed in rustdoc
346
+ // The standard macros that are not built-in to the compiler.
347
+ #[ macro_use]
348
+ mod macros;
349
+
350
+ // The Rust prelude
351
+ pub mod prelude;
331
352
353
+ // Public module declarations and reexports
332
354
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
333
355
pub use core:: any;
334
356
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -361,48 +383,6 @@ pub use core::raw;
361
383
pub use core:: result;
362
384
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
363
385
pub use core:: option;
364
-
365
- pub mod error;
366
-
367
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
368
- pub use alloc:: boxed;
369
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
370
- pub use alloc:: rc;
371
-
372
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
373
- pub use core_collections:: borrow;
374
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
375
- pub use core_collections:: fmt;
376
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
377
- pub use core_collections:: slice;
378
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
379
- pub use core_collections:: str;
380
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
381
- pub use core_collections:: string;
382
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
383
- pub use core_collections:: vec;
384
-
385
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
386
- pub use rustc_unicode:: char;
387
-
388
- /* Exported macros */
389
-
390
- #[ macro_use]
391
- mod macros;
392
-
393
- mod rtdeps;
394
-
395
- /* The Prelude. */
396
-
397
- pub mod prelude;
398
-
399
-
400
- /* Primitive types */
401
-
402
- // NB: slice and str are primitive types too, but their module docs + primitive
403
- // doc pages are inlined from the public re-exports of core_collections::{slice,
404
- // str} above.
405
-
406
386
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
407
387
pub use core:: isize;
408
388
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -413,7 +393,6 @@ pub use core::i16;
413
393
pub use core:: i32;
414
394
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
415
395
pub use core:: i64;
416
-
417
396
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
418
397
pub use core:: usize;
419
398
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -424,42 +403,62 @@ pub use core::u16;
424
403
pub use core:: u32;
425
404
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
426
405
pub use core:: u64;
406
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
407
+ pub use alloc:: boxed;
408
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
409
+ pub use alloc:: rc;
410
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
411
+ pub use core_collections:: borrow;
412
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
413
+ pub use core_collections:: fmt;
414
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
415
+ pub use core_collections:: slice;
416
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
417
+ pub use core_collections:: str;
418
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
419
+ pub use core_collections:: string;
420
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
421
+ pub use core_collections:: vec;
422
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
423
+ pub use rustc_unicode:: char;
427
424
428
425
#[ path = "num/f32.rs" ] pub mod f32;
429
426
#[ path = "num/f64.rs" ] pub mod f64;
430
427
431
- pub mod ascii;
432
-
433
- /* Common traits */
434
-
435
- pub mod num;
436
-
437
- /* Runtime and platform support */
438
-
439
428
#[ macro_use]
440
429
pub mod thread;
441
-
430
+ pub mod ascii ;
442
431
pub mod collections;
443
432
pub mod env;
433
+ pub mod error;
444
434
pub mod ffi;
445
435
pub mod fs;
446
436
pub mod io;
447
437
pub mod net;
438
+ pub mod num;
448
439
pub mod os;
449
440
pub mod panic;
450
441
pub mod path;
451
442
pub mod process;
452
443
pub mod sync;
453
444
pub mod time;
454
- mod memchr;
455
445
446
+ // Platform-abstraction modules
456
447
#[ macro_use]
457
448
mod sys_common;
458
449
mod sys;
459
450
460
- pub mod rt ;
451
+ // Private support modules
461
452
mod panicking;
462
453
mod rand;
454
+ mod memchr;
455
+
456
+ // This module just defines per-platform native library dependencies
457
+ mod rtdeps;
458
+
459
+ // The runtime entry point and a few unstable public functions used by the
460
+ // compiler
461
+ pub mod rt;
463
462
464
463
// Some external utilities of the standard library rely on randomness (aka
465
464
// rustc_back::TempDir and tests) and need a way to get at the OS rng we've got
0 commit comments