Skip to content

Commit 40bcbed

Browse files
committed
Avoid explicitly handling res when is not needed
1 parent cd3c388 commit 40bcbed

File tree

2 files changed

+46
-31
lines changed

2 files changed

+46
-31
lines changed

compiler/rustc_ast_lowering/src/item.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,11 +1453,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
14531453
GenericParamKind::Lifetime => {
14541454
let ident_span = self.lower_span(ident.span);
14551455
let ident = self.lower_ident(ident);
1456-
let res = self.resolver.get_lifetime_res(id).unwrap_or_else(|| {
1457-
panic!("Missing resolution for lifetime {:?} at {:?}", id, ident.span)
1458-
});
14591456
let lt_id = self.next_node_id();
1460-
let lifetime = self.new_named_lifetime_with_res(lt_id, ident_span, ident, res);
1457+
let lifetime = self.new_named_lifetime(id, lt_id, ident_span, ident);
14611458
Some(hir::WherePredicate::RegionPredicate(hir::WhereRegionPredicate {
14621459
lifetime,
14631460
span,

compiler/rustc_ast_lowering/src/lib.rs

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,10 +1361,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
13611361
lctx.with_remapping(new_remapping, |lctx| {
13621362
let hir_bounds = lctx.lower_param_bounds(bounds, itctx);
13631363

1364-
let lifetime_defs =
1365-
lctx.arena.alloc_from_iter(collected_lifetimes.iter().map(|&(lifetime, _)| {
1366-
let hir_id = lctx.lower_node_id(lifetime.id);
1367-
debug_assert_ne!(lctx.opt_local_def_id(lifetime.id), None);
1364+
let lifetime_defs = lctx.arena.alloc_from_iter(collected_lifetimes.iter().map(
1365+
|&(new_node_id, lifetime)| {
1366+
let hir_id = lctx.lower_node_id(new_node_id);
1367+
debug_assert_ne!(lctx.opt_local_def_id(new_node_id), None);
13681368

13691369
let (name, kind) = if lifetime.ident.name == kw::UnderscoreLifetime {
13701370
(hir::ParamName::Fresh, hir::LifetimeParamKind::Elided)
@@ -1383,7 +1383,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
13831383
kind: hir::GenericParamKind::Lifetime { kind },
13841384
colon_span: None,
13851385
}
1386-
}));
1386+
},
1387+
));
13871388

13881389
debug!("lower_opaque_impl_trait: lifetime_defs={:#?}", lifetime_defs);
13891390

@@ -1405,7 +1406,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14051406
});
14061407

14071408
let lifetimes =
1408-
self.arena.alloc_from_iter(collected_lifetimes.into_iter().map(|(lifetime, res)| {
1409+
self.arena.alloc_from_iter(collected_lifetimes.into_iter().map(|(_, lifetime)| {
14091410
let id = self.next_node_id();
14101411
let span = lifetime.ident.span;
14111412

@@ -1415,7 +1416,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14151416
lifetime.ident
14161417
};
14171418

1418-
let l = self.new_named_lifetime_with_res(id, span, ident, res);
1419+
let l = self.new_named_lifetime(lifetime.id, id, span, ident);
14191420
hir::GenericArg::Lifetime(l)
14201421
}));
14211422

@@ -1452,7 +1453,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14521453
parent_def_id: LocalDefId,
14531454
lifetimes_in_bounds: &[Lifetime],
14541455
remapping: &mut FxHashMap<LocalDefId, LocalDefId>,
1455-
) -> Vec<(Lifetime, LifetimeRes)> {
1456+
) -> Vec<(NodeId, Lifetime)> {
14561457
let mut result = Vec::new();
14571458

14581459
for lifetime in lifetimes_in_bounds {
@@ -1471,8 +1472,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14711472
);
14721473
remapping.insert(old_def_id, new_def_id);
14731474

1474-
let new_lifetime = Lifetime { id: node_id, ident: lifetime.ident };
1475-
result.push((new_lifetime, res));
1475+
result.push((node_id, *lifetime));
14761476
}
14771477
}
14781478

@@ -1489,8 +1489,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14891489
);
14901490
remapping.insert(old_def_id, new_def_id);
14911491

1492-
let new_lifetime = Lifetime { id: node_id, ident: lifetime.ident };
1493-
result.push((new_lifetime, res));
1492+
result.push((node_id, *lifetime));
14941493
}
14951494
}
14961495

@@ -1732,8 +1731,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17321731
}
17331732
};
17341733

1735-
let new_lifetime = Lifetime { id: inner_node_id, ident };
1736-
captures.push((new_lifetime, inner_res));
1734+
let lifetime = Lifetime { id: outer_node_id, ident };
1735+
captures.push((inner_node_id, lifetime, Some(inner_res)));
17371736
}
17381737

