diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-09-11 21:25:01 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-09-11 21:25:01 -0700 |
| commit | 8a8f200d102294cf1bd90cdacad995abccda7934 (patch) | |
| tree | 31e99a460697349c403fc5cf4809427303e14804 /src/libstd/ebml.rs | |
| parent | 02b41097e42082a306ca6dbbd79ee9a1d7d35348 (diff) | |
| download | rust-8a8f200d102294cf1bd90cdacad995abccda7934.tar.gz rust-8a8f200d102294cf1bd90cdacad995abccda7934.zip | |
Introduce auto adjustment table to subsume autoderef/autoref/borrowings.
Fixes #3261 Fixes #3443
Diffstat (limited to 'src/libstd/ebml.rs')
| -rw-r--r-- | src/libstd/ebml.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 1d70bfaf00a..d6b8c2f4908 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -314,6 +314,8 @@ enum EbmlSerializerTag { EsEnum, EsEnumVid, EsEnumBody, EsVec, EsVecLen, EsVecElt, + EsOpaque, + EsLabel // Used only when debugging } @@ -340,6 +342,14 @@ impl ebml::Writer: SerializerPriv { } } +impl ebml::Writer { + fn emit_opaque(f: fn()) { + do self.wr_tag(EsOpaque as uint) { + f() + } + } +} + impl ebml::Writer: serialization::Serializer { fn emit_nil() {} @@ -397,7 +407,7 @@ impl ebml::Writer: serialization::Serializer { } type EbmlDeserializer_ = {mut parent: ebml::Doc, - mut pos: uint}; + mut pos: uint}; enum EbmlDeserializer { EbmlDeserializer_(EbmlDeserializer_) @@ -462,6 +472,14 @@ priv impl EbmlDeserializer { } } +impl EbmlDeserializer { + fn read_opaque<R>(op: fn(ebml::Doc) -> R) -> R { + do self.push_doc(self.next_doc(EsOpaque)) { + op(copy self.parent) + } + } +} + impl EbmlDeserializer: serialization::Deserializer { fn read_nil() -> () { () } |
