GenericParam does not need to be a HIR owner.
This commit is contained in:
parent
d04c3aa865
commit
4c0b7ac7ba
4 changed files with 6 additions and 54 deletions
|
@ -520,10 +520,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||||
}
|
}
|
||||||
self.visit_fn_ret_ty(&f.decl.output)
|
self.visit_fn_ret_ty(&f.decl.output)
|
||||||
}
|
}
|
||||||
TyKind::ImplTrait(def_node_id, _) => {
|
|
||||||
self.lctx.allocate_hir_id_counter(def_node_id);
|
|
||||||
visit::walk_ty(self, t);
|
|
||||||
}
|
|
||||||
_ => visit::walk_ty(self, t),
|
_ => visit::walk_ty(self, t),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1431,14 +1427,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||||
// Add a definition for the in-band `Param`.
|
// Add a definition for the in-band `Param`.
|
||||||
let def_id = self.resolver.local_def_id(def_node_id);
|
let def_id = self.resolver.local_def_id(def_node_id);
|
||||||
|
|
||||||
self.allocate_hir_id_counter(def_node_id);
|
let hir_bounds = self.lower_param_bounds(
|
||||||
|
|
||||||
let hir_bounds = self.with_hir_id_owner(def_node_id, |this| {
|
|
||||||
this.lower_param_bounds(
|
|
||||||
bounds,
|
bounds,
|
||||||
ImplTraitContext::Universal(in_band_ty_params, parent_def_id),
|
ImplTraitContext::Universal(in_band_ty_params, parent_def_id),
|
||||||
)
|
);
|
||||||
});
|
|
||||||
// Set the name to `impl Bound1 + Bound2`.
|
// Set the name to `impl Bound1 + Bound2`.
|
||||||
let ident = Ident::from_str_and_span(&pprust::ty_to_string(t), span);
|
let ident = Ident::from_str_and_span(&pprust::ty_to_string(t), span);
|
||||||
in_band_ty_params.push(hir::GenericParam {
|
in_band_ty_params.push(hir::GenericParam {
|
||||||
|
|
|
@ -373,27 +373,9 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_generic_param(&mut self, param: &'hir GenericParam<'hir>) {
|
fn visit_generic_param(&mut self, param: &'hir GenericParam<'hir>) {
|
||||||
if let hir::GenericParamKind::Type {
|
|
||||||
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait),
|
|
||||||
..
|
|
||||||
} = param.kind
|
|
||||||
{
|
|
||||||
debug_assert_eq!(
|
|
||||||
param.hir_id.owner,
|
|
||||||
self.definitions.opt_hir_id_to_local_def_id(param.hir_id).unwrap()
|
|
||||||
);
|
|
||||||
self.with_dep_node_owner(param.hir_id.owner, param, |this, hash| {
|
|
||||||
this.insert_with_hash(param.span, param.hir_id, Node::GenericParam(param), hash);
|
|
||||||
|
|
||||||
this.with_parent(param.hir_id, |this| {
|
|
||||||
intravisit::walk_generic_param(this, param);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
self.insert(param.span, param.hir_id, Node::GenericParam(param));
|
self.insert(param.span, param.hir_id, Node::GenericParam(param));
|
||||||
intravisit::walk_generic_param(self, param);
|
intravisit::walk_generic_param(self, param);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_trait_item(&mut self, ti: &'hir TraitItem<'hir>) {
|
fn visit_trait_item(&mut self, ti: &'hir TraitItem<'hir>) {
|
||||||
self.with_dep_node_owner(ti.def_id, ti, |this, hash| {
|
self.with_dep_node_owner(ti.def_id, ti, |this, hash| {
|
||||||
|
|
|
@ -172,17 +172,4 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
|
||||||
// we are currently in. So for those it's correct that they have a
|
// we are currently in. So for those it's correct that they have a
|
||||||
// different owner.
|
// different owner.
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_generic_param(&mut self, param: &'hir hir::GenericParam<'hir>) {
|
|
||||||
if let hir::GenericParamKind::Type {
|
|
||||||
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait),
|
|
||||||
..
|
|
||||||
} = param.kind
|
|
||||||
{
|
|
||||||
// Synthetic impl trait parameters are owned by the node of the desugared type.
|
|
||||||
// This means it is correct for them to have a different owner.
|
|
||||||
} else {
|
|
||||||
intravisit::walk_generic_param(self, param);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -320,15 +320,6 @@ impl<'tcx> DumpVisitor<'tcx> {
|
||||||
for param in generics.params {
|
for param in generics.params {
|
||||||
match param.kind {
|
match param.kind {
|
||||||
hir::GenericParamKind::Lifetime { .. } => {}
|
hir::GenericParamKind::Lifetime { .. } => {}
|
||||||
hir::GenericParamKind::Type {
|
|
||||||
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait),
|
|
||||||
..
|
|
||||||
} => {
|
|
||||||
return self
|
|
||||||
.nest_typeck_results(self.tcx.hir().local_def_id(param.hir_id), |this| {
|
|
||||||
this.visit_generics(generics)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
hir::GenericParamKind::Type { .. } => {
|
hir::GenericParamKind::Type { .. } => {
|
||||||
let param_ss = param.name.ident().span;
|
let param_ss = param.name.ident().span;
|
||||||
let name = escape(self.span.snippet(param_ss));
|
let name = escape(self.span.snippet(param_ss));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue