metadata: Bye bye EsLabel. No regrets.

For the reference, while it is designed to be selectively enabled,
it was essentially enabled throughout every snapshot and nightly
as far as I can tell. This makes the usefulness of `EsLabel` itself
questionable, as it was quite rare that `EsLabel` broke the build.
It had consumed about 20~30% of metadata (!) and so this should be
a huge win.
This commit is contained in:
Kang Seonghoon 2015-03-02 02:20:46 +09:00
parent 2f3aa0dd2e
commit 35c798b3fc

View File

@ -108,11 +108,7 @@ pub enum EbmlEncoderTag {
EsMap = 0x15,
EsMapKey = 0x16,
EsMapVal = 0x17,
EsOpaque = 0x18,
// Used only when debugging
EsLabel = 0x19,
}
const NUM_TAGS: uint = 0x1000;
@ -159,7 +155,7 @@ pub mod reader {
use super::{ ApplicationError, EsVec, EsMap, EsEnum, EsVecLen, EsVecElt,
EsMapLen, EsMapKey, EsEnumVid, EsU64, EsU32, EsU16, EsU8, EsInt, EsI64,
EsI32, EsI16, EsI8, EsBool, EsF64, EsF32, EsChar, EsStr, EsMapVal,
EsUint, EsOpaque, EsLabel, EbmlEncoderTag, Doc, TaggedDoc,
EsUint, EsOpaque, EbmlEncoderTag, Doc, TaggedDoc,
Error, IntTooBig, InvalidTag, Expected, NUM_IMPLICIT_TAGS, TAG_IMPLICIT_LEN };
pub type DecodeResult<T> = Result<T, Error>;
@ -395,23 +391,6 @@ pub mod reader {
}
}
fn _check_label(&mut self, lbl: &str) -> DecodeResult<()> {
if self.pos < self.parent.end {
let TaggedDoc { tag: r_tag, doc: r_doc } =
try!(doc_at(self.parent.data, self.pos));
if r_tag == (EsLabel as uint) {
self.pos = r_doc.end;
let str = r_doc.as_str_slice();
if lbl != str {
return Err(Expected(format!("Expected label {:?} but \
found {:?}", lbl, str)));
}
}
}
Ok(())
}
fn next_doc(&mut self, exp_tag: EbmlEncoderTag) -> DecodeResult<Doc<'doc>> {
debug!(". next_doc(exp_tag={:?})", exp_tag);
if self.pos >= self.parent.end {
@ -540,7 +519,6 @@ pub mod reader {
F: FnOnce(&mut Decoder<'doc>) -> DecodeResult<T>,
{
debug!("read_enum({})", name);
try!(self._check_label(name));
let doc = try!(self.next_doc(EsEnum));
@ -606,7 +584,6 @@ pub mod reader {
F: FnOnce(&mut Decoder<'doc>) -> DecodeResult<T>,
{
debug!("read_struct_field(name={}, idx={})", name, idx);
try!(self._check_label(name));
f(self)
}
@ -723,7 +700,7 @@ pub mod writer {
use super::{ EsVec, EsMap, EsEnum, EsVecLen, EsVecElt, EsMapLen, EsMapKey,
EsEnumVid, EsU64, EsU32, EsU16, EsU8, EsInt, EsI64, EsI32, EsI16, EsI8,
EsBool, EsF64, EsF32, EsChar, EsStr, EsMapVal, EsUint,
EsOpaque, EsLabel, EbmlEncoderTag, NUM_IMPLICIT_TAGS, NUM_TAGS };
EsOpaque, EbmlEncoderTag, NUM_IMPLICIT_TAGS, NUM_TAGS };
use serialize;
@ -928,13 +905,6 @@ pub mod writer {
// FIXME (#2743): optionally perform "relaxations" on end_tag to more
// efficiently encode sizes; this is a fixed point iteration
// Set to true to generate more debugging in EBML code.
// Totally lame approach.
#[cfg(not(ndebug))]
static DEBUG: bool = true;
#[cfg(ndebug)]
static DEBUG: bool = false;
impl<'a, W: Writer + Seek> Encoder<'a, W> {
// used internally to emit things like the vector length and so on
fn _emit_tagged_uint(&mut self, t: EbmlEncoderTag, v: uint) -> EncodeResult {
@ -942,17 +912,6 @@ pub mod writer {
self.wr_tagged_raw_u32(t as uint, v as u32)
}
fn _emit_label(&mut self, label: &str) -> EncodeResult {
// There are various strings that we have access to, such as
// the name of a record field, which do not actually appear in
// the encoded EBML (normally). This is just for
// efficiency. When debugging, though, we can emit such
// labels and then they will be checked by decoder to
// try and check panics more quickly.
if DEBUG { self.wr_tagged_str(EsLabel as uint, label) }
else { Ok(()) }
}
pub fn emit_opaque<F>(&mut self, f: F) -> EncodeResult where
F: FnOnce(&mut Encoder<W>) -> EncodeResult,
{
@ -1021,10 +980,9 @@ pub mod writer {
self.wr_tagged_str(EsStr as uint, v)
}
fn emit_enum<F>(&mut self, name: &str, f: F) -> EncodeResult where
fn emit_enum<F>(&mut self, _name: &str, f: F) -> EncodeResult where
F: FnOnce(&mut Encoder<'a, W>) -> EncodeResult,
{
try!(self._emit_label(name));
try!(self.start_tag(EsEnum as uint));
try!(f(self));
self.end_tag()
@ -1072,10 +1030,9 @@ pub mod writer {
f(self)
}
fn emit_struct_field<F>(&mut self, name: &str, _: uint, f: F) -> EncodeResult where
fn emit_struct_field<F>(&mut self, _name: &str, _: uint, f: F) -> EncodeResult where
F: FnOnce(&mut Encoder<'a, W>) -> EncodeResult,
{
try!(self._emit_label(name));
f(self)
}