#![feature(step_trait)]
use rustc_serialize::{Encodable, Decodable, Encoder, Decoder};
+use rustc_macros::HashStable_Generic;
+
+pub mod source_map;
pub mod edition;
use edition::Edition;
pub use symbol::{Symbol, sym};
mod analyze_source_file;
+pub mod fatal_error;
-use rustc_data_structures::stable_hasher::StableHasher;
+use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
use rustc_data_structures::sync::{Lrc, Lock};
use std::borrow::Cow;
scoped_tls::scoped_thread_local!(pub static GLOBALS: Globals);
/// Differentiates between real files and common virtual files.
-#[derive(Debug, Eq, PartialEq, Clone, Ord, PartialOrd, Hash, RustcDecodable, RustcEncodable)]
+#[derive(Debug, Eq, PartialEq, Clone, Ord, PartialOrd, Hash,
+ RustcDecodable, RustcEncodable, HashStable_Generic)]
pub enum FileName {
Real(PathBuf),
/// A macro. This includes the full name of the macro, so that there are no clashes.
}
}
+impl<CTX> HashStable<CTX> for Span
+ where CTX: StableHashingContextLike
+{
+ fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher) {
+ ctx.hash_stable_span(self, hasher)
+ }
+}
+
/// A collection of spans. Spans have two orthogonal attributes:
///
/// - They can be *primary spans*. In this case they are the locus of
Err(line) => line as isize - 1
}
}
+
+/// Requirements for a `StableHashingContext` to be used in this crate.
+/// This is a hack to allow using the `HashStable_Generic` derive macro
+/// instead of implementing everything in librustc.
+pub trait StableHashingContextLike {
+ fn hash_stable_span(&mut self, span: &Span, hasher: &mut StableHasher);
+}