Skip to content

Instantly share code, notes, and snippets.

@eholk
Created July 12, 2012 18:08
Show Gist options
  • Select an option

  • Save eholk/3099796 to your computer and use it in GitHub Desktop.

Select an option

Save eholk/3099796 to your computer and use it in GitHub Desktop.
impl private_methods/&<T: send> for &self.recv_packet<T> {
pure fn header() -> &self.packet_header {
alt self.p {
some(packet) {
unsafe {
let packet = uniquify(packet);
let header = reinterpret_cast(&packet.header);
forget(packet);
header
}
}
none { fail "packet already consumed" }
}
}
}
fn select2<A: send, B: send>(
+a: recv_packet<A>,
+b: recv_packet<B>)
-> either<(option<A>, recv_packet<B>), (recv_packet<A>, option<B>)>
{
let i = wait_many([(&a).header(), (&b).header()]/_);
unsafe {
alt i {
0 { left((try_recv(a), b)) }
1 { right((a, try_recv(b))) }
_ { fail "select2 return an invalid packet" }
}
}
}
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:297:29: 297:30 error: moving out of argument prohibited due to outstanding loan
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:297 0 { left((try_recv(a), b)) }
^
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:293:25: 293:26 note: loan of argument granted here
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:293 let i = wait_many([(&a).header(), (&b).header()]/_);
^
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:298:33: 298:34 error: moving out of argument prohibited due to outstanding loan
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:298 1 { right((a, try_recv(b))) }
^
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:293:40: 293:41 note: loan of argument granted here
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:293 let i = wait_many([(&a).header(), (&b).header()]/_);
^
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:297:33: 297:34 error: copying a noncopyable value
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:297 0 { left((try_recv(a), b)) }
^
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:298:21: 298:22 error: copying a noncopyable value
/Users/eholk/Documents/projects/mozilla/rust/src/libcore/pipes.rs:298 1 { right((a, try_recv(b))) }
^
error: aborting due to 4 previous errors
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment