Move mode for lib comm, converted a few tests.
This commit is contained in:
parent
39b16077bb
commit
871d1317e5
@ -4,6 +4,7 @@ import unsafe;
|
||||
import task;
|
||||
import task::task_id;
|
||||
|
||||
export chan_t;
|
||||
export _chan;
|
||||
export _port;
|
||||
|
||||
@ -20,10 +21,8 @@ native "rust" mod rustrt {
|
||||
fn take_chan(ch : *rust_chan);
|
||||
fn drop_chan(ch : *rust_chan);
|
||||
fn chan_send(ch: *rust_chan, v : *void);
|
||||
// FIXME: data should be -T, not &T, but this doesn't seem to be
|
||||
// supported yet.
|
||||
fn chan_id_send[~T](target_task : task_id, target_port : port_id,
|
||||
data : &T);
|
||||
data : -T);
|
||||
|
||||
fn new_port(unit_sz : uint) -> *rust_port;
|
||||
fn del_port(po : *rust_port);
|
||||
@ -90,7 +89,6 @@ fn mk_port[~T]() -> _port[T] {
|
||||
_port(@port_ptr(rustrt::new_port(sys::size_of[T]())))
|
||||
}
|
||||
|
||||
// FIXME: make data move-mode once the snapshot is updated.
|
||||
fn send[~T](ch : chan_t[T], data : &T) {
|
||||
fn send[~T](ch : chan_t[T], data : -T) {
|
||||
rustrt::chan_id_send(ch.task, ch.port, data);
|
||||
}
|
||||
}
|
||||
|
@ -2,16 +2,15 @@
|
||||
|
||||
fn main() {
|
||||
let p: port[int] = port();
|
||||
let c = chan(p);
|
||||
let y: int;
|
||||
|
||||
spawn child(c);
|
||||
spawn child(chan(p));
|
||||
p |> y;
|
||||
log "received 1";
|
||||
log y;
|
||||
assert (y == 10);
|
||||
|
||||
spawn child(c);
|
||||
spawn child(chan(p));
|
||||
p |> y;
|
||||
log "received 2";
|
||||
log y;
|
||||
|
@ -21,4 +21,4 @@ fn test00() {
|
||||
for t: task in tasks { task::join(t); }
|
||||
|
||||
log "Joined all task.";
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,21 @@
|
||||
// xfail for now, due to some problem with polymorphic types.
|
||||
// xfail-stage2
|
||||
use std;
|
||||
import std::task;
|
||||
import std::comm;
|
||||
import std::comm::chan_t;
|
||||
import std::comm::send;
|
||||
|
||||
fn main() { log "===== WITHOUT THREADS ====="; test00(); }
|
||||
|
||||
fn test00_start(pch: *u8, message: int, count: int) {
|
||||
fn test00_start(ch: chan_t[int], message: int, count: int) {
|
||||
log "Starting test00_start";
|
||||
let ch = comm::chan_from_unsafe_ptr(pch);
|
||||
let i: int = 0;
|
||||
while i < count { log "Sending Message"; ch.send(message); i = i + 1; }
|
||||
while i < count {
|
||||
log "Sending Message";
|
||||
send(ch, message);
|
||||
i = i + 1;
|
||||
}
|
||||
log "Ending test00_start";
|
||||
}
|
||||
|
||||
@ -19,7 +26,7 @@ fn test00() {
|
||||
log "Creating tasks";
|
||||
|
||||
let po = comm::mk_port();
|
||||
let ch = po.mk_chan();
|
||||
let ch = po.mk_chan2();
|
||||
|
||||
let i: int = 0;
|
||||
|
||||
@ -27,7 +34,7 @@ fn test00() {
|
||||
let tasks: [task] = ~[];
|
||||
while i < number_of_tasks {
|
||||
tasks +=
|
||||
~[spawn test00_start(ch.unsafe_ptr(), i, number_of_messages)];
|
||||
[spawn test00_start(ch.unsafe_ptr(), i, number_of_messages)];
|
||||
i = i + 1;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
use std;
|
||||
import std::comm;
|
||||
import std::comm::send;
|
||||
|
||||
fn main() { test00(); }
|
||||
|
||||
@ -7,11 +8,11 @@ fn test00() {
|
||||
let r: int = 0;
|
||||
let sum: int = 0;
|
||||
let p = comm::mk_port();
|
||||
let c = p.mk_chan();
|
||||
c.send(1);
|
||||
c.send(2);
|
||||
c.send(3);
|
||||
c.send(4);
|
||||
let c = p.mk_chan2();
|
||||
send(c, 1);
|
||||
send(c, 2);
|
||||
send(c, 3);
|
||||
send(c, 4);
|
||||
r = p.recv();
|
||||
sum += r;
|
||||
log r;
|
||||
@ -24,10 +25,10 @@ fn test00() {
|
||||
r = p.recv();
|
||||
sum += r;
|
||||
log r;
|
||||
c.send(5);
|
||||
c.send(6);
|
||||
c.send(7);
|
||||
c.send(8);
|
||||
send(c, 5);
|
||||
send(c, 6);
|
||||
send(c, 7);
|
||||
send(c, 8);
|
||||
r = p.recv();
|
||||
sum += r;
|
||||
log r;
|
||||
|
Loading…
x
Reference in New Issue
Block a user