rustc: Simplify tritv::copy; shaves a couple of seconds off typestate.

This commit is contained in:
Patrick Walton 2011-07-12 11:47:32 -07:00
parent 4b23ea51bc
commit 0be1a0b500

View file

@ -186,24 +186,11 @@ fn tritv_set(uint i, &t v, trit t) -> bool {
} }
fn tritv_copy(&t target, &t source) -> bool { fn tritv_copy(&t target, &t source) -> bool {
let uint i = 0u;
assert (target.nbits == source.nbits); assert (target.nbits == source.nbits);
auto changed = false; auto changed = !bitv::equal(target.uncertain, source.uncertain) ||
auto oldunc; !bitv::equal(target.val, source.val);
auto newunc; bitv::copy(target.uncertain, source.uncertain);
auto oldval; bitv::copy(target.val, source.val);
auto newval;
while (i < target.nbits) {
oldunc = bitv::get(target.uncertain, i);
newunc = bitv::get(source.uncertain, i);
oldval = bitv::get(target.val, i);
newval = bitv::get(source.val, i);
bitv::set(target.uncertain, i, newunc);
changed = changed || (oldunc && !newunc);
bitv::set(target.val, i, newval);
changed = changed || (oldval && !newval);
i += 1u;
}
ret changed; ret changed;
} }