use old ctx if has same expand environment during decode span
This commit is contained in:
parent
9f877c9cd2
commit
07481b9e90
@ -1413,6 +1413,14 @@ pub fn decode_syntax_context<D: Decoder, F: FnOnce(&mut D, u32) -> SyntaxContext
|
||||
|
||||
// Overwrite the dummy data with our decoded SyntaxContextData
|
||||
HygieneData::with(|hygiene_data| {
|
||||
if let Some(old) = hygiene_data.syntax_context_data.get(raw_id as usize)
|
||||
&& old.outer_expn == ctxt_data.outer_expn
|
||||
&& old.outer_transparency == ctxt_data.outer_transparency
|
||||
&& old.parent == ctxt_data.parent
|
||||
{
|
||||
ctxt_data = old.clone();
|
||||
}
|
||||
|
||||
let dummy = std::mem::replace(
|
||||
&mut hygiene_data.syntax_context_data[ctxt.as_u32() as usize],
|
||||
ctxt_data,
|
||||
|
34
tests/incremental/decl_macro.rs
Normal file
34
tests/incremental/decl_macro.rs
Normal file
@ -0,0 +1,34 @@
|
||||
//@ revisions: rpass1 rpass2
|
||||
|
||||
// issue#112680
|
||||
|
||||
#![feature(decl_macro)]
|
||||
|
||||
pub trait T {
|
||||
type Key;
|
||||
fn index_from_key(key: Self::Key) -> usize;
|
||||
}
|
||||
|
||||
pub macro m($key_ty:ident, $val_ty:ident) {
|
||||
struct $key_ty {
|
||||
inner: usize,
|
||||
}
|
||||
|
||||
impl T for $val_ty {
|
||||
type Key = $key_ty;
|
||||
|
||||
fn index_from_key(key: Self::Key) -> usize {
|
||||
key.inner
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m!(TestId, Test);
|
||||
|
||||
#[cfg(rpass1)]
|
||||
struct Test(u32);
|
||||
|
||||
#[cfg(rpass2)]
|
||||
struct Test;
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user