17391738
debug!(?captures);
@@ -1743,11 +1742,15 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17431742
lifetime_collector::lifetimes_in_ret_ty(&this.resolver, output);
17441743
debug!(?lifetimes_in_bounds);
17451744

1746-
captures.extend(this.create_lifetime_defs(
1747-
opaque_ty_def_id,
1748-
&lifetimes_in_bounds,
1749-
&mut new_remapping,
1750-
));
1745+
captures.extend(
1746+
this.create_lifetime_defs(
1747+
opaque_ty_def_id,
1748+
&lifetimes_in_bounds,
1749+
&mut new_remapping,
1750+
)
1751+
.into_iter()
1752+
.map(|(new_node_id, lifetime)| (new_node_id, lifetime, None)),
1753+
);
17511754

17521755
this.with_remapping(new_remapping, |this| {
17531756
// We have to be careful to get elision right here. The
@@ -1761,10 +1764,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17611764
let future_bound =
17621765
this.lower_async_fn_output_type_to_future_bound(output, fn_def_id, span);
17631766

1764-
let generic_params =
1765-
this.arena.alloc_from_iter(captures.iter().map(|&(lifetime, _)| {
1766-
let hir_id = this.lower_node_id(lifetime.id);
1767-
debug_assert_ne!(this.opt_local_def_id(lifetime.id), None);
1767+
let generic_params = this.arena.alloc_from_iter(captures.iter().map(
1768+
|&(new_node_id, lifetime, _)| {
1769+
let hir_id = this.lower_node_id(new_node_id);
1770+
debug_assert_ne!(this.opt_local_def_id(new_node_id), None);
17681771

17691772
let (name, kind) = if lifetime.ident.name == kw::UnderscoreLifetime {
17701773
(hir::ParamName::Fresh, hir::LifetimeParamKind::Elided)
@@ -1783,7 +1786,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17831786
kind: hir::GenericParamKind::Lifetime { kind },
17841787
colon_span: None,
17851788
}
1786-
}));
1789+
},
1790+
));
17871791
debug!("lower_async_fn_ret_ty: generic_params={:#?}", generic_params);
17881792

17891793
let opaque_ty_item = hir::OpaqueTy {
@@ -1819,7 +1823,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
18191823
// For the "output" lifetime parameters, we just want to
18201824
// generate `'_`.
18211825
let generic_args =
1822-
self.arena.alloc_from_iter(captures.into_iter().map(|(lifetime, res)| {
1826+
self.arena.alloc_from_iter(captures.into_iter().map(|(_, lifetime, res)| {
18231827
let id = self.next_node_id();
18241828
let span = lifetime.ident.span;
18251829

@@ -1829,6 +1833,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
18291833
lifetime.ident
18301834
};
18311835

1836+
let res = res.unwrap_or(
1837+
self.resolver.get_lifetime_res(lifetime.id).unwrap_or(LifetimeRes::Error),
1838+
);
18321839
let l = self.new_named_lifetime_with_res(id, span, ident, res);
18331840
hir::GenericArg::Lifetime(l)
18341841
}));
@@ -1901,8 +1908,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
19011908
fn lower_lifetime(&mut self, l: &Lifetime) -> hir::Lifetime {
19021909
let span = self.lower_span(l.ident.span);
19031910
let ident = self.lower_ident(l.ident);
1904-
let res = self.resolver.get_lifetime_res(l.id).unwrap_or(LifetimeRes::Error);
1905-
self.new_named_lifetime_with_res(l.id, span, ident, res)
1911+
self.new_named_lifetime(l.id, l.id, span, ident)
19061912
}
19071913

19081914
#[tracing::instrument(level = "debug", skip(self))]
@@ -1936,6 +1942,18 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
19361942
hir::Lifetime { hir_id: self.lower_node_id(id), span: self.lower_span(span), name }
19371943
}
19381944

1945+
#[tracing::instrument(level = "debug", skip(self))]
1946+
fn new_named_lifetime(
1947+
&mut self,
1948+
id: NodeId,
1949+
new_id: NodeId,
1950+
span: Span,
1951+
ident: Ident,
1952+
) -> hir::Lifetime {
1953+
let res = self.resolver.get_lifetime_res(id).unwrap_or(LifetimeRes::Error);
1954+
self.new_named_lifetime_with_res(new_id, span, ident, res)
1955+
}
1956+
19391957
fn lower_generic_params_mut<'s>(
19401958
&'s mut self,
19411959
params: &'s [GenericParam],

0 commit comments

Comments
 (0)