diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-01-30 21:00:57 -0800 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-01-31 10:08:24 -0800 |
| commit | fba35e1a3c87892823d1f4d436b9f00a7864cf16 (patch) | |
| tree | 1fadaaee99ef266bd2f709fb2aa5577184ab611e /src/libstd | |
| parent | 813a55d89135efb716dd80e96453a091a7cfc631 (diff) | |
| download | rust-fba35e1a3c87892823d1f4d436b9f00a7864cf16.tar.gz rust-fba35e1a3c87892823d1f4d436b9f00a7864cf16.zip | |
Require alts to be exhaustive
middle::check_alt does the work. Lots of changes to add default cases into alts that were previously inexhaustive.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/fun_treemap.rs | 11 | ||||
| -rw-r--r-- | src/libstd/test.rs | 6 | ||||
| -rw-r--r-- | src/libstd/treemap.rs | 20 | ||||
| -rw-r--r-- | src/libstd/uvtmp.rs | 4 |
4 files changed, 28 insertions, 13 deletions
diff --git a/src/libstd/fun_treemap.rs b/src/libstd/fun_treemap.rs index a2f6b8c225f..4a98bf5c661 100644 --- a/src/libstd/fun_treemap.rs +++ b/src/libstd/fun_treemap.rs @@ -87,12 +87,17 @@ Visit all pairs in the map in order. fn traverse<K, V: copy>(m: treemap<K, V>, f: fn(K, V)) { alt *m { empty { } - node(@k, @v, _, _) { + /* + Previously, this had what looked like redundant + matches to me, so I changed it. but that may be a + de-optimization -- tjc + */ + node(@k, @v, left, right) { // copy v to make aliases work out let v1 = v; - alt *m { node(_, _, left, _) { traverse(left, f); } } + traverse(left, f); f(k, v1); - alt *m { node(_, _, _, right) { traverse(right, f); } } + traverse(right, f); } } } diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 707e4cf153f..10b3545fc40 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -398,7 +398,8 @@ mod tests { fn first_free_arg_should_be_a_filter() { let args = ["progname", "filter"]; check (vec::is_not_empty(args)); - let opts = alt parse_opts(args) { either::left(o) { o } }; + let opts = alt parse_opts(args) { either::left(o) { o } + _ { fail "Malformed arg in first_free_arg_should_be_a_filter"; } }; assert (str::eq("filter", option::get(opts.filter))); } @@ -406,7 +407,8 @@ mod tests { fn parse_ignored_flag() { let args = ["progname", "filter", "--ignored"]; check (vec::is_not_empty(args)); - let opts = alt parse_opts(args) { either::left(o) { o } }; + let opts = alt parse_opts(args) { either::left(o) { o } + _ { fail "Malformed arg in parse_ignored_flag"; } }; assert (opts.run_ignored); } diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index 4771bc3196b..1c711952e0b 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -66,14 +66,13 @@ Find a value based on the key fn find<K: copy, V: copy>(m: treemap<K, V>, k: K) -> option<V> { alt *m { empty { none } - node(@kk, @v, _, _) { + // TODO: was that an optimization? + node(@kk, @v, left, right) { if k == kk { some(v) } else if k < kk { - - // Again, ugliness to unpack left and right individually. - alt *m { node(_, _, left, _) { find(left, k) } } - } else { alt *m { node(_, _, _, right) { find(right, k) } } } + find(left, k) + } else { find(right, k) } } } } @@ -86,11 +85,16 @@ Visit all pairs in the map in order. fn traverse<K, V>(m: treemap<K, V>, f: fn(K, V)) { alt *m { empty { } - node(k, v, _, _) { + /* + Previously, this had what looked like redundant + matches to me, so I changed it. but that may be a + de-optimization -- tjc + */ + node(k, v, left, right) { let k1 = k, v1 = v; - alt *m { node(_, _, left, _) { traverse(left, f); } } + traverse(left, f); f(*k1, *v1); - alt *m { node(_, _, _, right) { traverse(right, f); } } + traverse(right, f); } } } diff --git a/src/libstd/uvtmp.rs b/src/libstd/uvtmp.rs index ae08cd5ed5e..36e323e9678 100644 --- a/src/libstd/uvtmp.rs +++ b/src/libstd/uvtmp.rs @@ -120,6 +120,7 @@ fn test_connect() { connected(cd) { close_connection(thread, 0u32); } + _ { fail "test_connect: port isn't connected"; } } join_thread(thread); delete_thread(thread); @@ -156,12 +157,15 @@ fn test_http() { } delete_buf(buf); } + _ { fail "test_http: protocol error"; } } } close_connection(thread, 0u32); } + _ { fail "test_http: expected `wrote`"; } } } + _ { fail "test_http: port not connected"; } } join_thread(thread); delete_thread(thread); |
