Skip to content

Commit 1691f35

Browse files
committed
refactor: make_mirror_unadjusted
1 parent db4c783 commit 1691f35

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

Diff for: src/librustc_mir/hair/cx/expr.rs

+15-11
Original file line numberDiff line numberDiff line change
@@ -512,10 +512,10 @@ fn make_mirror_unadjusted<'a, 'gcx, 'tcx>(cx: &mut Cx<'a, 'gcx, 'tcx>,
512512
span_bug!(expr.span, "closure expr w/o closure type: {:?}", closure_ty);
513513
}
514514
};
515-
let upvars = cx.tcx.upvars(def_id).iter()
516-
.flat_map(|upvars| upvars.iter())
515+
let upvars = cx.tables().upvar_list[&def_id].iter()
517516
.zip(substs.upvar_tys(def_id, cx.tcx))
518-
.map(|(upvar, ty)| capture_upvar(cx, expr, upvar, ty))
517+
.enumerate()
518+
.map(|(index, (&upvar_id, ty))| capture_upvar(cx, expr, index, upvar_id, def_id, ty))
519519
.collect();
520520
ExprKind::Closure {
521521
closure_id: def_id,
@@ -1178,22 +1178,26 @@ fn overloaded_place<'a, 'gcx, 'tcx>(
11781178

11791179
fn capture_upvar<'a, 'gcx, 'tcx>(cx: &mut Cx<'a, 'gcx, 'tcx>,
11801180
closure_expr: &'tcx hir::Expr,
1181-
upvar: &hir::Upvar,
1181+
index: usize,
1182+
upvar_id: ty::UpvarId,
1183+
def_id: DefId,
11821184
upvar_ty: Ty<'tcx>)
11831185
-> ExprRef<'tcx> {
1184-
let var_hir_id = upvar.var_id();
1185-
let upvar_id = ty::UpvarId {
1186-
var_path: ty::UpvarPath { hir_id: var_hir_id },
1187-
closure_expr_id: cx.tcx.hir().local_def_id_from_hir_id(closure_expr.hir_id).to_local(),
1188-
};
11891186
let upvar_capture = cx.tables().upvar_capture(upvar_id);
11901187
let temp_lifetime = cx.region_scope_tree.temporary_scope(closure_expr.hir_id.local_id);
1191-
let var_ty = cx.tables().node_type(var_hir_id);
1188+
let var_ty = cx.tables().node_type(upvar_id.var_path.hir_id);
1189+
1190+
// let var_node_id = cx.tcx.hir().hir_to_node_id(upvar_id.var_path.hir_id);
1191+
let closure_expr_id = match cx.tcx.hir().as_local_node_id(def_id) {
1192+
Some(node_id) => node_id,
1193+
None => bug!("cannot retrieve closure_expr_id from fake def id"),
1194+
};
1195+
let upvar = Res::Upvar(upvar_id.var_path.hir_id, index, closure_expr_id);
11921196
let captured_var = Expr {
11931197
temp_lifetime,
11941198
ty: var_ty,
11951199
span: closure_expr.span,
1196-
kind: convert_var(cx, closure_expr, upvar.res),
1200+
kind: convert_var(cx, closure_expr, upvar),
11971201
};
11981202
match upvar_capture {
11991203
ty::UpvarCapture::ByValue => captured_var.to_ref(),

0 commit comments

Comments
 (0)