about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2017-11-12 06:25:09 -0500
committerNiko Matsakis <niko@alum.mit.edu>2017-11-22 03:51:55 -0500
commitb3a10db03ea1a0e43f58319d2d0d006bd31ded08 (patch)
tree5383b73cb4781a95f231c78cbd844b3a1e61f7a6 /src
parentb588edc41374c217b290dad0a27d6206ef183cdb (diff)
downloadrust-b3a10db03ea1a0e43f58319d2d0d006bd31ded08.tar.gz
rust-b3a10db03ea1a0e43f58319d2d0d006bd31ded08.zip
avoid early return
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/transform/type_check.rs39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/librustc_mir/transform/type_check.rs b/src/librustc_mir/transform/type_check.rs
index cdfa506a3c2..464dae6d501 100644
--- a/src/librustc_mir/transform/type_check.rs
+++ b/src/librustc_mir/transform/type_check.rs
@@ -1036,13 +1036,18 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
     ) -> Result<Ty<'tcx>, FieldAccessError> {
         let tcx = self.tcx();
 
-        let (variant, substs) = match **ak {
+        match **ak {
             AggregateKind::Adt(def, variant, substs, _) => {
-                // handle unions?
-                (&def.variants[variant], substs)
+                if let Some(field) = def.variants[variant].fields.get(field) {
+                    Ok(self.normalize(&field.ty(tcx, substs), location))
+                } else {
+                    Err(FieldAccessError::OutOfRange {
+                        field_count: variant.fields.len(),
+                    })
+                }
             }
             AggregateKind::Closure(def_id, substs) => {
-                return match substs.upvar_tys(def_id, tcx).nth(field) {
+                match substs.upvar_tys(def_id, tcx).nth(field) {
                     Some(ty) => Ok(ty),
                     None => Err(FieldAccessError::OutOfRange {
                         field_count: substs.upvar_tys(def_id, tcx).count(),
@@ -1051,30 +1056,22 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
             }
             AggregateKind::Generator(def_id, substs, _) => {
                 if let Some(ty) = substs.upvar_tys(def_id, tcx).nth(field) {
-                    return Ok(ty);
+                    Ok(ty);
+                } else {
+                    match substs.field_tys(def_id, tcx).nth(field) {
+                        Some(ty) => Ok(ty),
+                        None => Err(FieldAccessError::OutOfRange {
+                            field_count: substs.field_tys(def_id, tcx).count() + 1,
+                        }),
+                    }
                 }
-
-                return match substs.field_tys(def_id, tcx).nth(field) {
-                    Some(ty) => Ok(ty),
-                    None => Err(FieldAccessError::OutOfRange {
-                        field_count: substs.field_tys(def_id, tcx).count() + 1,
-                    }),
-                };
             }
             AggregateKind::Array(ty) => {
-                return Ok(ty);
+                Ok(ty)
             }
             AggregateKind::Tuple => {
                 unreachable!("This should have been covered in check_rvalues");
             }
-        };
-
-        if let Some(field) = variant.fields.get(field) {
-            Ok(self.normalize(&field.ty(tcx, substs), location))
-        } else {
-            Err(FieldAccessError::OutOfRange {
-                field_count: variant.fields.len(),
-            })
         }
     }