From 2b6a4ece366b83ddd53d91b41a62b9c5d548958d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 10 Feb 2023 18:46:00 -0700 Subject: decode: Have .expectRuneType() return a *DecodeError --- decode.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/decode.go b/decode.go index 77652af..60667c0 100644 --- a/decode.go +++ b/decode.go @@ -302,12 +302,12 @@ func (dec *Decoder) expectRune(ec rune, et jsonparse.RuneType) { } } -func (dec *Decoder) expectRuneType(ec rune, et jsonparse.RuneType, gt reflect.Type) { +func (dec *Decoder) expectRuneType(ec rune, et jsonparse.RuneType, gt reflect.Type) *DecodeError { ac, at := dec.readRune() if ac != ec || at != et { - err := dec.newTypeError(at.JSONType(), gt, nil) - panic(decodeError(*err)) + return dec.newTypeError(at.JSONType(), gt, nil) } + return nil } type decRuneScanner struct { @@ -990,7 +990,9 @@ func DecodeObject(r io.RuneScanner, decodeKey, decodeVal func(io.RuneScanner) er } func (dec *Decoder) decodeObject(gTyp reflect.Type, decodeKey, decodeVal func() *DecodeError) *DecodeError { - dec.expectRuneType('{', jsonparse.RuneTypeObjectBeg, gTyp) + if err := dec.expectRuneType('{', jsonparse.RuneTypeObjectBeg, gTyp); err != nil { + return err + } _, t := dec.readRune() switch t { case jsonparse.RuneTypeObjectEnd: @@ -1069,7 +1071,9 @@ func DecodeArray(r io.RuneScanner, decodeMember func(r io.RuneScanner) error) (e } func (dec *Decoder) decodeArray(gTyp reflect.Type, decodeMember func() *DecodeError) *DecodeError { - dec.expectRuneType('[', jsonparse.RuneTypeArrayBeg, gTyp) + if err := dec.expectRuneType('[', jsonparse.RuneTypeArrayBeg, gTyp); err != nil { + return err + } _, t := dec.readRune() switch t { case jsonparse.RuneTypeArrayEnd: @@ -1093,7 +1097,9 @@ func (dec *Decoder) decodeArray(gTyp reflect.Type, decodeMember func() *DecodeEr } func (dec *Decoder) decodeString(gTyp reflect.Type, out fastio.RuneWriter) *DecodeError { - dec.expectRuneType('"', jsonparse.RuneTypeStringBeg, gTyp) + if err := dec.expectRuneType('"', jsonparse.RuneTypeStringBeg, gTyp); err != nil { + return err + } var uhex [4]byte for { c, t := dec.readRune() -- cgit v1.2.3-2-g168b