1
Fork 0

Add cfg attrs to handle auto_encode transition

This commit is contained in:
Brian Anderson 2013-01-14 13:17:20 -08:00
parent fc582bcfce
commit f1d0478002
4 changed files with 58 additions and 0 deletions

View file

@ -379,6 +379,14 @@ pub mod reader {
f() f()
} }
#[cfg(stage0)]
fn read_struct<T>(&self, name: &str, f: fn() -> T) -> T {
debug!("read_struct(name=%s)", name);
f()
}
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn read_struct<T>(&self, name: &str, _len: uint, f: fn() -> T) -> T { fn read_struct<T>(&self, name: &str, _len: uint, f: fn() -> T) -> T {
debug!("read_struct(name=%s)", name); debug!("read_struct(name=%s)", name);
f() f()
@ -658,6 +666,11 @@ pub mod writer {
} }
fn emit_rec(&self, f: fn()) { f() } fn emit_rec(&self, f: fn()) { f() }
#[cfg(stage0)]
fn emit_struct(&self, _name: &str, f: fn()) { f() }
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { f() } fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { f() }
fn emit_field(&self, name: &str, _idx: uint, f: fn()) { fn emit_field(&self, name: &str, _idx: uint, f: fn()) {
self._emit_label(name); self._emit_label(name);

View file

@ -157,6 +157,15 @@ pub impl Encoder: serialize::Encoder {
f(); f();
self.wr.write_char('}'); self.wr.write_char('}');
} }
#[cfg(stage0)]
fn emit_struct(&self, _name: &str, f: fn()) {
self.wr.write_char('{');
f();
self.wr.write_char('}');
}
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { fn emit_struct(&self, _name: &str, _len: uint, f: fn()) {
self.wr.write_char('{'); self.wr.write_char('{');
f(); f();
@ -270,6 +279,13 @@ pub impl PrettyEncoder: serialize::Encoder {
self.indent -= 2; self.indent -= 2;
self.wr.write_char('}'); self.wr.write_char('}');
} }
#[cfg(stage0)]
fn emit_struct(&self, _name: &str, f: fn()) {
self.emit_rec(f)
}
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { fn emit_struct(&self, _name: &str, _len: uint, f: fn()) {
self.emit_rec(f) self.emit_rec(f)
} }
@ -870,6 +886,16 @@ pub impl Decoder: serialize::Decoder {
move value move value
} }
#[cfg(stage0)]
fn read_struct<T>(&self, _name: &str, f: fn() -> T) -> T {
debug!("read_struct()");
let value = f();
self.pop();
move value
}
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn read_struct<T>(&self, _name: &str, _len: uint, f: fn() -> T) -> T { fn read_struct<T>(&self, _name: &str, _len: uint, f: fn() -> T) -> T {
debug!("read_struct()"); debug!("read_struct()");
let value = f(); let value = f();

View file

@ -162,6 +162,15 @@ pub impl Serializer: serialize::Encoder {
self.wr.write_str(~"}"); self.wr.write_str(~"}");
} }
#[cfg(stage0)]
fn emit_struct(&self, name: &str, f: fn()) {
self.wr.write_str(fmt!("%s {", name));
f();
self.wr.write_str(~"}");
}
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn emit_struct(&self, name: &str, _len: uint, f: fn()) { fn emit_struct(&self, name: &str, _len: uint, f: fn()) {
self.wr.write_str(fmt!("%s {", name)); self.wr.write_str(fmt!("%s {", name));
f(); f();

View file

@ -58,6 +58,11 @@ pub trait Encoder {
fn emit_vec_elt(&self, idx: uint, f: fn()); fn emit_vec_elt(&self, idx: uint, f: fn());
fn emit_rec(&self, f: fn()); fn emit_rec(&self, f: fn());
#[cfg(stage0)]
fn emit_struct(&self, name: &str, f: fn());
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn emit_struct(&self, name: &str, _len: uint, f: fn()); fn emit_struct(&self, name: &str, _len: uint, f: fn());
fn emit_field(&self, f_name: &str, f_idx: uint, f: fn()); fn emit_field(&self, f_name: &str, f_idx: uint, f: fn());
@ -99,6 +104,11 @@ pub trait Decoder {
fn read_vec_elt<T>(&self, idx: uint, f: fn() -> T) -> T; fn read_vec_elt<T>(&self, idx: uint, f: fn() -> T) -> T;
fn read_rec<T>(&self, f: fn() -> T) -> T; fn read_rec<T>(&self, f: fn() -> T) -> T;
#[cfg(stage0)]
fn read_struct<T>(&self, name: &str, f: fn() -> T) -> T;
#[cfg(stage1)]
#[cfg(stage2)]
#[cfg(stage3)]
fn read_struct<T>(&self, name: &str, _len: uint, f: fn() -> T) -> T; fn read_struct<T>(&self, name: &str, _len: uint, f: fn() -> T) -> T;
fn read_field<T>(&self, name: &str, idx: uint, f: fn() -> T) -> T; fn read_field<T>(&self, name: &str, idx: uint, f: fn() -> T) -> T;