From 5085eb3c288c2611bb61f3ee46a187d3ca46ca64 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Thu, 24 Jan 2013 11:37:36 -0800 Subject: [PATCH] Convert pipes::Buffer into a struct --- src/libcore/pipes.rs | 29 ++++++++++++++++++++++ src/libsyntax/ext/pipes/pipec.rs | 8 +++--- src/test/run-pass/pipe-pingpong-bounded.rs | 2 +- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index c7cd098394c..7ccba553ee7 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -140,10 +140,19 @@ pub fn BufferHeader() -> BufferHeader{ // This is for protocols to associate extra data to thread around. #[doc(hidden)] +#[cfg(stage0)] type Buffer = { header: BufferHeader, data: T, }; +#[doc(hidden)] +#[cfg(stage1)] +#[cfg(stage2)] +#[cfg(stage3)] +pub struct Buffer { + header: BufferHeader, + data: T, +} struct PacketHeader { mut state: State, @@ -230,6 +239,7 @@ pub fn mk_packet() -> Packet { } #[doc(hidden)] +#[cfg(stage0)] fn unibuffer() -> ~Buffer> { let b = ~{ header: BufferHeader(), @@ -245,6 +255,25 @@ fn unibuffer() -> ~Buffer> { move b } +#[doc(hidden)] +#[cfg(stage1)] +#[cfg(stage2)] +#[cfg(stage3)] +fn unibuffer() -> ~Buffer> { + let b = ~Buffer { + header: BufferHeader(), + data: Packet { + header: PacketHeader(), + payload: None, + } + }; + + unsafe { + b.data.header.buffer = reinterpret_cast(&b); + } + move b +} + #[doc(hidden)] pub fn packet() -> *Packet { let b = unibuffer(); diff --git a/src/libsyntax/ext/pipes/pipec.rs b/src/libsyntax/ext/pipes/pipec.rs index 6c12736b7ea..e53057cb312 100644 --- a/src/libsyntax/ext/pipes/pipec.rs +++ b/src/libsyntax/ext/pipes/pipec.rs @@ -357,10 +357,10 @@ impl protocol: gen_init { fn gen_init_bounded(ext_cx: ext_ctxt) -> @ast::expr { debug!("gen_init_bounded"); let buffer_fields = self.gen_buffer_init(ext_cx); - let buffer = quote_expr!( - ~{header: ::pipes::BufferHeader(), - data: $buffer_fields} - ); + let buffer = quote_expr!(~::pipes::Buffer { + header: ::pipes::BufferHeader(), + data: $buffer_fields, + }); let entangle_body = ext_cx.block_expr( ext_cx.block( diff --git a/src/test/run-pass/pipe-pingpong-bounded.rs b/src/test/run-pass/pipe-pingpong-bounded.rs index 774e3544d89..f44c54d38e4 100644 --- a/src/test/run-pass/pipe-pingpong-bounded.rs +++ b/src/test/run-pass/pipe-pingpong-bounded.rs @@ -27,7 +27,7 @@ mod pingpong { }; pub fn init() -> (client::ping, server::ping) { - let buffer = ~{ + let buffer = ~Buffer { header: BufferHeader(), data: { ping: mk_packet::(),