1
Fork 0

Store resolution for self and crate root module segments

This commit is contained in:
Michael Goulet 2024-10-27 00:16:44 +00:00
parent a1f2999536
commit 19b528b8a0
5 changed files with 63 additions and 7 deletions

View file

@ -1478,9 +1478,11 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
if segment_idx == 0 {
if name == kw::SelfLower {
let mut ctxt = ident.span.ctxt().normalize_to_macros_2_0();
module = Some(ModuleOrUniformRoot::Module(
self.resolve_self(&mut ctxt, parent_scope.module),
));
let self_mod = self.resolve_self(&mut ctxt, parent_scope.module);
if let Some(res) = self_mod.res() {
record_segment_res(self, res);
}
module = Some(ModuleOrUniformRoot::Module(self_mod));
continue;
}
if name == kw::PathRoot && ident.span.at_least_rust_2018() {
@ -1497,7 +1499,11 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
}
if name == kw::PathRoot || name == kw::Crate || name == kw::DollarCrate {
// `::a::b`, `crate::a::b` or `$crate::a::b`
module = Some(ModuleOrUniformRoot::Module(self.resolve_crate_root(ident)));
let crate_root = self.resolve_crate_root(ident);
if let Some(res) = crate_root.res() {
record_segment_res(self, res);
}
module = Some(ModuleOrUniformRoot::Module(crate_root));
continue;
}
}