Split hir TyKind
and ConstArgKind
in two and update hir::Visitor
This commit is contained in:
parent
0f10ba60ff
commit
98d80e22d0
48 changed files with 513 additions and 313 deletions
|
@ -1,3 +1,4 @@
|
|||
use intravisit::InferKind;
|
||||
use rustc_data_structures::sorted_map::SortedMap;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def_id::{LocalDefId, LocalDefIdMap};
|
||||
|
@ -265,14 +266,6 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
|
|||
});
|
||||
}
|
||||
|
||||
fn visit_const_arg(&mut self, const_arg: &'hir ConstArg<'hir>) {
|
||||
self.insert(const_arg.span(), const_arg.hir_id, Node::ConstArg(const_arg));
|
||||
|
||||
self.with_parent(const_arg.hir_id, |this| {
|
||||
intravisit::walk_const_arg(this, const_arg);
|
||||
});
|
||||
}
|
||||
|
||||
fn visit_expr(&mut self, expr: &'hir Expr<'hir>) {
|
||||
self.insert(expr.span, expr.hir_id, Node::Expr(expr));
|
||||
|
||||
|
@ -302,22 +295,41 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
|
|||
intravisit::walk_path_segment(self, path_segment);
|
||||
}
|
||||
|
||||
fn visit_ty(&mut self, ty: &'hir Ty<'hir>) {
|
||||
self.insert(ty.span, ty.hir_id, Node::Ty(ty));
|
||||
fn visit_ty(&mut self, ty: &'hir Ty<'hir, AmbigArg>) {
|
||||
self.insert(ty.span, ty.hir_id, Node::Ty(ty.as_unambig_ty()));
|
||||
|
||||
self.with_parent(ty.hir_id, |this| {
|
||||
intravisit::walk_ty(this, ty);
|
||||
});
|
||||
}
|
||||
|
||||
fn visit_infer(&mut self, inf: &'hir InferArg) {
|
||||
self.insert(inf.span, inf.hir_id, Node::Infer(inf));
|
||||
fn visit_const_arg(&mut self, const_arg: &'hir ConstArg<'hir, AmbigArg>) {
|
||||
self.insert(
|
||||
const_arg.as_unambig_ct().span(),
|
||||
const_arg.hir_id,
|
||||
Node::ConstArg(const_arg.as_unambig_ct()),
|
||||
);
|
||||
|
||||
self.with_parent(inf.hir_id, |this| {
|
||||
intravisit::walk_inf(this, inf);
|
||||
self.with_parent(const_arg.hir_id, |this| {
|
||||
intravisit::walk_ambig_const_arg(this, const_arg);
|
||||
});
|
||||
}
|
||||
|
||||
fn visit_infer(
|
||||
&mut self,
|
||||
inf_id: HirId,
|
||||
inf_span: Span,
|
||||
kind: InferKind<'hir>,
|
||||
) -> Self::Result {
|
||||
match kind {
|
||||
InferKind::Ty(ty) => self.insert(inf_span, inf_id, Node::Ty(ty)),
|
||||
InferKind::Const(ct) => self.insert(inf_span, inf_id, Node::ConstArg(ct)),
|
||||
InferKind::Ambig(inf) => self.insert(inf_span, inf_id, Node::Infer(inf)),
|
||||
}
|
||||
|
||||
self.visit_id(inf_id);
|
||||
}
|
||||
|
||||
fn visit_trait_ref(&mut self, tr: &'hir TraitRef<'hir>) {
|
||||
self.insert(tr.path.span, tr.hir_ref_id, Node::TraitRef(tr));
|
||||
|
||||
|
|
|
@ -1111,15 +1111,17 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
|||
|
||||
let ct =
|
||||
self.lower_const_path_to_const_arg(path, res, ty.id, ty.span);
|
||||
return GenericArg::Const(ct);
|
||||
return GenericArg::Const(ct.try_as_ambig_ct().unwrap());
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
GenericArg::Type(self.lower_ty(ty, itctx))
|
||||
GenericArg::Type(self.lower_ty(ty, itctx).try_as_ambig_ty().unwrap())
|
||||
}
|
||||
ast::GenericArg::Const(ct) => {
|
||||
GenericArg::Const(self.lower_anon_const_to_const_arg(ct).try_as_ambig_ct().unwrap())
|
||||
}
|
||||
ast::GenericArg::Const(ct) => GenericArg::Const(self.lower_anon_const_to_const_arg(ct)),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1189,7 +1191,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
|||
|
||||
fn lower_ty_direct(&mut self, t: &Ty, itctx: ImplTraitContext) -> hir::Ty<'hir> {
|
||||
let kind = match &t.kind {
|
||||
TyKind::Infer => hir::TyKind::Infer,
|
||||
TyKind::Infer => hir::TyKind::Infer(()),
|
||||
TyKind::Err(guar) => hir::TyKind::Err(*guar),
|
||||
TyKind::Slice(ty) => hir::TyKind::Slice(self.lower_ty(ty, itctx)),
|
||||
TyKind::Ptr(mt) => hir::TyKind::Ptr(self.lower_mt(mt, itctx)),
|
||||
|
@ -2045,7 +2047,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
|||
)
|
||||
.stash(c.value.span, StashKey::UnderscoreForArrayLengths);
|
||||
}
|
||||
let ct_kind = hir::ConstArgKind::Infer(self.lower_span(c.value.span));
|
||||
let ct_kind = hir::ConstArgKind::Infer(self.lower_span(c.value.span), ());
|
||||
self.arena.alloc(hir::ConstArg { hir_id: self.lower_node_id(c.id), kind: ct_kind })
|
||||
}
|
||||
_ => self.lower_anon_const_to_const_arg(c),
|
||||
|
|
|
@ -525,7 +525,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
|||
}
|
||||
FnRetTy::Default(_) => self.arena.alloc(self.ty_tup(*span, &[])),
|
||||
};
|
||||
let args = smallvec![GenericArg::Type(self.arena.alloc(self.ty_tup(*inputs_span, inputs)))];
|
||||
let args = smallvec![GenericArg::Type(
|
||||
self.arena.alloc(self.ty_tup(*inputs_span, inputs)).try_as_ambig_ty().unwrap()
|
||||
)];
|
||||
|
||||
// If we have a bound like `async Fn() -> T`, make sure that we mark the
|
||||
// `Output = T` associated type bound with the right feature gates.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue