Patch up some code that was using irrefutable patterns incorrectly.

This commit is contained in:
Niko Matsakis 2013-06-20 15:14:30 -04:00
parent ba13482dfa
commit 9999622e44
2 changed files with 15 additions and 9 deletions

View File

@ -715,10 +715,16 @@ fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
let mut tmps = ~[];
let mut ptrs = ~[];
for es.iter().advance |&(k, v)| {
let kv = @fmt!("%s=%s", k, v);
tmps.push(kv);
ptrs.push(str::as_c_str(*kv, |b| b));
for es.iter().advance |pair| {
// Use of match here is just to workaround limitations
// in the stage0 irrefutable pattern impl.
match pair {
&(ref k, ref v) => {
let kv = @fmt!("%s=%s", *k, *v);
tmps.push(kv);
ptrs.push(str::as_c_str(*kv, |b| b));
}
}
}
ptrs.push(ptr::null());
@ -1294,9 +1300,9 @@ mod tests {
let output = str::from_bytes(prog.finish_with_output().output);
let r = os::env();
for r.iter().advance |&(k, v)| {
for r.iter().advance |&(ref k, ref v)| {
// don't check windows magical empty-named variables
assert!(k.is_empty() || output.contains(fmt!("%s=%s", k, v)));
assert!(k.is_empty() || output.contains(fmt!("%s=%s", *k, *v)));
}
}
#[test]

View File

@ -281,16 +281,16 @@ pub trait VectorVector<T> {
impl<'self, T:Copy> VectorVector<T> for &'self [~[T]] {
/// Flattens a vector of slices of T into a single vector of T.
pub fn concat_vec(&self) -> ~[T] {
self.flat_map(|&inner| inner)
self.flat_map(|inner| copy *inner)
}
/// Concatenate a vector of vectors, placing a given separator between each.
pub fn connect_vec(&self, sep: &T) -> ~[T] {
let mut r = ~[];
let mut first = true;
for self.iter().advance |&inner| {
for self.iter().advance |inner| {
if first { first = false; } else { r.push(copy *sep); }
r.push_all(inner);
r.push_all(copy *inner);
}
r
}