/// A SyntaxContext represents a chain of macro expansions (represented by marks).
#[derive(Clone, Copy, PartialEq, Eq, Default, PartialOrd, Ord, Hash)]
-pub struct SyntaxContext(pub(super) u32);
+pub struct SyntaxContext(u32);
#[derive(Copy, Clone, Debug)]
-pub struct SyntaxContextData {
- pub outer_mark: Mark,
- pub prev_ctxt: SyntaxContext,
+struct SyntaxContextData {
+ outer_mark: Mark,
+ prev_ctxt: SyntaxContext,
// This context, but with all transparent and semi-transparent marks filtered away.
- pub opaque: SyntaxContext,
+ opaque: SyntaxContext,
// This context, but with all transparent marks filtered away.
- pub opaque_and_semitransparent: SyntaxContext,
+ opaque_and_semitransparent: SyntaxContext,
}
/// A mark is a unique id associated with a macro expansion.
}
#[derive(Debug)]
-pub struct HygieneData {
+crate struct HygieneData {
marks: Vec<MarkData>,
syntax_contexts: Vec<SyntaxContextData>,
markings: HashMap<(SyntaxContext, Mark), SyntaxContext>,
}
impl HygieneData {
- pub fn new() -> Self {
+ crate fn new() -> Self {
HygieneData {
marks: vec![MarkData {
parent: Mark::root(),
SyntaxContext(0)
}
+ crate fn as_u32(self) -> u32 {
+ self.0
+ }
+
+ crate fn from_u32(raw: u32) -> SyntaxContext {
+ SyntaxContext(raw)
+ }
+
// Allocate a new SyntaxContext with the given ExpnInfo. This is used when
// deserializing Spans from the incr. comp. cache.
// FIXME(mw): This method does not restore MarkData::parent or
html_root_url = "https://doc.rust-lang.org/nightly/")]
#![feature(const_fn)]
+#![feature(crate_visibility_modifier)]
#![feature(custom_attribute)]
#![feature(non_exhaustive)]
#![feature(optin_builtin_traits)]
-#![allow(unused_attributes)]
#![feature(specialization)]
#![feature(stdsimd)]
#[inline]
fn encode(sd: &SpanData) -> Span {
- let (base, len, ctxt) = (sd.lo.0, sd.hi.0 - sd.lo.0, sd.ctxt.0);
+ let (base, len, ctxt) = (sd.lo.0, sd.hi.0 - sd.lo.0, sd.ctxt.as_u32());
let val = if (base >> INLINE_SIZES[BASE_INDEX]) == 0 &&
(len >> INLINE_SIZES[LEN_INDEX]) == 0 &&
let index = extract(INTERNED_INDEX_OFFSET, INTERNED_INDEX_SIZE);
return with_span_interner(|interner| *interner.get(index));
};
- SpanData { lo: BytePos(base), hi: BytePos(base + len), ctxt: SyntaxContext(ctxt) }
+ SpanData { lo: BytePos(base), hi: BytePos(base + len), ctxt: SyntaxContext::from_u32(ctxt) }
}
#[derive(Default)]