diff options
Diffstat (limited to 'src/libstd/ebml.rs')
| -rw-r--r-- | src/libstd/ebml.rs | 102 |
1 files changed, 85 insertions, 17 deletions
diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index b117c8d9882..4a3447700bc 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -335,18 +335,18 @@ pub mod reader { f() } - fn read_seq<T>(&self, f: &fn(uint) -> T) -> T { - debug!("read_seq()"); - do self.push_doc(self.next_doc(EsVec)) { - let len = self._next_uint(EsVecLen); - debug!(" len=%u", len); - f(len) + fn read_enum_struct_variant<T>(&self, _names: &[&str], f: &fn(uint) -> T) -> T { + debug!("read_enum_struct_variant()"); + let idx = self._next_uint(EsEnumVid); + debug!(" idx=%u", idx); + do self.push_doc(self.next_doc(EsEnumBody)) { + f(idx) } } - fn read_seq_elt<T>(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_seq_elt(idx=%u)", idx); - self.push_doc(self.next_doc(EsVecElt), f) + fn read_enum_struct_variant_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T { + debug!("read_enum_struct_variant_arg(name=%?, idx=%u)", name, idx); + f() } fn read_struct<T>(&self, name: &str, _len: uint, f: &fn() -> T) -> T { @@ -354,12 +354,42 @@ 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() + } + + fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T { + debug!("read_tuple()"); + self.read_seq(f) + } + + fn read_tuple_arg<T>(&self, idx: uint, f: &fn() -> T) -> T { + debug!("read_tuple_arg(idx=%u)", idx); + self.read_seq_elt(idx, f) + } + + fn read_tuple_struct<T>(&self, name: &str, f: &fn(uint) -> T) -> T { + debug!("read_tuple_struct(name=%?)", name); + self.read_tuple(f) + } + + fn read_tuple_struct_arg<T>(&self, idx: uint, f: &fn() -> T) -> T { + debug!("read_tuple_struct_arg(idx=%u)", idx); + self.read_tuple_arg(idx, f) + } + fn read_option<T>(&self, f: &fn(bool) -> T) -> T { debug!("read_option()"); do self.read_enum("Option") || { @@ -373,6 +403,20 @@ pub mod reader { } } + fn read_seq<T>(&self, f: &fn(uint) -> T) -> T { + debug!("read_seq()"); + do self.push_doc(self.next_doc(EsVec)) { + let len = self._next_uint(EsVecLen); + debug!(" len=%u", len); + f(len) + } + } + + fn read_seq_elt<T>(&self, idx: uint, f: &fn() -> T) -> T { + debug!("read_seq_elt(idx=%u)", idx); + self.push_doc(self.next_doc(EsVecElt), f) + } + fn read_map<T>(&self, _f: &fn(uint) -> T) -> T { debug!("read_map()"); fail!(~"read_map is unimplemented"); @@ -606,29 +650,42 @@ pub mod writer { self._emit_label(name); self.wr_tag(EsEnum as uint, f) } + fn emit_enum_variant(&self, _v_name: &str, v_id: uint, _cnt: uint, f: &fn()) { self._emit_tagged_uint(EsEnumVid, v_id); self.wr_tag(EsEnumBody as uint, f) } + fn emit_enum_variant_arg(&self, _idx: uint, f: &fn()) { f() } - fn emit_seq(&self, len: uint, f: &fn()) { - do self.wr_tag(EsVec as uint) { - self._emit_tagged_uint(EsVecLen, len); - f() - } + fn emit_enum_struct_variant(&self, v_name: &str, v_id: uint, cnt: uint, f: &fn()) { + self.emit_enum_variant(v_name, v_id, cnt, f) } - fn emit_seq_elt(&self, _idx: uint, f: &fn()) { - self.wr_tag(EsVecElt as uint, f) + fn emit_enum_struct_variant_field(&self, _f_name: &str, idx: uint, f: &fn()) { + self.emit_enum_variant_arg(idx, 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_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) } + fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } + + fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) } + fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } fn emit_option(&self, f: &fn()) { self.emit_enum("Option", f); @@ -640,6 +697,17 @@ pub mod writer { self.emit_enum_variant("Some", 1, 1, f) } + fn emit_seq(&self, len: uint, f: &fn()) { + do self.wr_tag(EsVec as uint) { + self._emit_tagged_uint(EsVecLen, len); + f() + } + } + + fn emit_seq_elt(&self, _idx: uint, f: &fn()) { + self.wr_tag(EsVecElt as uint, f) + } + fn emit_map(&self, _len: uint, _f: &fn()) { fail!(~"emit_map is unimplemented"); } |
