diff options
author | Francesco Renzi <rentziass@gmail.com> | 2019-10-11 13:59:15 +0100 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2019-10-11 16:34:01 +0000 |
commit | ba108c93b864aaa10814e010b4e2efead21516ec (patch) | |
tree | 05f34c1122291c53f4cab5575c2e5558d0723131 /src/encoding/json | |
parent | ac8966aa581a4b5178d40bca36854461f234f85e (diff) | |
download | go-ba108c93b864aaa10814e010b4e2efead21516ec.tar.gz go-ba108c93b864aaa10814e010b4e2efead21516ec.zip |
encoding/json: add Decoder.InputOffset for offset access
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>
Diffstat (limited to 'src/encoding/json')
-rw-r--r-- | src/encoding/json/stream.go | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/encoding/json/stream.go b/src/encoding/json/stream.go index 3d30322ce2..81f404f426 100644 --- a/src/encoding/json/stream.go +++ b/src/encoding/json/stream.go @@ -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) } |