From f369aff688697a881833d86c13b18156e8376f08 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Thu, 23 Feb 2023 19:13:39 -0700 Subject: decode: Inline scanNumber --- decode.go | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/decode.go b/decode.go index 8c26a80..126b904 100644 --- a/decode.go +++ b/decode.go @@ -462,8 +462,13 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) *DecodeError { if ok, err := dec.maybeDecodeNull(nullOK); ok { return err } + if t, err := dec.peekRuneType(); err != nil { + return err + } else if !t.IsNumber() { + return dec.newTypeError(t.JSONType(), typ, nil) + } var buf strings.Builder - if err := dec.scanNumber(typ, &buf); err != nil { + if err := dec.scan(&buf); err != nil { return err } n, err := strconv.ParseInt(buf.String(), 10, kind2bits[kind]) @@ -475,8 +480,13 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) *DecodeError { if ok, err := dec.maybeDecodeNull(nullOK); ok { return err } + if t, err := dec.peekRuneType(); err != nil { + return err + } else if !t.IsNumber() { + return dec.newTypeError(t.JSONType(), typ, nil) + } var buf strings.Builder - if err := dec.scanNumber(typ, &buf); err != nil { + if err := dec.scan(&buf); err != nil { return err } n, err := strconv.ParseUint(buf.String(), 10, kind2bits[kind]) @@ -488,8 +498,13 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) *DecodeError { if ok, err := dec.maybeDecodeNull(nullOK); ok { return err } + if t, err := dec.peekRuneType(); err != nil { + return err + } else if !t.IsNumber() { + return dec.newTypeError(t.JSONType(), typ, nil) + } var buf strings.Builder - if err := dec.scanNumber(typ, &buf); err != nil { + if err := dec.scan(&buf); err != nil { return err } n, err := strconv.ParseFloat(buf.String(), kind2bits[kind]) @@ -881,17 +896,6 @@ func (dec *Decoder) scan(out fastio.RuneWriter) *DecodeError { return nil } -func (dec *Decoder) scanNumber(gTyp reflect.Type, out fastio.RuneWriter) *DecodeError { - t, err := dec.peekRuneType() - if err != nil { - return err - } - if !t.IsNumber() { - return dec.newTypeError(t.JSONType(), gTyp, nil) - } - return dec.scan(out) -} - func (dec *Decoder) decodeAny() (any, *DecodeError) { t, err := dec.peekRuneType() if err != nil { -- cgit v1.2.3