resolve: Replace `Macros20NormalizedIdent` with `IdentKey` This is a continuation of https://github.com/rust-lang/rust/pull/150741 and https://github.com/rust-lang/rust/pull/150982 based on the ideas from https://github.com/rust-lang/rust/pull/151491#issuecomment-3784421866. Before this PR `Macros20NormalizedIdent` was used as a key in various "identifier -> its resolution" maps in `rustc_resolve`. `Macros20NormalizedIdent` is a newtype around `Ident` in which `SyntaxContext` (packed inside `Span`) is guaranteed to be normalized using `normalize_to_macros_2_0`. This type is also used in a number of functions looking up identifiers in those maps. `Macros20NormalizedIdent` still contains span locations, which are useless and ignored during hash map lookups and comparisons due to `Ident`'s special `PartialEq` and `Hash` impls. This PR replaces `Macros20NormalizedIdent` with a new type called `IdentKey`, which contains only a symbol and a normalized unpacked syntax context. (E.g. `IdentKey` == `Macros20NormalizedIdent` minus span locations.) So we avoid keeping additional data and doing some syntax context packing/unpacking. Along with `IdentKey` you can often see `orig_ident_span: Span` being passed around. This is an unnormalized span of the original `Ident` from which `IdentKey` was obtained. It is not used in map keys, but it is used in a number of other scenarios: - diagnostics - edition checks - `allow_unstable` checks This is because `normalize_to_macros_2_0` normalization is lossy and the normalized spans / syntax contexts no longer contain parts of macro backtraces, while the original span contains everything. |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||