diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 5a2fc2298ae..dc379cec21b 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -379,7 +379,7 @@ pub mod reader { f() } - fn read_struct(&self, name: &str, f: fn() -> T) -> T { + fn read_struct(&self, name: &str, _len: uint, f: fn() -> T) -> T { debug!("read_struct(name=%s)", name); f() } @@ -658,7 +658,7 @@ pub mod writer { } fn emit_rec(&self, f: fn()) { f() } - fn emit_struct(&self, _name: &str, f: fn()) { f() } + fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { f() } fn emit_field(&self, name: &str, _idx: uint, f: fn()) { self._emit_label(name); f() diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 9a1d7b4a81e..0dea73981db 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -157,7 +157,7 @@ pub impl Encoder: serialize::Encoder { f(); self.wr.write_char('}'); } - fn emit_struct(&self, _name: &str, f: fn()) { + fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { self.wr.write_char('{'); f(); self.wr.write_char('}'); @@ -270,7 +270,7 @@ pub impl PrettyEncoder: serialize::Encoder { self.indent -= 2; self.wr.write_char('}'); } - fn emit_struct(&self, _name: &str, f: fn()) { + fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { self.emit_rec(f) } fn emit_field(&self, name: &str, idx: uint, f: fn()) { @@ -870,7 +870,7 @@ pub impl Decoder: serialize::Decoder { move value } - fn read_struct(&self, _name: &str, f: fn() -> T) -> T { + fn read_struct(&self, _name: &str, _len: uint, f: fn() -> T) -> T { debug!("read_struct()"); let value = f(); self.pop(); diff --git a/src/libstd/prettyprint.rs b/src/libstd/prettyprint.rs index 87699a9c894..d07c29d624c 100644 --- a/src/libstd/prettyprint.rs +++ b/src/libstd/prettyprint.rs @@ -162,7 +162,7 @@ pub impl Serializer: serialize::Encoder { self.wr.write_str(~"}"); } - fn emit_struct(&self, name: &str, f: fn()) { + fn emit_struct(&self, name: &str, _len: uint, f: fn()) { self.wr.write_str(fmt!("%s {", name)); f(); self.wr.write_str(~"}"); diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index aa4ed82bbe9..708df015dae 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -58,7 +58,7 @@ pub trait Encoder { fn emit_vec_elt(&self, idx: uint, f: fn()); fn emit_rec(&self, f: fn()); - fn emit_struct(&self, name: &str, 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_tup(&self, len: uint, f: fn()); @@ -99,7 +99,7 @@ pub trait Decoder { fn read_vec_elt(&self, idx: uint, f: fn() -> T) -> T; fn read_rec(&self, f: fn() -> T) -> T; - fn read_struct(&self, name: &str, f: fn() -> T) -> T; + fn read_struct(&self, name: &str, _len: uint, f: fn() -> T) -> T; fn read_field(&self, name: &str, idx: uint, f: fn() -> T) -> T; fn read_tup(&self, sz: uint, f: fn() -> T) -> T; diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs index 2b3fefd6e51..4afd2e1f7f8 100644 --- a/src/libsyntax/ext/auto_encode.rs +++ b/src/libsyntax/ext/auto_encode.rs @@ -25,7 +25,7 @@ would generate two implementations like: impl node_id: Encodable { fn encode(s: &S) { - do s.emit_struct("Node") { + do s.emit_struct("Node", 1) { s.emit_field("id", 0, || s.emit_uint(self)) } } @@ -33,7 +33,7 @@ would generate two implementations like: impl node_id: Decodable { static fn decode(d: &D) -> Node { - do d.read_struct("Node") { + do d.read_struct("Node", 1) { Node { id: d.read_field(~"x", 0, || decode(d)) } @@ -709,6 +709,7 @@ fn mk_struct_ser_impl( ), ~[ cx.lit_str(span, @cx.str_of(ident)), + cx.lit_uint(span, vec::len(fields)), cx.lambda_stmts(span, fields), ] ); @@ -735,6 +736,7 @@ fn mk_struct_deser_impl( ), ~[ cx.lit_str(span, @cx.str_of(ident)), + cx.lit_uint(span, vec::len(fields)), cx.lambda_expr( cx.expr( span,