about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-02-15 09:40:42 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-02-15 15:47:42 +0100
commit67cc89f38d2e75cb0dcd6303fbe4bb4f659277a7 (patch)
tree99caacd6c05c72beb28e73a9aa759b5db1d88114 /src/libstd
parent4b63826050dfc579b9ac65a6b72ad0ca6f6b51fc (diff)
downloadrust-67cc89f38d2e75cb0dcd6303fbe4bb4f659277a7.tar.gz
rust-67cc89f38d2e75cb0dcd6303fbe4bb4f659277a7.zip
Rewrite exhaustiveness checker
Issue #352
Closes #1720

The old checker would happily accept things like 'alt x { @some(a) { a } }'.
It now properly descends into patterns, checks exhaustiveness of booleans,
and complains when number/string patterns aren't exhaustive.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/four.rs6
-rw-r--r--src/libstd/serialization.rs2
-rw-r--r--src/libstd/treemap.rs8
-rw-r--r--src/libstd/tri.rs4
4 files changed, 12 insertions, 8 deletions
diff --git a/src/libstd/four.rs b/src/libstd/four.rs
index ad44f225f25..e1804be2b91 100644
--- a/src/libstd/four.rs
+++ b/src/libstd/four.rs
@@ -166,7 +166,7 @@ Function: from_str
 Parse logic value from `s`
 */
 pure fn from_str(s: str) -> t {
-    alt s {
+    alt check s {
       "none" { none }
       "false" { four::false }
       "true" { four::true }
@@ -181,7 +181,7 @@ Convert `v` into a string
 */
 pure fn to_str(v: t) -> str {
     // FIXME replace with consts as soon as that works
-    alt v {
+    alt check v {
       0u8 { "none" }
       1u8 { "true" }
       2u8 { "false" }
@@ -265,7 +265,7 @@ mod tests {
     }
 
     fn to_tup(v: four::t) -> (bool, bool) {
-        alt v {
+        alt check v {
           0u8 { (false, false) }
           1u8 { (false, true) }
           2u8 { (true, false) }
diff --git a/src/libstd/serialization.rs b/src/libstd/serialization.rs
index 1b91b34fe11..1cc8cb529d8 100644
--- a/src/libstd/serialization.rs
+++ b/src/libstd/serialization.rs
@@ -241,7 +241,7 @@ fn test_option_int() {
     fn deserialize_0<S: deserializer>(s: S) -> option<int> {
         s.read_enum("option") {||
             s.read_enum_variant {|i|
-                alt i {
+                alt check i {
                   0u { none }
                   1u {
                     let v0 = s.read_enum_variant_arg(0u) {||
diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs
index bcea14df377..1647ea8f977 100644
--- a/src/libstd/treemap.rs
+++ b/src/libstd/treemap.rs
@@ -52,8 +52,12 @@ fn insert<K: copy, V: copy>(m: treemap<K, V>, k: K, v: V) {
         // We have to name left and right individually, because
         // otherwise the alias checker complains.
         if k < kk {
-            alt m { @node(_, _, left, _) { insert(left, k, v); } }
-        } else { alt m { @node(_, _, _, right) { insert(right, k, v); } } }
+            alt check m { @node(_, _, left, _) { insert(left, k, v); } }
+        } else {
+            alt check m {
+              @node(_, _, _, right) { insert(right, k, v); }
+            }
+        }
       }
     }
 }
diff --git a/src/libstd/tri.rs b/src/libstd/tri.rs
index 7cc749429ce..5835dbf8c42 100644
--- a/src/libstd/tri.rs
+++ b/src/libstd/tri.rs
@@ -137,7 +137,7 @@ Function: from_str
 Parse logic value from `s`
 */
 pure fn from_str(s: str) -> t {
-    alt s {
+    alt check s {
       "unknown" { unknown }
       "true" { tri::true }
       "false" { tri::false }
@@ -151,7 +151,7 @@ Convert `v` into a string
 */
 pure fn to_str(v: t) -> str {
     // FIXME replace with consts as soon as that works
-    alt v {
+    alt check v {
       0u8 { "unknown" }
       1u8 { "true" }
       2u8 { "false" }