implement generic_arg_infer
for array lengths
This commit is contained in:
parent
5aa0239b16
commit
e3f5cc6c38
19 changed files with 161 additions and 51 deletions
|
@ -1326,12 +1326,18 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
|
|||
}
|
||||
intravisit::walk_qpath(self, path, t.hir_id, t.span);
|
||||
}
|
||||
hir::TyKind::Array(ref ty, ref anon_const) => {
|
||||
hir::TyKind::Array(ref ty, ref length) => {
|
||||
self.visit_ty(ty);
|
||||
let map = self.tcx.hir();
|
||||
self.nest_typeck_results(self.tcx.hir().local_def_id(anon_const.hir_id), |v| {
|
||||
v.visit_expr(&map.body(anon_const.body).value)
|
||||
});
|
||||
match length {
|
||||
// FIXME(generic_arg_infer): We probably want to
|
||||
// output the inferred type here? :shrug:
|
||||
hir::ArrayLen::Infer(..) => {}
|
||||
hir::ArrayLen::Body(anon_const) => self
|
||||
.nest_typeck_results(self.tcx.hir().local_def_id(anon_const.hir_id), |v| {
|
||||
v.visit_expr(&map.body(anon_const.body).value)
|
||||
}),
|
||||
}
|
||||
}
|
||||
hir::TyKind::OpaqueDef(item_id, _) => {
|
||||
let item = self.tcx.hir().item(item_id);
|
||||
|
@ -1390,12 +1396,18 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
|
|||
v.visit_expr(&body.value)
|
||||
});
|
||||
}
|
||||
hir::ExprKind::Repeat(ref expr, ref anon_const) => {
|
||||
hir::ExprKind::Repeat(ref expr, ref length) => {
|
||||
self.visit_expr(expr);
|
||||
let map = self.tcx.hir();
|
||||
self.nest_typeck_results(self.tcx.hir().local_def_id(anon_const.hir_id), |v| {
|
||||
v.visit_expr(&map.body(anon_const.body).value)
|
||||
});
|
||||
match length {
|
||||
// FIXME(generic_arg_infer): We probably want to
|
||||
// output the inferred type here? :shrug:
|
||||
hir::ArrayLen::Infer(..) => {}
|
||||
hir::ArrayLen::Body(anon_const) => self
|
||||
.nest_typeck_results(self.tcx.hir().local_def_id(anon_const.hir_id), |v| {
|
||||
v.visit_expr(&map.body(anon_const.body).value)
|
||||
}),
|
||||
}
|
||||
}
|
||||
// In particular, we take this branch for call and path expressions,
|
||||
// where we'll index the idents involved just by continuing to walk.
|
||||
|
|
|
@ -310,9 +310,13 @@ impl<'hir> Sig for hir::Ty<'hir> {
|
|||
let nested = bounds_to_string(&bounds);
|
||||
Ok(text_sig(nested))
|
||||
}
|
||||
hir::TyKind::Array(ref ty, ref anon_const) => {
|
||||
hir::TyKind::Array(ref ty, ref length) => {
|
||||
let nested_ty = ty.make(offset + 1, id, scx)?;
|
||||
let expr = id_to_string(&scx.tcx.hir(), anon_const.body.hir_id).replace('\n', " ");
|
||||
let hir_id = match length {
|
||||
&hir::ArrayLen::Infer(hir_id, _) => hir_id,
|
||||
hir::ArrayLen::Body(anon_const) => anon_const.hir_id,
|
||||
};
|
||||
let expr = id_to_string(&scx.tcx.hir(), hir_id).replace('\n', " ");
|
||||
let text = format!("[{}; {}]", nested_ty.text, expr);
|
||||
Ok(replace_text(nested_ty, text))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue