@@ -74,33 +74,29 @@ impl<'a> Tokenizer<'a> {
7474 Ok ( ( ) )
7575 }
7676
77- fn read_escaped_char ( & mut self ) -> JsonResult < ( ) > {
78- let ch = try!( self . expect ( ) ) ;
79- let ch = match ch {
80- b'b' => 0x8 ,
81- b'f' => 0xC ,
82- b't' => b'\t' ,
83- b'r' => b'\r' ,
84- b'n' => b'\n' ,
85- b'u' => {
86- try!( self . read_codepoint ( ) ) ;
87- return Ok ( ( ) ) ;
88- } ,
89- _ => ch
90- } ;
91- self . buffer . push ( ch) ;
92-
93- Ok ( ( ) )
94- }
95-
9677 fn read_string ( & mut self ) -> JsonResult < String > {
9778 self . buffer . clear ( ) ;
9879
9980 loop {
10081 let ch = try!( self . expect ( ) ) ;
10182 match ch {
10283 b'"' => break ,
103- b'\\' => try!( self . read_escaped_char ( ) ) ,
84+ b'\\' => {
85+ let ch = try!( self . expect ( ) ) ;
86+ let ch = match ch {
87+ b'b' => 0x8 ,
88+ b'f' => 0xC ,
89+ b't' => b'\t' ,
90+ b'r' => b'\r' ,
91+ b'n' => b'\n' ,
92+ b'u' => {
93+ try!( self . read_codepoint ( ) ) ;
94+ continue ;
95+ } ,
96+ _ => ch
97+ } ;
98+ self . buffer . push ( ch) ;
99+ } ,
104100 _ => self . buffer . push ( ch)
105101 }
106102 }
@@ -222,16 +218,18 @@ impl<'a> Tokenizer<'a> {
222218}
223219
224220macro_rules! expect {
225- ( $parser: ident, $p: pat => $value: ident) => (
226- match try!( $parser. consume( ) ) {
227- $p => $value,
228- token => return Err ( JsonError :: unexpected_token( token) )
221+ ( $parser: ident, $token: pat => $value: ident) => (
222+ match $parser. consume( ) {
223+ Ok ( $token) => $value,
224+ Ok ( token) => return Err ( JsonError :: unexpected_token( token) ) ,
225+ Err ( error) => return Err ( error) ,
229226 }
230227 ) ;
231228 ( $parser: ident, $token: pat) => ( {
232- match try!( $parser. consume( ) ) {
233- $token => { }
234- token => return Err ( JsonError :: unexpected_token( token) )
229+ match $parser. consume( ) {
230+ Ok ( $token) => { } ,
231+ Ok ( token) => return Err ( JsonError :: unexpected_token( token) ) ,
232+ Err ( error) => return Err ( error) ,
235233 }
236234 } )
237235}
0 commit comments