about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-02-19 21:18:19 -0500
committerDaniel Micay <danielmicay@gmail.com>2013-02-19 21:20:07 -0500
commitfa6e3b49bf74dbfb18c7ac1996c8c054c5673f10 (patch)
tree5642cfaa0e67740b0fbe26d7b62d0644ae3656c8
parent12b43b274bfc962143afbb087f11b9e2137b0758 (diff)
replace explicit loops with foldr
-rw-r--r--src/librustc/middle/trans/_match.rs19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs
index 46aed07c66d..8085e4a66e1 100644
--- a/src/librustc/middle/trans/_match.rs
+++ b/src/librustc/middle/trans/_match.rs
@@ -1369,19 +1369,14 @@ pub fn compile_submatch(bcx: block,
                         PointerCast(bcx, val, T_opaque_enum_ptr(ccx));
                     let discrimptr = GEPi(bcx, enumptr, [0u, 0u]);
 
-                    let mut min_discrim = variants[0].disr_val;
-                    for uint::range(1, variants.len()) |idx| {
-                        if variants[idx].disr_val < min_discrim {
-                            min_discrim = variants[idx].disr_val;
-                        }
-                    }
 
-                    let mut max_discrim = variants[0].disr_val;
-                    for uint::range(1, variants.len()) |idx| {
-                        if variants[idx].disr_val > max_discrim {
-                            max_discrim = variants[idx].disr_val;
-                        }
-                    }
+                    assert variants.len() > 1;
+                    let min_discrim = do variants.foldr(0) |&x, y| {
+                        int::min(x.disr_val, y)
+                    };
+                    let max_discrim = do variants.foldr(0) |&x, y| {
+                        int::max(x.disr_val, y)
+                    };
 
                     test_val = LoadRangeAssert(bcx, discrimptr,
                                                min_discrim as c_ulonglong,