summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/ast/encode.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/ast/encode.go')
-rw-r--r--vendor/github.com/bytedance/sonic/ast/encode.go66
1 files changed, 44 insertions, 22 deletions
diff --git a/vendor/github.com/bytedance/sonic/ast/encode.go b/vendor/github.com/bytedance/sonic/ast/encode.go
index 1187e30c2..263ae5a9d 100644
--- a/vendor/github.com/bytedance/sonic/ast/encode.go
+++ b/vendor/github.com/bytedance/sonic/ast/encode.go
@@ -19,8 +19,6 @@ package ast
import (
`sync`
`unicode/utf8`
-
- `github.com/bytedance/sonic/internal/rt`
)
const (
@@ -165,18 +163,18 @@ func (self *Node) encodeFalse(buf *[]byte) error {
}
func (self *Node) encodeNumber(buf *[]byte) error {
- str := rt.StrFrom(self.p, self.v)
+ str := self.toString()
*buf = append(*buf, str...)
return nil
}
func (self *Node) encodeString(buf *[]byte) error {
- if self.v == 0 {
+ if self.l == 0 {
*buf = append(*buf, '"', '"')
return nil
}
- quote(buf, rt.StrFrom(self.p, self.v))
+ quote(buf, self.toString())
return nil
}
@@ -195,16 +193,28 @@ func (self *Node) encodeArray(buf *[]byte) error {
*buf = append(*buf, '[')
- var p = (*Node)(self.p)
- err := p.encode(buf)
- if err != nil {
- return err
+ var s = (*linkedNodes)(self.p)
+ var started bool
+ if nb > 0 {
+ n := s.At(0)
+ if n.Exists() {
+ if err := n.encode(buf); err != nil {
+ return err
+ }
+ started = true
+ }
}
+
for i := 1; i < nb; i++ {
- *buf = append(*buf, ',')
- p = p.unsafe_next()
- err := p.encode(buf)
- if err != nil {
+ n := s.At(i)
+ if !n.Exists() {
+ continue
+ }
+ if started {
+ *buf = append(*buf, ',')
+ }
+ started = true
+ if err := n.encode(buf); err != nil {
return err
}
}
@@ -240,20 +250,32 @@ func (self *Node) encodeObject(buf *[]byte) error {
*buf = append(*buf, '{')
- var p = (*Pair)(self.p)
- err := p.encode(buf)
- if err != nil {
- return err
+ var s = (*linkedPairs)(self.p)
+ var started bool
+ if nb > 0 {
+ n := s.At(0)
+ if n.Value.Exists() {
+ if err := n.encode(buf); err != nil {
+ return err
+ }
+ started = true
+ }
}
+
for i := 1; i < nb; i++ {
- *buf = append(*buf, ',')
- p = p.unsafe_next()
- err := p.encode(buf)
- if err != nil {
+ n := s.At(i)
+ if !n.Value.Exists() {
+ continue
+ }
+ if started {
+ *buf = append(*buf, ',')
+ }
+ started = true
+ if err := n.encode(buf); err != nil {
return err
}
}
*buf = append(*buf, '}')
return nil
-} \ No newline at end of file
+}