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