diff options
| author | Sean McArthur <sean.monstar@gmail.com> | 2014-03-18 10:58:26 -0700 |
|---|---|---|
| committer | Sean McArthur <sean.monstar@gmail.com> | 2014-03-27 17:41:55 -0700 |
| commit | f1739b14a1346419a4598339aee32aab07e0d12e (patch) | |
| tree | 1f22c1cc492f9729cd1420654f97f3b511938369 /src/libsyntax/parse | |
| parent | 13dafa09f1a80b8b50f41cab42ac2bfd24dfa6b9 (diff) | |
| download | rust-f1739b14a1346419a4598339aee32aab07e0d12e.tar.gz rust-f1739b14a1346419a4598339aee32aab07e0d12e.zip | |
serialize: use Result
All of Decoder and Encoder's methods now return a Result. Encodable.encode() and Decodable.decode() return a Result as well. fixes #12292
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 11 | ||||
| -rw-r--r-- | src/libsyntax/parse/token.rs | 17 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index eb6b462fb94..2df93deea14 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -288,7 +288,8 @@ mod test { use util::parser_testing::{string_to_expr, string_to_item}; use util::parser_testing::string_to_stmt; - #[cfg(test)] + // FIXME: remove stage0 to_json_str after snapshot + #[cfg(stage0)] fn to_json_str<'a, E: Encodable<json::Encoder<'a>>>(val: &E) -> ~str { let mut writer = MemWriter::new(); let mut encoder = json::Encoder::new(&mut writer as &mut io::Writer); @@ -296,6 +297,14 @@ mod test { str::from_utf8_owned(writer.unwrap()).unwrap() } + #[cfg(not(stage0))] + fn to_json_str<'a, E: Encodable<json::Encoder<'a>, io::IoError>>(val: &E) -> ~str { + let mut writer = MemWriter::new(); + let mut encoder = json::Encoder::new(&mut writer as &mut io::Writer); + let _ = val.encode(&mut encoder); + str::from_utf8_owned(writer.unwrap()).unwrap() + } + // produce a codemap::span fn sp(a: u32, b: u32) -> Span { Span{lo:BytePos(a),hi:BytePos(b),expn_info:None} diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 15525912955..7bb920bdf56 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -602,18 +602,35 @@ impl<'a> Equiv<&'a str> for InternedString { } } +// FIXME: remove stage0 Encodables/Decodables after snapshot +#[cfg(stage0)] impl<D:Decoder> Decodable<D> for InternedString { fn decode(d: &mut D) -> InternedString { get_name(get_ident_interner().intern(d.read_str())) } } +#[cfg(stage0)] impl<E:Encoder> Encodable<E> for InternedString { fn encode(&self, e: &mut E) { e.emit_str(self.string.as_slice()) } } +#[cfg(not(stage0))] +impl<D:Decoder<E>, E> Decodable<D, E> for InternedString { + fn decode(d: &mut D) -> Result<InternedString, E> { + Ok(get_name(get_ident_interner().intern(try!(d.read_str())))) + } +} + +#[cfg(not(stage0))] +impl<S:Encoder<E>, E> Encodable<S, E> for InternedString { + fn encode(&self, s: &mut S) -> Result<(), E> { + s.emit_str(self.string.as_slice()) + } +} + /// Returns the string contents of a name, using the task-local interner. #[inline] pub fn get_name(name: Name) -> InternedString { |
