Skip to content

Commit e22aa02

Browse files
committed
core/syntax: Add transitional code for pipes
1 parent e08a805 commit e22aa02

File tree

2 files changed

+44
-9
lines changed

2 files changed

+44
-9
lines changed

src/libcore/pipes.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,9 @@ pub fn BufferHeader() -> BufferHeader {
143143
// This is for protocols to associate extra data to thread around.
144144
#[doc(hidden)]
145145
#[cfg(stage0)]
146-
type Buffer<T: Owned> = {
147-
header: BufferHeader,
148-
data: T,
149-
};
150-
#[doc(hidden)]
151146
#[cfg(stage1)]
147+
type Buffer<T> = { header: BufferHeader, data: T };
152148
#[cfg(stage2)]
153-
#[cfg(stage3)]
154149
pub struct Buffer<T> {
155150
header: BufferHeader,
156151
data: T,
@@ -247,7 +242,6 @@ pub fn mk_packet<T: Owned>() -> Packet<T> {
247242
payload: None,
248243
}
249244
}
250-
251245
#[doc(hidden)]
252246
#[cfg(stage0)]
253247
fn unibuffer<T: Owned>() -> ~Buffer<Packet<T>> {
@@ -264,10 +258,23 @@ fn unibuffer<T: Owned>() -> ~Buffer<Packet<T>> {
264258
}
265259
move b
266260
}
267-
#[doc(hidden)]
268261
#[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)]
269277
#[cfg(stage2)]
270-
#[cfg(stage3)]
271278
fn unibuffer<T>() -> ~Buffer<Packet<T>> {
272279
let b = ~Buffer {
273280
header: BufferHeader(),

src/libsyntax/ext/pipes/pipec.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,34 @@ pub impl protocol: gen_init {
355355
}))
356356
}
357357
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)]
358386
fn gen_init_bounded(ext_cx: ext_ctxt) -> @ast::expr {
359387
debug!("gen_init_bounded");
360388
let buffer_fields = self.gen_buffer_init(ext_cx);

0 commit comments

Comments
 (0)