File tree Expand file tree Collapse file tree 3 files changed +34
-5
lines changed Expand file tree Collapse file tree 3 files changed +34
-5
lines changed Original file line number Diff line number Diff 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) ]
143144type 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
148157struct 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) ]
233243fn 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) ]
249278pub fn packet < T : Owned > ( ) -> * Packet < T > {
250279 let b = unibuffer ( ) ;
Original file line number Diff line number Diff 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(
Original file line number Diff line number Diff 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 > ( ) ,
You can’t perform that action at this time.
0 commit comments