summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/internal/decoder/stream.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/decoder/stream.go')
-rw-r--r--vendor/github.com/bytedance/sonic/internal/decoder/stream.go19
1 files changed, 15 insertions, 4 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/stream.go b/vendor/github.com/bytedance/sonic/internal/decoder/stream.go
index e1e0f73b9..a3716435a 100644
--- a/vendor/github.com/bytedance/sonic/internal/decoder/stream.go
+++ b/vendor/github.com/bytedance/sonic/internal/decoder/stream.go
@@ -21,8 +21,9 @@ import (
`io`
`sync`
- `github.com/bytedance/sonic/option`
+ `github.com/bytedance/sonic/internal/native`
`github.com/bytedance/sonic/internal/native/types`
+ `github.com/bytedance/sonic/option`
)
var (
@@ -71,6 +72,7 @@ func (self *StreamDecoder) Decode(val interface{}) (err error) {
var first = true
var repeat = true
+
read_more:
for {
l := len(buf)
@@ -97,11 +99,20 @@ read_more:
l := len(buf)
if l > 0 {
self.Decoder.Reset(string(buf))
- err = self.Decoder.Decode(val)
- if err != nil {
- if repeat && self.repeatable(err) {
+
+ var x int
+ if ret := native.SkipOneFast(&self.s, &x); ret < 0 {
+ if repeat {
goto read_more
+ } else {
+ err = SyntaxError{x, self.s, types.ParsingError(-ret), ""}
+ self.err = err
+ return
}
+ }
+
+ err = self.Decoder.Decode(val)
+ if err != nil {
self.err = err
}