Move mode for lib comm, converted a few tests.

This commit is contained in:
Eric Holk 2011-08-10 14:38:49 -07:00
parent 39b16077bb
commit 871d1317e5
5 changed files with 29 additions and 24 deletions

View File

@ -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);
}
}

View File

@ -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;

View File

@ -21,4 +21,4 @@ fn test00() {
for t: task in tasks { task::join(t); }
log "Joined all task.";
}
}

View File

@ -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;
}

View File

@ -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;