hygiene: Rename semi-transparent to semi-opaque
The former is just too long, see the examples in `hygiene.rs`
This commit is contained in:
parent
10a76d6347
commit
54bb849aff
11 changed files with 48 additions and 48 deletions
|
@ -66,10 +66,10 @@ pub struct SyntaxContextData {
|
|||
outer_expn: ExpnId,
|
||||
outer_transparency: Transparency,
|
||||
parent: SyntaxContext,
|
||||
/// This context, but with all transparent and semi-transparent expansions filtered away.
|
||||
/// This context, but with all transparent and semi-opaque expansions filtered away.
|
||||
opaque: SyntaxContext,
|
||||
/// This context, but with all transparent expansions filtered away.
|
||||
opaque_and_semitransparent: SyntaxContext,
|
||||
opaque_and_semiopaque: SyntaxContext,
|
||||
/// Name of the crate to which `$crate` with this context would resolve.
|
||||
dollar_crate_name: Symbol,
|
||||
}
|
||||
|
@ -78,14 +78,14 @@ impl SyntaxContextData {
|
|||
fn new(
|
||||
(parent, outer_expn, outer_transparency): SyntaxContextKey,
|
||||
opaque: SyntaxContext,
|
||||
opaque_and_semitransparent: SyntaxContext,
|
||||
opaque_and_semiopaque: SyntaxContext,
|
||||
) -> SyntaxContextData {
|
||||
SyntaxContextData {
|
||||
outer_expn,
|
||||
outer_transparency,
|
||||
parent,
|
||||
opaque,
|
||||
opaque_and_semitransparent,
|
||||
opaque_and_semiopaque,
|
||||
dollar_crate_name: kw::DollarCrate,
|
||||
}
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ impl SyntaxContextData {
|
|||
outer_transparency: Transparency::Opaque,
|
||||
parent: SyntaxContext::root(),
|
||||
opaque: SyntaxContext::root(),
|
||||
opaque_and_semitransparent: SyntaxContext::root(),
|
||||
opaque_and_semiopaque: SyntaxContext::root(),
|
||||
dollar_crate_name: kw::DollarCrate,
|
||||
}
|
||||
}
|
||||
|
@ -207,13 +207,13 @@ pub enum Transparency {
|
|||
/// Identifier produced by a transparent expansion is always resolved at call-site.
|
||||
/// Call-site spans in procedural macros, hygiene opt-out in `macro` should use this.
|
||||
Transparent,
|
||||
/// Identifier produced by a semi-transparent expansion may be resolved
|
||||
/// Identifier produced by a semi-opaque expansion may be resolved
|
||||
/// either at call-site or at definition-site.
|
||||
/// If it's a local variable, label or `$crate` then it's resolved at def-site.
|
||||
/// Otherwise it's resolved at call-site.
|
||||
/// `macro_rules` macros behave like this, built-in macros currently behave like this too,
|
||||
/// but that's an implementation detail.
|
||||
SemiTransparent,
|
||||
SemiOpaque,
|
||||
/// Identifier produced by an opaque expansion is always resolved at definition-site.
|
||||
/// Def-site spans in procedural macros, identifiers from `macro` by default use this.
|
||||
Opaque,
|
||||
|
@ -221,7 +221,7 @@ pub enum Transparency {
|
|||
|
||||
impl Transparency {
|
||||
pub fn fallback(macro_rules: bool) -> Self {
|
||||
if macro_rules { Transparency::SemiTransparent } else { Transparency::Opaque }
|
||||
if macro_rules { Transparency::SemiOpaque } else { Transparency::Opaque }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -469,7 +469,7 @@ impl HygieneData {
|
|||
|
||||
fn normalize_to_macro_rules(&self, ctxt: SyntaxContext) -> SyntaxContext {
|
||||
debug_assert!(!self.syntax_context_data[ctxt.0 as usize].is_decode_placeholder());
|
||||
self.syntax_context_data[ctxt.0 as usize].opaque_and_semitransparent
|
||||
self.syntax_context_data[ctxt.0 as usize].opaque_and_semiopaque
|
||||
}
|
||||
|
||||
fn outer_expn(&self, ctxt: SyntaxContext) -> ExpnId {
|
||||
|
@ -562,7 +562,7 @@ impl HygieneData {
|
|||
}
|
||||
|
||||
let call_site_ctxt = self.expn_data(expn_id).call_site.ctxt();
|
||||
let mut call_site_ctxt = if transparency == Transparency::SemiTransparent {
|
||||
let mut call_site_ctxt = if transparency == Transparency::SemiOpaque {
|
||||
self.normalize_to_macros_2_0(call_site_ctxt)
|
||||
} else {
|
||||
self.normalize_to_macro_rules(call_site_ctxt)
|
||||
|
@ -608,33 +608,32 @@ impl HygieneData {
|
|||
self.syntax_context_data.push(SyntaxContextData::decode_placeholder());
|
||||
self.syntax_context_map.insert(key, ctxt);
|
||||
|
||||
// Opaque and semi-transparent versions of the parent. Note that they may be equal to the
|
||||
// Opaque and semi-opaque versions of the parent. Note that they may be equal to the
|
||||
// parent itself. E.g. `parent_opaque` == `parent` if the expn chain contains only opaques,
|
||||
// and `parent_opaque_and_semitransparent` == `parent` if the expn contains only opaques
|
||||
// and semi-transparents.
|
||||
// and `parent_opaque_and_semiopaque` == `parent` if the expn contains only (semi-)opaques.
|
||||
let parent_opaque = self.syntax_context_data[parent.0 as usize].opaque;
|
||||
let parent_opaque_and_semitransparent =
|
||||
self.syntax_context_data[parent.0 as usize].opaque_and_semitransparent;
|
||||
let parent_opaque_and_semiopaque =
|
||||
self.syntax_context_data[parent.0 as usize].opaque_and_semiopaque;
|
||||
|
||||
// Evaluate opaque and semi-transparent versions of the new syntax context.
|
||||
let (opaque, opaque_and_semitransparent) = match transparency {
|
||||
Transparency::Transparent => (parent_opaque, parent_opaque_and_semitransparent),
|
||||
Transparency::SemiTransparent => (
|
||||
// Evaluate opaque and semi-opaque versions of the new syntax context.
|
||||
let (opaque, opaque_and_semiopaque) = match transparency {
|
||||
Transparency::Transparent => (parent_opaque, parent_opaque_and_semiopaque),
|
||||
Transparency::SemiOpaque => (
|
||||
parent_opaque,
|
||||
// Will be the same as `ctxt` if the expn chain contains only opaques and semi-transparents.
|
||||
self.alloc_ctxt(parent_opaque_and_semitransparent, expn_id, transparency),
|
||||
// Will be the same as `ctxt` if the expn chain contains only (semi-)opaques.
|
||||
self.alloc_ctxt(parent_opaque_and_semiopaque, expn_id, transparency),
|
||||
),
|
||||
Transparency::Opaque => (
|
||||
// Will be the same as `ctxt` if the expn chain contains only opaques.
|
||||
self.alloc_ctxt(parent_opaque, expn_id, transparency),
|
||||
// Will be the same as `ctxt` if the expn chain contains only opaques and semi-transparents.
|
||||
self.alloc_ctxt(parent_opaque_and_semitransparent, expn_id, transparency),
|
||||
// Will be the same as `ctxt` if the expn chain contains only (semi-)opaques.
|
||||
self.alloc_ctxt(parent_opaque_and_semiopaque, expn_id, transparency),
|
||||
),
|
||||
};
|
||||
|
||||
// Fill the full data, now that we have it.
|
||||
self.syntax_context_data[ctxt.as_u32() as usize] =
|
||||
SyntaxContextData::new(key, opaque, opaque_and_semitransparent);
|
||||
SyntaxContextData::new(key, opaque, opaque_and_semiopaque);
|
||||
ctxt
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1112,7 +1112,7 @@ impl Span {
|
|||
/// Equivalent of `Span::mixed_site` from the proc macro API,
|
||||
/// except that the location is taken from the `self` span.
|
||||
pub fn with_mixed_site_ctxt(self, expn_id: ExpnId) -> Span {
|
||||
self.with_ctxt_from_mark(expn_id, Transparency::SemiTransparent)
|
||||
self.with_ctxt_from_mark(expn_id, Transparency::SemiOpaque)
|
||||
}
|
||||
|
||||
/// Produces a span with the same location as `self` and context produced by a macro with the
|
||||
|
|
|
@ -1871,6 +1871,7 @@ symbols! {
|
|||
select_unpredictable,
|
||||
self_in_typedefs,
|
||||
self_struct_ctor,
|
||||
semiopaque,
|
||||
semitransparent,
|
||||
sha2,
|
||||
sha3,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue