File tree 2 files changed +44
-9
lines changed 2 files changed +44
-9
lines changed Original file line number Diff line number Diff line change @@ -143,14 +143,9 @@ pub fn BufferHeader() -> BufferHeader {
143
143
// This is for protocols to associate extra data to thread around.
144
144
#[ doc( hidden) ]
145
145
#[ cfg( stage0) ]
146
- type Buffer < T : Owned > = {
147
- header : BufferHeader ,
148
- data : T ,
149
- } ;
150
- #[ doc( hidden) ]
151
146
#[ cfg( stage1) ]
147
+ type Buffer < T > = { header : BufferHeader , data : T } ;
152
148
#[ cfg( stage2) ]
153
- #[ cfg( stage3) ]
154
149
pub struct Buffer < T > {
155
150
header : BufferHeader ,
156
151
data : T ,
@@ -247,7 +242,6 @@ pub fn mk_packet<T: Owned>() -> Packet<T> {
247
242
payload : None ,
248
243
}
249
244
}
250
-
251
245
#[ doc( hidden) ]
252
246
#[ cfg( stage0) ]
253
247
fn unibuffer < T : Owned > ( ) -> ~Buffer < Packet < T > > {
@@ -264,10 +258,23 @@ fn unibuffer<T: Owned>() -> ~Buffer<Packet<T>> {
264
258
}
265
259
move b
266
260
}
267
- #[ doc( hidden) ]
268
261
#[ cfg( stage1) ]
262
+ fn unibuffer < T > ( ) -> ~Buffer < Packet < T > > {
263
+ let b = ~{
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
+ #[ doc( hidden) ]
269
277
#[ cfg( stage2) ]
270
- #[ cfg( stage3) ]
271
278
fn unibuffer < T > ( ) -> ~Buffer < Packet < T > > {
272
279
let b = ~Buffer {
273
280
header : BufferHeader ( ) ,
Original file line number Diff line number Diff line change @@ -355,6 +355,34 @@ pub impl protocol: gen_init {
355
355
}))
356
356
}
357
357
358
+ #[cfg(stage0)]
359
+ fn gen_init_bounded(ext_cx: ext_ctxt) -> @ast::expr {
360
+ debug!(" gen_init_bounded");
361
+ let buffer_fields = self.gen_buffer_init(ext_cx);
362
+ let buffer = quote_expr!(~{
363
+ header: ::pipes::BufferHeader(),
364
+ data: $buffer_fields,
365
+ });
366
+
367
+ let entangle_body = ext_cx.block_expr(
368
+ ext_cx.block(
369
+ self.states.map_to_vec(
370
+ |s| ext_cx.parse_stmt(
371
+ fmt!(" data. %s. set_buffer_( buffer) ",
372
+ s.name))),
373
+ ext_cx.parse_expr(
374
+ fmt!(" :: ptr:: addr_of( & ( data. %s) ) ",
375
+ self.states[0].name))));
376
+
377
+ quote_expr!({
378
+ let buffer = $buffer;
379
+ do ::pipes::entangle_buffer(move buffer) |buffer, data| {
380
+ $entangle_body
381
+ }
382
+ })
383
+ }
384
+ #[cfg(stage1)]
385
+ #[cfg(stage2)]
358
386
fn gen_init_bounded(ext_cx: ext_ctxt) -> @ast::expr {
359
387
debug!(" gen_init_bounded");
360
388
let buffer_fields = self.gen_buffer_init(ext_cx);
You can’t perform that action at this time.
0 commit comments