Auto merge of #83424 - cjgillot:noparam, r=lcnr
GenericParam does not need to be a HIR owner. The special case is not required. Universal impl traits design to regular generic parameters, and their content is owned by the enclosing item. Existential (and opaque) impl traits generate their own enclosing item, and are collected through it.
This commit is contained in:
commit
cb473c2c5b
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)
|
||||
}
|
||||
TyKind::ImplTrait(def_node_id, _) => {
|
||||
self.lctx.allocate_hir_id_counter(def_node_id);
|
||||
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`.
|
||||
let def_id = self.resolver.local_def_id(def_node_id);
|
||||
|
||||
self.allocate_hir_id_counter(def_node_id);
|
||||
|
||||
let hir_bounds = self.with_hir_id_owner(def_node_id, |this| {
|
||||
this.lower_param_bounds(
|
||||
let hir_bounds = self.lower_param_bounds(
|
||||
bounds,
|
||||
ImplTraitContext::Universal(in_band_ty_params, parent_def_id),
|
||||
)
|
||||
});
|
||||
);
|
||||
// Set the name to `impl Bound1 + Bound2`.
|
||||
let ident = Ident::from_str_and_span(&pprust::ty_to_string(t), span);
|
||||
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>) {
|
||||
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));
|
||||
intravisit::walk_generic_param(self, param);
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_const_param_default(&mut self, param: HirId, ct: &'hir AnonConst) {
|
||||
self.with_parent(param, |this| intravisit::walk_const_param_default(this, ct))
|
||||
|
|
|
@ -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
|
||||
// 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 {
|
||||
match param.kind {
|
||||
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 { .. } => {
|
||||
let param_ss = param.name.ident().span;
|
||||
let name = escape(self.span.snippet(param_ss));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue