diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2013-04-09 19:41:20 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2013-04-10 16:08:22 -0700 |
| commit | 419f6acf0e609c18c6df5ee2ca8ed9cb6206bbfe (patch) | |
| tree | fa6554641f1a01209753dfe41e57e6251763479e /src/libstd | |
| parent | 97cc571358c3ac1bc3d562ac60c39c67cda3678d (diff) | |
| download | rust-419f6acf0e609c18c6df5ee2ca8ed9cb6206bbfe.tar.gz rust-419f6acf0e609c18c6df5ee2ca8ed9cb6206bbfe.zip | |
std: rename {read,emit}_field to {read,emit}_struct_field
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/ebml.rs | 20 | ||||
| -rw-r--r-- | src/libstd/json.rs | 50 | ||||
| -rw-r--r-- | src/libstd/serialize.rs | 16 |
3 files changed, 81 insertions, 5 deletions
diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 3afc49d40ad..28933d553e6 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -340,8 +340,18 @@ pub mod reader { f() } + #[cfg(stage0)] fn read_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T { - debug!("read_field(name=%s, idx=%u)", name, idx); + debug!("read_field(name=%?, idx=%u)", name, idx); + self._check_label(name); + f() + } + + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn read_struct_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T { + debug!("read_struct_field(name=%?, idx=%u)", name, idx); self._check_label(name); f() } @@ -614,10 +624,18 @@ pub mod writer { fn emit_enum_variant_arg(&self, _idx: uint, f: &fn()) { f() } fn emit_struct(&self, _name: &str, _len: uint, f: &fn()) { f() } + #[cfg(stage0)] fn emit_field(&self, name: &str, _idx: uint, f: &fn()) { self._emit_label(name); f() } + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn emit_struct_field(&self, name: &str, _idx: uint, f: &fn()) { + self._emit_label(name); + f() + } fn emit_option(&self, f: &fn()) { self.emit_enum("Option", f); diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 3714adb3055..4b5e1f14229 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -135,12 +135,22 @@ impl serialize::Encoder for Encoder { f(); self.wr.write_char('}'); } + #[cfg(stage0)] fn emit_field(&self, name: &str, idx: uint, f: &fn()) { if idx != 0 { self.wr.write_char(','); } self.wr.write_str(escape_str(name)); self.wr.write_char(':'); f(); } + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) { + if idx != 0 { self.wr.write_char(','); } + self.wr.write_str(escape_str(name)); + self.wr.write_char(':'); + f(); + } fn emit_option(&self, f: &fn()) { f(); } fn emit_option_none(&self) { self.emit_nil(); } @@ -254,6 +264,7 @@ impl serialize::Encoder for PrettyEncoder { self.wr.write_char('}'); } } + #[cfg(stage0)] fn emit_field(&self, name: &str, idx: uint, f: &fn()) { if idx == 0 { self.wr.write_char('\n'); @@ -265,6 +276,20 @@ impl serialize::Encoder for PrettyEncoder { self.wr.write_str(": "); f(); } + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) { + if idx == 0 { + self.wr.write_char('\n'); + } else { + self.wr.write_str(",\n"); + } + self.wr.write_str(spaces(self.indent)); + self.wr.write_str(escape_str(name)); + self.wr.write_str(": "); + f(); + } fn emit_option(&self, f: &fn()) { f(); } fn emit_option_none(&self) { self.emit_nil(); } @@ -834,8 +859,31 @@ impl serialize::Decoder for Decoder { value } + #[cfg(stage0)] fn read_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T { - debug!("read_field(%s, idx=%u)", name, idx); + debug!("read_field(name=%?, idx=%u)", name, idx); + match self.stack.pop() { + Object(obj) => { + let mut obj = obj; + let value = match obj.pop(&name.to_owned()) { + None => fail!(fmt!("no such field: %s", name)), + Some(json) => { + self.stack.push(json); + f() + } + }; + self.stack.push(Object(obj)); + value + } + value => fail!(fmt!("not an object: %?", value)) + } + } + + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn read_struct_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T { + debug!("read_struct_field(name=%?, idx=%u)", name, idx); match self.stack.pop() { Object(obj) => { let mut obj = obj; diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index a49f43d485b..cc3a1ec0289 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -48,8 +48,13 @@ pub trait Encoder { fn emit_enum_variant(&self, v_name: &str, v_id: uint, sz: uint, f: &fn()); fn emit_enum_variant_arg(&self, idx: uint, f: &fn()); - fn emit_struct(&self, name: &str, _len: uint, f: &fn()); + fn emit_struct(&self, name: &str, len: uint, f: &fn()); + #[cfg(stage0)] fn emit_field(&self, f_name: &str, f_idx: uint, f: &fn()); + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn emit_struct_field(&self, f_name: &str, f_idx: uint, f: &fn()); // Specialized types: fn emit_option(&self, f: &fn()); @@ -89,8 +94,13 @@ pub trait Decoder { fn read_enum_variant<T>(&self, names: &[&str], f: &fn(uint) -> T) -> T; fn read_enum_variant_arg<T>(&self, idx: 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_struct<T>(&self, s_name: &str, len: uint, f: &fn() -> T) -> T; + #[cfg(stage0)] + fn read_field<T>(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T; + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn read_struct_field<T>(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T; // Specialized types: fn read_option<T>(&self, f: &fn(bool) -> T) -> T; |
