Skip to content

Commit b3a10db

Browse files
committed
avoid early return
1 parent b588edc commit b3a10db

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

src/librustc_mir/transform/type_check.rs

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,13 +1036,18 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
10361036
) -> Result<Ty<'tcx>, FieldAccessError> {
10371037
let tcx = self.tcx();
10381038

1039-
let (variant, substs) = match **ak {
1039+
match **ak {
10401040
AggregateKind::Adt(def, variant, substs, _) => {
1041-
// handle unions?
1042-
(&def.variants[variant], substs)
1041+
if let Some(field) = def.variants[variant].fields.get(field) {
1042+
Ok(self.normalize(&field.ty(tcx, substs), location))
1043+
} else {
1044+
Err(FieldAccessError::OutOfRange {
1045+
field_count: variant.fields.len(),
1046+
})
1047+
}
10431048
}
10441049
AggregateKind::Closure(def_id, substs) => {
1045-
return match substs.upvar_tys(def_id, tcx).nth(field) {
1050+
match substs.upvar_tys(def_id, tcx).nth(field) {
10461051
Some(ty) => Ok(ty),
10471052
None => Err(FieldAccessError::OutOfRange {
10481053
field_count: substs.upvar_tys(def_id, tcx).count(),
@@ -1051,30 +1056,22 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
10511056
}
10521057
AggregateKind::Generator(def_id, substs, _) => {
10531058
if let Some(ty) = substs.upvar_tys(def_id, tcx).nth(field) {
1054-
return Ok(ty);
1059+
Ok(ty);
1060+
} else {
1061+
match substs.field_tys(def_id, tcx).nth(field) {
1062+
Some(ty) => Ok(ty),
1063+
None => Err(FieldAccessError::OutOfRange {
1064+
field_count: substs.field_tys(def_id, tcx).count() + 1,
1065+
}),
1066+
}
10551067
}
1056-
1057-
return match substs.field_tys(def_id, tcx).nth(field) {
1058-
Some(ty) => Ok(ty),
1059-
None => Err(FieldAccessError::OutOfRange {
1060-
field_count: substs.field_tys(def_id, tcx).count() + 1,
1061-
}),
1062-
};
10631068
}
10641069
AggregateKind::Array(ty) => {
1065-
return Ok(ty);
1070+
Ok(ty)
10661071
}
10671072
AggregateKind::Tuple => {
10681073
unreachable!("This should have been covered in check_rvalues");
10691074
}
1070-
};
1071-
1072-
if let Some(field) = variant.fields.get(field) {
1073-
Ok(self.normalize(&field.ty(tcx, substs), location))
1074-
} else {
1075-
Err(FieldAccessError::OutOfRange {
1076-
field_count: variant.fields.len(),
1077-
})
10781075
}
10791076
}
10801077

0 commit comments

Comments
 (0)