Auto merge of #86676 - cjgillot:localexpn, r=petrochenkov
Make expansions stable for incr. comp. This PR aims to make expansions stable for incr. comp. by using the same architecture as definitions: - the interned identifier `ExpnId` contains a `CrateNum` and a crate-local id; - bidirectional maps `ExpnHash <-> ExpnId` are setup; - incr. comp. on-disk cache saves and reconstructs expansions using their `ExpnHash`. I tried to use as many `LocalExpnId` as I could in the resolver code, but I may have missed a few opportunities. All this will allow to use an `ExpnId` as a query key, and to force this query without recomputing caller queries. For instance, this will be used to implement #85999. r? `@petrochenkov`
This commit is contained in:
commit
68511b574f
27 changed files with 618 additions and 439 deletions
|
|
@ -19,10 +19,10 @@ fn y /* 0#0 */() { }
|
|||
|
||||
/*
|
||||
Expansions:
|
||||
0: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
|
||||
1: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "foo")
|
||||
crate0::{{expn0}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
|
||||
crate0::{{expn1}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "foo")
|
||||
|
||||
SyntaxContexts:
|
||||
#0: parent: #0, outer_mark: (ExpnId(0), Opaque)
|
||||
#1: parent: #0, outer_mark: (ExpnId(1), SemiTransparent)
|
||||
#0: parent: #0, outer_mark: (crate0::{{expn0}}, Opaque)
|
||||
#1: parent: #0, outer_mark: (crate0::{{expn1}}, SemiTransparent)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -43,23 +43,23 @@ fn main /* 0#0 */() { ; }
|
|||
|
||||
/*
|
||||
Expansions:
|
||||
0: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
|
||||
1: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
2: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "produce_it")
|
||||
3: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
4: parent: ExpnId(2), call_site_ctxt: #4, def_site_ctxt: #0, kind: Macro(Bang, "meta_macro::print_def_site")
|
||||
5: parent: ExpnId(4), call_site_ctxt: #5, def_site_ctxt: #0, kind: Macro(Bang, "$crate::dummy")
|
||||
crate0::{{expn0}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
|
||||
crate0::{{expn1}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
crate0::{{expn2}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "produce_it")
|
||||
crate0::{{expn3}}: parent: crate0::{{expn2}}, call_site_ctxt: #4, def_site_ctxt: #0, kind: Macro(Bang, "meta_macro::print_def_site")
|
||||
crate0::{{expn4}}: parent: crate0::{{expn3}}, call_site_ctxt: #5, def_site_ctxt: #0, kind: Macro(Bang, "$crate::dummy")
|
||||
crate2::{{expn1}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
|
||||
SyntaxContexts:
|
||||
#0: parent: #0, outer_mark: (ExpnId(0), Opaque)
|
||||
#1: parent: #0, outer_mark: (ExpnId(1), Opaque)
|
||||
#2: parent: #0, outer_mark: (ExpnId(1), Transparent)
|
||||
#3: parent: #0, outer_mark: (ExpnId(3), Opaque)
|
||||
#4: parent: #0, outer_mark: (ExpnId(2), SemiTransparent)
|
||||
#5: parent: #0, outer_mark: (ExpnId(4), Opaque)
|
||||
#6: parent: #4, outer_mark: (ExpnId(4), Transparent)
|
||||
#7: parent: #0, outer_mark: (ExpnId(4), SemiTransparent)
|
||||
#8: parent: #0, outer_mark: (ExpnId(5), Opaque)
|
||||
#9: parent: #5, outer_mark: (ExpnId(5), Transparent)
|
||||
#10: parent: #5, outer_mark: (ExpnId(5), SemiTransparent)
|
||||
#0: parent: #0, outer_mark: (crate0::{{expn0}}, Opaque)
|
||||
#1: parent: #0, outer_mark: (crate0::{{expn1}}, Opaque)
|
||||
#2: parent: #0, outer_mark: (crate0::{{expn1}}, Transparent)
|
||||
#3: parent: #0, outer_mark: (crate2::{{expn1}}, Opaque)
|
||||
#4: parent: #0, outer_mark: (crate0::{{expn2}}, SemiTransparent)
|
||||
#5: parent: #0, outer_mark: (crate0::{{expn3}}, Opaque)
|
||||
#6: parent: #4, outer_mark: (crate0::{{expn3}}, Transparent)
|
||||
#7: parent: #0, outer_mark: (crate0::{{expn3}}, SemiTransparent)
|
||||
#8: parent: #0, outer_mark: (crate0::{{expn4}}, Opaque)
|
||||
#9: parent: #5, outer_mark: (crate0::{{expn4}}, Transparent)
|
||||
#10: parent: #5, outer_mark: (crate0::{{expn4}}, SemiTransparent)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -67,22 +67,22 @@ fn main /* 0#0 */() { }
|
|||
|
||||
/*
|
||||
Expansions:
|
||||
0: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
|
||||
1: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
2: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "outer")
|
||||
3: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
4: parent: ExpnId(2), call_site_ctxt: #4, def_site_ctxt: #4, kind: Macro(Bang, "inner")
|
||||
5: parent: ExpnId(4), call_site_ctxt: #6, def_site_ctxt: #0, kind: Macro(Bang, "print_bang")
|
||||
crate0::{{expn0}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
|
||||
crate0::{{expn1}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
crate0::{{expn2}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "outer")
|
||||
crate0::{{expn3}}: parent: crate0::{{expn2}}, call_site_ctxt: #4, def_site_ctxt: #4, kind: Macro(Bang, "inner")
|
||||
crate0::{{expn4}}: parent: crate0::{{expn3}}, call_site_ctxt: #6, def_site_ctxt: #0, kind: Macro(Bang, "print_bang")
|
||||
crate2::{{expn1}}: parent: crate0::{{expn0}}, call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
|
||||
|
||||
SyntaxContexts:
|
||||
#0: parent: #0, outer_mark: (ExpnId(0), Opaque)
|
||||
#1: parent: #0, outer_mark: (ExpnId(1), Opaque)
|
||||
#2: parent: #0, outer_mark: (ExpnId(1), Transparent)
|
||||
#3: parent: #0, outer_mark: (ExpnId(3), Opaque)
|
||||
#4: parent: #0, outer_mark: (ExpnId(2), SemiTransparent)
|
||||
#5: parent: #0, outer_mark: (ExpnId(4), Opaque)
|
||||
#6: parent: #4, outer_mark: (ExpnId(4), Opaque)
|
||||
#7: parent: #0, outer_mark: (ExpnId(5), Opaque)
|
||||
#8: parent: #6, outer_mark: (ExpnId(5), Transparent)
|
||||
#9: parent: #5, outer_mark: (ExpnId(5), SemiTransparent)
|
||||
#0: parent: #0, outer_mark: (crate0::{{expn0}}, Opaque)
|
||||
#1: parent: #0, outer_mark: (crate0::{{expn1}}, Opaque)
|
||||
#2: parent: #0, outer_mark: (crate0::{{expn1}}, Transparent)
|
||||
#3: parent: #0, outer_mark: (crate2::{{expn1}}, Opaque)
|
||||
#4: parent: #0, outer_mark: (crate0::{{expn2}}, SemiTransparent)
|
||||
#5: parent: #0, outer_mark: (crate0::{{expn3}}, Opaque)
|
||||
#6: parent: #4, outer_mark: (crate0::{{expn3}}, Opaque)
|
||||
#7: parent: #0, outer_mark: (crate0::{{expn4}}, Opaque)
|
||||
#8: parent: #6, outer_mark: (crate0::{{expn4}}, Transparent)
|
||||
#9: parent: #5, outer_mark: (crate0::{{expn4}}, SemiTransparent)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use rustc_ast::ast::{
|
|||
};
|
||||
use rustc_ast::ptr;
|
||||
use rustc_ast_pretty::pprust;
|
||||
use rustc_span::{sym, symbol, BytePos, ExpnId, Span, Symbol, SyntaxContext};
|
||||
use rustc_span::{sym, symbol, BytePos, LocalExpnId, Span, Symbol, SyntaxContext};
|
||||
use unicode_width::UnicodeWidthStr;
|
||||
|
||||
use crate::comment::{filter_normal_code, CharClasses, FullCodeCharKind, LineClasses};
|
||||
|
|
@ -675,7 +675,7 @@ pub(crate) trait NodeIdExt {
|
|||
|
||||
impl NodeIdExt for NodeId {
|
||||
fn root() -> NodeId {
|
||||
NodeId::placeholder_from_expn_id(ExpnId::root())
|
||||
NodeId::placeholder_from_expn_id(LocalExpnId::ROOT)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue