]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/json: add Decoder.InputOffset for offset access
authorFrancesco Renzi <rentziass@gmail.com>
Fri, 11 Oct 2019 12:59:15 +0000 (13:59 +0100)
committerIan Lance Taylor <iant@golang.org>
Fri, 11 Oct 2019 16:34:01 +0000 (16:34 +0000)
This makes Decoder.offset public while renaming it to
Decoder.InputOffset to match encoding/xml Decoder API

Code changes made by Adam Stankiewicz [sheerun@sher.pl]

Fixes #29688

Change-Id: I86dbfd2b2da80160846e92bfa580c53d8d45e2db
Reviewed-on: https://go-review.googlesource.com/c/go/+/200677
Run-TryBot: Johan Brandhorst <johan.brandhorst@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/encoding/json/stream.go

index 3d30322ce2597a6158325963679759f739c8663a..81f404f4267d0891e85317d78636c49e67d09f0d 100644 (file)
@@ -56,7 +56,7 @@ func (dec *Decoder) Decode(v interface{}) error {
        }
 
        if !dec.tokenValueAllowed() {
-               return &SyntaxError{msg: "not at beginning of value", Offset: dec.offset()}
+               return &SyntaxError{msg: "not at beginning of value", Offset: dec.InputOffset()}
        }
 
        // Read whole value into buffer.
@@ -314,7 +314,7 @@ func (dec *Decoder) tokenPrepareForDecode() error {
                        return err
                }
                if c != ',' {
-                       return &SyntaxError{"expected comma after array element", dec.offset()}
+                       return &SyntaxError{"expected comma after array element", dec.InputOffset()}
                }
                dec.scanp++
                dec.tokenState = tokenArrayValue
@@ -324,7 +324,7 @@ func (dec *Decoder) tokenPrepareForDecode() error {
                        return err
                }
                if c != ':' {
-                       return &SyntaxError{"expected colon after object key", dec.offset()}
+                       return &SyntaxError{"expected colon after object key", dec.InputOffset()}
                }
                dec.scanp++
                dec.tokenState = tokenObjectValue
@@ -477,7 +477,7 @@ func (dec *Decoder) tokenError(c byte) (Token, error) {
        case tokenObjectComma:
                context = " after object key:value pair"
        }
-       return nil, &SyntaxError{"invalid character " + quoteChar(c) + context, dec.offset()}
+       return nil, &SyntaxError{"invalid character " + quoteChar(c) + context, dec.InputOffset()}
 }
 
 // More reports whether there is another element in the
@@ -506,6 +506,9 @@ func (dec *Decoder) peek() (byte, error) {
        }
 }
 
-func (dec *Decoder) offset() int64 {
+// InputOffset returns the input stream byte offset of the current decoder position.
+// The offset gives the location of the end of the most recently returned token
+// and the beginning of the next token.
+func (dec *Decoder) InputOffset() int64 {
        return dec.scanned + int64(dec.scanp)
 }