From 2e48a42fb9b9e946958810cfbb90ae85bee997e4 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 30 Jan 2023 20:46:07 -0700 Subject: decode: Remove unnecessary scanner struct members --- decode_scan.go | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/decode_scan.go b/decode_scan.go index b9a5ea8..387fcea 100644 --- a/decode_scan.go +++ b/decode_scan.go @@ -35,28 +35,24 @@ type runeTypeScannerImpl struct { inner io.RuneScanner // initialized by constructor - initialized bool - parser internal.Parser // initialized by constructor offset int64 - repeat bool - stuck bool - rRune rune - rRuneOK bool - rSize int - rType internal.RuneType - rErr error + initialized bool + repeat bool + + rRune rune + rSize int + rType internal.RuneType + rErr error } var _ runeTypeScanner = (*runeTypeScannerImpl)(nil) func (sc *runeTypeScannerImpl) Reset() { sc.parser.Reset() - unread := sc.stuck && sc.rType == internal.RuneTypeEOF && sc.rRuneOK - sc.stuck = false - sc.repeat = false - if unread { + if sc.repeat || (sc.rType == internal.RuneTypeEOF && sc.rSize > 0) { + sc.repeat = false // re-figure the rType and rErr var err error sc.rType, err = sc.parser.HandleRune(sc.rRune) @@ -75,15 +71,15 @@ func (sc *runeTypeScannerImpl) Reset() { func (sc *runeTypeScannerImpl) ReadRuneType() (rune, int, internal.RuneType, error) { switch { - case sc.stuck: + case sc.initialized && (sc.rType == internal.RuneTypeError || sc.rType == internal.RuneTypeEOF): // do nothing case sc.repeat: _, _, _ = sc.inner.ReadRune() default: + sc.initialized = true var err error sc.rRune, sc.rSize, err = sc.inner.ReadRune() sc.offset += int64(sc.rSize) - sc.rRuneOK = err == nil switch err { case nil: sc.rType, err = sc.parser.HandleRune(sc.rRune) @@ -113,9 +109,7 @@ func (sc *runeTypeScannerImpl) ReadRuneType() (rune, int, internal.RuneType, err } } } - sc.initialized = true sc.repeat = false - sc.stuck = sc.rType == internal.RuneTypeEOF || sc.rType == internal.RuneTypeError return sc.rRune, sc.rSize, sc.rType, sc.rErr } @@ -137,7 +131,7 @@ func (sc *runeTypeScannerImpl) ReadRune() (rune, int, error) { // unread, or if that call returned a rune with size 0, then // ErrInvalidUnreadRune is returned. Otherwise, nil is returned. func (sc *runeTypeScannerImpl) UnreadRune() error { - if !sc.initialized || sc.repeat || sc.rSize == 0 { + if sc.repeat || sc.rSize == 0 { return ErrInvalidUnreadRune } sc.repeat = true -- cgit v1.2.3-54-g00ecf