Skip to content

Commit 7b03832

Browse files
committedJul 6, 2012
Updating tests to use pipes.
1 parent fa41346 commit 7b03832

File tree

8 files changed

+71
-487
lines changed

8 files changed

+71
-487
lines changed
 

‎src/libcore/future.rs

+9
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,15 @@ fn with<A,B>(future: future<A>, blk: fn(A) -> B) -> B {
138138
}
139139

140140
// The pipe protocol, generated by pipec
141+
/*
142+
proto! future_pipe {
143+
waiting:recv<T:send> {
144+
completed(T) -> terminated
145+
}
146+
147+
terminated { }
148+
}
149+
*/
141150
mod future_pipe {
142151
fn init<T: send>() -> (client::waiting<T>, server::waiting<T>) {
143152
{ let (s, c) = pipes::entangle(); (c, s) }

‎src/libsyntax/ext/pipes/parse_proto.rs

+36-22
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ impl proto_parser for parser {
1010
fn parse_proto(id: ident) -> protocol {
1111
let proto = protocol(id);
1212

13-
self.expect(token::LBRACE);
14-
15-
while self.token != token::RBRACE {
16-
self.parse_state(proto);
17-
}
13+
self.parse_unspanned_seq(token::LBRACE,
14+
token::RBRACE,
15+
{sep: none, trailing_sep_allowed: false},
16+
|self| self.parse_state(proto));
1817

1918
ret proto;
2019
}
@@ -35,29 +34,44 @@ impl proto_parser for parser {
3534
_ { fail }
3635
};
3736

38-
let state = proto.add_state(id, dir);
39-
// TODO: add typarams too.
37+
let typarms = if self.token == token::LT {
38+
self.parse_ty_params()
39+
}
40+
else { ~[] };
41+
42+
let state = proto.add_state_poly(id, dir, typarms);
4043

41-
self.expect(token::LBRACE);
44+
// parse the messages
45+
self.parse_unspanned_seq(
46+
token::LBRACE, token::RBRACE,
47+
{sep: some(token::COMMA), trailing_sep_allowed: true},
48+
|self| {
49+
let mname = self.parse_ident();
4250

43-
while self.token != token::RBRACE {
44-
let mname = self.parse_ident();
51+
let args = if self.token == token::LPAREN {
52+
self.parse_unspanned_seq(token::LPAREN,
53+
token::RPAREN,
54+
{sep: some(token::COMMA),
55+
trailing_sep_allowed: true},
56+
|p| p.parse_ty(false))
57+
}
58+
else { ~[] };
4559

46-
// TODO: parse data
60+
self.expect(token::RARROW);
4761

48-
self.expect(token::RARROW);
62+
let next = self.parse_ident();
4963

50-
let next = self.parse_ident();
51-
// TODO: parse next types
64+
let ntys = if self.token == token::LT {
65+
self.parse_unspanned_seq(token::LT,
66+
token::GT,
67+
{sep: some(token::COMMA),
68+
trailing_sep_allowed: true},
69+
|p| p.parse_ty(false))
70+
}
71+
else { ~[] };
5272

53-
state.add_message(mname, ~[], next, ~[]);
73+
state.add_message(mname, args, next, ntys);
5474

55-
alt copy self.token {
56-
token::COMMA { self.bump() }
57-
token::RBRACE { }
58-
_ { fail }
59-
}
60-
}
61-
self.bump();
75+
});
6276
}
6377
}

‎src/test/bench/msgsend-ring-contracts.rs renamed to ‎src/test/bench/msgsend-ring-pipes.rs

+7-32
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// that things will look really good once we get that lock out of the
55
// message path.
66

7-
// This version uses semi-automatically compiled channel contracts.
7+
// This version uses automatically compiled channel contracts.
88

99
// xfail-pretty
1010

@@ -13,40 +13,15 @@ import future::future;
1313
use std;
1414
import std::time;
1515

16-
import ring::server::recv;
17-
18-
// This module was generated by the pipe compiler.
19-
mod ring {
20-
fn init() -> (client::num, server::num) { pipes::entangle() }
21-
enum num { num(uint, server::num), }
22-
mod client {
23-
fn num(-pipe: num, x_0: uint) -> num {
24-
let (c, s) = pipes::entangle();
25-
let message = ring::num(x_0, s);
26-
pipes::send(pipe, message);
27-
c
28-
}
29-
type num = pipes::send_packet<ring::num>;
30-
}
31-
mod server {
32-
impl recv for num {
33-
fn recv() -> extern fn(-num) -> ring::num {
34-
fn recv(-pipe: num) -> ring::num {
35-
option::unwrap(pipes::recv(pipe))
36-
}
37-
recv
38-
}
39-
}
40-
type num = pipes::recv_packet<ring::num>;
16+
import pipes::recv;
17+
18+
proto! ring {
19+
num:send {
20+
num(uint) -> num
4121
}
4222
}
4323

4424
fn macros() {
45-
#macro[
46-
[#recv[chan],
47-
chan.recv()(chan)]
48-
];
49-
5025
#macro[
5126
[#move[x],
5227
unsafe { let y <- *ptr::addr_of(x); y }]
@@ -68,7 +43,7 @@ fn thread_ring(i: uint,
6843
num_port2 <-> num_port;
6944
num_chan = some(ring::client::num(option::unwrap(num_chan2), i * j));
7045
let port = option::unwrap(num_port2);
71-
alt (#recv(port)) {
46+
alt (option::unwrap(recv(port))) {
7247
ring::num(_n, p) {
7348
//log(error, _n);
7449
num_port = some(#move(p));

‎src/test/run-pass/pipe-manual-1.rs

-110
This file was deleted.

‎src/test/run-pass/pipe-manual-2.rs

-93
This file was deleted.

‎src/test/run-pass/pipe-manual-3.rs

-129
This file was deleted.

‎src/test/run-pass/pipe-select.rs

+10-60
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,22 @@
1+
// xfail-pretty
2+
13
use std;
24
import std::timer::sleep;
35
import std::uv;
46

57
import pipes::{recv, select};
68

7-
// Compiled by pipec
8-
mod oneshot {
9-
fn init() -> (client::waiting, server::waiting) { pipes::entangle() }
10-
enum waiting { signal(server::signaled), }
11-
enum signaled { }
12-
mod client {
13-
fn signal(-pipe: waiting) -> signaled {
14-
let (c, s) = pipes::entangle();
15-
let message = oneshot::signal(s);
16-
pipes::send(pipe, message);
17-
c
18-
}
19-
type waiting = pipes::send_packet<oneshot::waiting>;
20-
type signaled = pipes::send_packet<oneshot::signaled>;
21-
}
22-
mod server {
23-
impl recv for waiting {
24-
fn recv() -> extern fn(-waiting) -> oneshot::waiting {
25-
fn recv(-pipe: waiting) -> oneshot::waiting {
26-
option::unwrap(pipes::recv(pipe))
27-
}
28-
recv
29-
}
30-
}
31-
type waiting = pipes::recv_packet<oneshot::waiting>;
32-
impl recv for signaled {
33-
fn recv() -> extern fn(-signaled) -> oneshot::signaled {
34-
fn recv(-pipe: signaled) -> oneshot::signaled {
35-
option::unwrap(pipes::recv(pipe))
36-
}
37-
recv
38-
}
39-
}
40-
type signaled = pipes::recv_packet<oneshot::signaled>;
9+
proto! oneshot {
10+
waiting:send {
11+
signal -> signaled
4112
}
13+
14+
signaled:send { }
4215
}
4316

44-
mod stream {
45-
fn init<T: send>() -> (client::stream<T>, server::stream<T>) {
46-
pipes::entangle()
47-
}
48-
enum stream<T: send> { send(T, server::stream<T>), }
49-
mod client {
50-
fn send<T: send>(+pipe: stream<T>, +x_0: T) -> stream<T> {
51-
{
52-
let (c, s) = pipes::entangle();
53-
let message = stream::send(x_0, s);
54-
pipes::send(pipe, message);
55-
c
56-
}
57-
}
58-
type stream<T: send> = pipes::send_packet<stream::stream<T>>;
59-
}
60-
mod server {
61-
impl recv<T: send> for stream<T> {
62-
fn recv() -> extern fn(+stream<T>) -> stream::stream<T> {
63-
fn recv<T: send>(+pipe: stream<T>) -> stream::stream<T> {
64-
option::unwrap(pipes::recv(pipe))
65-
}
66-
recv
67-
}
68-
}
69-
type stream<T: send> = pipes::recv_packet<stream::stream<T>>;
17+
proto! stream {
18+
stream:send<T:send> {
19+
send(T) -> stream<T>
7020
}
7121
}
7222

‎src/test/run-pass/pipe-sleep.rs

+9-41
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,22 @@
1+
// xfail-pretty
2+
13
use std;
24
import std::timer::sleep;
35
import std::uv;
6+
import pipes::recv;
47

5-
// Compiled by pipec
6-
mod oneshot {
7-
fn init() -> (client::waiting, server::waiting) { pipes::entangle() }
8-
enum waiting { signal(server::signaled), }
9-
enum signaled { }
10-
mod client {
11-
fn signal(-pipe: waiting) -> signaled {
12-
let (c, s) = pipes::entangle();
13-
let message = oneshot::signal(s);
14-
pipes::send(pipe, message);
15-
c
16-
}
17-
type waiting = pipes::send_packet<oneshot::waiting>;
18-
type signaled = pipes::send_packet<oneshot::signaled>;
19-
}
20-
mod server {
21-
impl recv for waiting {
22-
fn recv() -> extern fn(-waiting) -> oneshot::waiting {
23-
fn recv(-pipe: waiting) -> oneshot::waiting {
24-
option::unwrap(pipes::recv(pipe))
25-
}
26-
recv
27-
}
28-
}
29-
type waiting = pipes::recv_packet<oneshot::waiting>;
30-
impl recv for signaled {
31-
fn recv() -> extern fn(-signaled) -> oneshot::signaled {
32-
fn recv(-pipe: signaled) -> oneshot::signaled {
33-
option::unwrap(pipes::recv(pipe))
34-
}
35-
recv
36-
}
37-
}
38-
type signaled = pipes::recv_packet<oneshot::signaled>;
8+
proto! oneshot {
9+
waiting:send {
10+
signal -> signaled
3911
}
12+
13+
signaled:send { }
4014
}
4115

4216
fn main() {
4317
import oneshot::client::*;
44-
import oneshot::server::recv;
45-
46-
#macro[
47-
[#recv[chan],
48-
chan.recv()(chan)]
49-
];
5018

51-
let c = pipes::spawn_service(oneshot::init, |p| { #recv(p); });
19+
let c = pipes::spawn_service(oneshot::init, |p| { recv(p); });
5220

5321
let iotask = uv::global_loop::get();
5422
sleep(iotask, 5000);

0 commit comments

Comments
 (0)
Please sign in to comment.