Skip to content

Commit 5085eb3

Browse files
committed
Convert pipes::Buffer into a struct
1 parent feab095 commit 5085eb3

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

src/libcore/pipes.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,19 @@ pub fn BufferHeader() -> BufferHeader{
140140

141141
// This is for protocols to associate extra data to thread around.
142142
#[doc(hidden)]
143+
#[cfg(stage0)]
143144
type Buffer<T: Owned> = {
144145
header: BufferHeader,
145146
data: T,
146147
};
148+
#[doc(hidden)]
149+
#[cfg(stage1)]
150+
#[cfg(stage2)]
151+
#[cfg(stage3)]
152+
pub struct Buffer<T: Owned> {
153+
header: BufferHeader,
154+
data: T,
155+
}
147156

148157
struct PacketHeader {
149158
mut state: State,
@@ -230,6 +239,7 @@ pub fn mk_packet<T: Owned>() -> Packet<T> {
230239
}
231240

232241
#[doc(hidden)]
242+
#[cfg(stage0)]
233243
fn unibuffer<T: Owned>() -> ~Buffer<Packet<T>> {
234244
let b = ~{
235245
header: BufferHeader(),
@@ -245,6 +255,25 @@ fn unibuffer<T: Owned>() -> ~Buffer<Packet<T>> {
245255
move b
246256
}
247257

258+
#[doc(hidden)]
259+
#[cfg(stage1)]
260+
#[cfg(stage2)]
261+
#[cfg(stage3)]
262+
fn unibuffer<T: Owned>() -> ~Buffer<Packet<T>> {
263+
let b = ~Buffer {
264+
header: BufferHeader(),
265+
data: Packet {
266+
header: PacketHeader(),
267+
payload: None,
268+
}
269+
};
270+
271+
unsafe {
272+
b.data.header.buffer = reinterpret_cast(&b);
273+
}
274+
move b
275+
}
276+
248277
#[doc(hidden)]
249278
pub fn packet<T: Owned>() -> *Packet<T> {
250279
let b = unibuffer();

src/libsyntax/ext/pipes/pipec.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -357,10 +357,10 @@ impl protocol: gen_init {
357357
fn gen_init_bounded(ext_cx: ext_ctxt) -> @ast::expr {
358358
debug!("gen_init_bounded");
359359
let buffer_fields = self.gen_buffer_init(ext_cx);
360-
let buffer = quote_expr!(
361-
~{header: ::pipes::BufferHeader(),
362-
data: $buffer_fields}
363-
);
360+
let buffer = quote_expr!(~::pipes::Buffer {
361+
header: ::pipes::BufferHeader(),
362+
data: $buffer_fields,
363+
});
364364
365365
let entangle_body = ext_cx.block_expr(
366366
ext_cx.block(

src/test/run-pass/pipe-pingpong-bounded.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ mod pingpong {
2727
};
2828

2929
pub fn init() -> (client::ping, server::ping) {
30-
let buffer = ~{
30+
let buffer = ~Buffer {
3131
header: BufferHeader(),
3232
data: {
3333
ping: mk_packet::<ping>(),

0 commit comments

Comments
 (0)