about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-01-14 12:56:31 -0800
committerBrian Anderson <banderson@mozilla.com>2013-01-14 12:56:31 -0800
commitfc582bcfcedc5154b98b45bb5e41eddfcd3a1f74 (patch)
treebd42e7dac410c924c8f22db56536f7ce6f07df1b /src
parent76bcfe8025249c787cba04f2fb035f4915db0a36 (diff)
parent2b6c456bf648e5a7b408b550649d409378e39539 (diff)
downloadrust-fc582bcfcedc5154b98b45bb5e41eddfcd3a1f74.tar.gz
rust-fc582bcfcedc5154b98b45bb5e41eddfcd3a1f74.zip
Merge remote-tracking branch 'mneumann/f-serialize'
Diffstat (limited to 'src')
-rw-r--r--src/libstd/ebml.rs4
-rw-r--r--src/libstd/json.rs6
-rw-r--r--src/libstd/prettyprint.rs2
-rw-r--r--src/libstd/serialize.rs4
-rw-r--r--src/libsyntax/ext/auto_encode.rs6
5 files changed, 12 insertions, 10 deletions
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<T>(&self, name: &str, f: fn() -> T) -> T {
+        fn read_struct<T>(&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<T>(&self, _name: &str, f: fn() -> T) -> T {
+    fn read_struct<T>(&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<T>(&self, idx: uint, f: fn() -> T) -> T;
 
     fn read_rec<T>(&self, f: fn() -> T) -> T;
-    fn read_struct<T>(&self, name: &str, 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_tup<T>(&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<S: Encoder> node_id: Encodable<S> {
         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<D: Decoder> 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,