Skip to content

Commit 7dadd14

Browse files
Pull out downcasting into caller of iter_variant
Renames iter_variant to iter_variant_fields to more clearly communicate the purpose of the function.
1 parent d25fc9e commit 7dadd14

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/librustc_trans/glue.rs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -395,22 +395,21 @@ pub fn size_and_align_of_dst<'a, 'tcx>(bcx: &Builder<'a, 'tcx>, t: Ty<'tcx>, inf
395395
}
396396

397397
// Iterates through the elements of a structural type, dropping them.
398-
fn drop_structural_ty<'a, 'tcx>(cx: Builder<'a, 'tcx>, ptr: LvalueRef<'tcx>) -> Builder<'a, 'tcx> {
399-
fn iter_variant<'a, 'tcx>(cx: &'a Builder<'a, 'tcx>,
400-
av: LvalueRef<'tcx>,
401-
adt_def: &'tcx AdtDef,
402-
variant_index: usize,
403-
substs: &'tcx Substs<'tcx>) {
398+
fn drop_structural_ty<'a, 'tcx>(
399+
cx: Builder<'a, 'tcx>,
400+
mut ptr: LvalueRef<'tcx>
401+
) -> Builder<'a, 'tcx> {
402+
fn iter_variant_fields<'a, 'tcx>(
403+
cx: &'a Builder<'a, 'tcx>,
404+
av: LvalueRef<'tcx>,
405+
adt_def: &'tcx AdtDef,
406+
variant_index: usize,
407+
substs: &'tcx Substs<'tcx>
408+
) {
404409
let variant = &adt_def.variants[variant_index];
405410
let tcx = cx.tcx();
406411
for (i, field) in variant.fields.iter().enumerate() {
407412
let arg = monomorphize::field_ty(tcx, substs, field);
408-
let mut av = av.clone();
409-
av.ty = LvalueTy::Downcast {
410-
adt_def: adt_def,
411-
substs: substs,
412-
variant_index: variant_index,
413-
};
414413
let field_ptr = av.trans_field_ptr(&cx, i);
415414
drop_ty(&cx, LvalueRef::new_sized_ty(field_ptr, arg));
416415
}
@@ -479,7 +478,12 @@ fn drop_structural_ty<'a, 'tcx>(cx: Builder<'a, 'tcx>, ptr: LvalueRef<'tcx>) ->
479478
layout::UntaggedUnion { .. } => {
480479
if n_variants != 0 {
481480
assert!(n_variants == 1);
482-
iter_variant(&cx, ptr, &adt, 0, substs);
481+
ptr.ty = LvalueTy::Downcast {
482+
adt_def: adt,
483+
substs: substs,
484+
variant_index: 0,
485+
};
486+
iter_variant_fields(&cx, ptr, &adt, 0, substs);
483487
}
484488
}
485489
layout::CEnum { .. } |
@@ -514,7 +518,12 @@ fn drop_structural_ty<'a, 'tcx>(cx: Builder<'a, 'tcx>, ptr: LvalueRef<'tcx>) ->
514518
let variant_cx = cx.build_sibling_block(&variant_cx_name);
515519
let case_val = adt::trans_case(&cx, t, Disr::from(variant.disr_val));
516520
variant_cx.add_case(llswitch, case_val, variant_cx.llbb());
517-
iter_variant(&variant_cx, ptr, &adt, i, substs);
521+
ptr.ty = LvalueTy::Downcast {
522+
adt_def: adt,
523+
substs: substs,
524+
variant_index: i,
525+
};
526+
iter_variant_fields(&variant_cx, ptr, &adt, i, substs);
518527
variant_cx.br(next_cx.llbb());
519528
}
520529
cx = next_cx;

0 commit comments

Comments
 (0)