val(const_bool(false)),
0u, left_ty)
}
- ref u => (*u).clone(),
+ u => u,
}
}
ty::ty_enum(eid, _) => {
match is_useful_specialized(cx, m, v, variant(va.id),
va.args.len(), left_ty) {
not_useful => (),
- ref u => return (*u).clone(),
+ u => return u,
}
}
not_useful
for n in iter::range(0u, max_len + 1) {
match is_useful_specialized(cx, m, v, vec(n), n, left_ty) {
not_useful => (),
- ref u => return (*u).clone(),
+ u => return u,
}
}
not_useful
}
}
}
- Some(ref ctor) => {
+ Some(ctor) => {
match is_useful(cx,
&m.iter().filter_map(|r| {
default(cx, r.as_slice())
}).collect::<matrix>(),
v.tail()) {
- useful_ => useful(left_ty, (*ctor).clone()),
- ref u => (*u).clone(),
+ useful_ => useful(left_ty, ctor),
+ u => u,
}
}
}
}
- Some(ref v0_ctor) => {
- let arity = ctor_arity(cx, v0_ctor, left_ty);
- is_useful_specialized(cx, m, v, (*v0_ctor).clone(), arity, left_ty)
+ Some(v0_ctor) => {
+ let arity = ctor_arity(cx, &v0_ctor, left_ty);
+ is_useful_specialized(cx, m, v, v0_ctor, arity, left_ty)
}
}
}
cx, &ms, specialize(cx, v, &ctor, arity, lty).unwrap().as_slice());
match could_be_useful {
useful_ => useful(lty, ctor),
- ref u => (*u).clone(),
+ u => u,
}
}
let mut found = Vec::new();
for r in m.iter() {
let r = pat_ctor_id(cx, *r.get(0));
- for id in r.iter() {
- if !found.contains(id) {
- found.push((*id).clone());
+ for id in r.move_iter() {
+ if !found.contains(&id) {
+ found.push(id);
}
}
}
let num_elements = before.len() + after.len();
if num_elements < arity && slice.is_some() {
let mut result = Vec::new();
- for pat in before.iter() {
- result.push((*pat).clone());
- }
- for _ in iter::range(0, arity - num_elements) {
- result.push(wild())
- }
- for pat in after.iter() {
- result.push((*pat).clone());
- }
- for pat in r.tail().iter() {
- result.push((*pat).clone());
- }
+ let wilds = Vec::from_elem(arity - num_elements, wild());
+ result.push_all_move(before);
+ result.push_all_move(wilds);
+ result.push_all_move(after);
+ result.push_all(r.tail());
Some(result)
} else if num_elements == arity {
let mut result = Vec::new();
- for pat in before.iter() {
- result.push((*pat).clone());
- }
- for pat in after.iter() {
- result.push((*pat).clone());
- }
- for pat in r.tail().iter() {
- result.push((*pat).clone());
- }
+ result.push_all_move(before);
+ result.push_all_move(after);
+ result.push_all(r.tail());
Some(result)
} else {
None