#![feature(label_break_value)]
#![feature(nll)]
#![feature(try_trait)]
-#![cfg_attr(bootstrap, feature(slice_patterns))]
#![feature(unicode_internals)]
#![recursion_limit = "256"]
-use ast::AttrId;
-use rustc_data_structures::sync::Lock;
-use rustc_index::bit_set::GrowableBitSet;
-use rustc_span::edition::{Edition, DEFAULT_EDITION};
-
#[macro_export]
macro_rules! unwrap_or {
($opt:expr, $default:expr) => {
};
}
-pub struct Globals {
- used_attrs: Lock<GrowableBitSet<AttrId>>,
- known_attrs: Lock<GrowableBitSet<AttrId>>,
- rustc_span_globals: rustc_span::Globals,
-}
-
-impl Globals {
- fn new(edition: Edition) -> Globals {
- Globals {
- // We have no idea how many attributes there will be, so just
- // initiate the vectors with 0 bits. We'll grow them as necessary.
- used_attrs: Lock::new(GrowableBitSet::new_empty()),
- known_attrs: Lock::new(GrowableBitSet::new_empty()),
- rustc_span_globals: rustc_span::Globals::new(edition),
- }
- }
-}
-
-pub fn with_globals<R>(edition: Edition, f: impl FnOnce() -> R) -> R {
- let globals = Globals::new(edition);
- GLOBALS.set(&globals, || rustc_span::GLOBALS.set(&globals.rustc_span_globals, f))
-}
-
-pub fn with_default_globals<R>(f: impl FnOnce() -> R) -> R {
- with_globals(DEFAULT_EDITION, f)
-}
-
-scoped_tls::scoped_thread_local!(pub static GLOBALS: Globals);
-
pub mod util {
pub mod classify;
pub mod comments;
pub mod lev_distance;
pub mod literal;
pub mod map_in_place;
- pub mod node_count;
pub mod parser;
}
pub mod ast;
pub mod attr;
+pub use attr::{with_default_globals, with_globals, GLOBALS};
pub mod entry;
pub mod expand;
pub mod mut_visit;
+pub mod node_id;
pub mod ptr;
-pub use rustc_session::parse as sess;
pub mod token;
pub mod tokenstream;
pub mod visit;
-pub mod print {
- mod helpers;
- pub mod pp;
- pub mod pprust;
-}
-
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
/// Requirements for a `StableHashingContext` to be used in this crate.