aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2023-03-11 12:03:28 -0800
committerGopher Robot <gobot@golang.org>2023-03-15 15:41:55 +0000
commit2e51f6f25cfc37f1e1d6fd3a90f0570979939a21 (patch)
treebae827c86ba9b00aedce29e5331c6e973400eff7 /src/encoding
parente64e000f5561a37cbfae1e9e48d516d93934c91b (diff)
downloadgo-2e51f6f25cfc37f1e1d6fd3a90f0570979939a21.tar.xz
encoding/json: make use of Buffer.AvailableBuffer
Use the explicit API for acquiring an empty available buffer, rather than the hack that's implemented in terms of Bytes and Len. Change-Id: If286ed42693acd61ffe28dc849ed4b76c3ae4434 Reviewed-on: https://go-review.googlesource.com/c/go/+/476337 Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Auto-Submit: Joseph Tsai <joetsai@digital-static.net> Run-TryBot: Joseph Tsai <joetsai@digital-static.net> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/encoding')
-rw-r--r--src/encoding/json/encode.go8
-rw-r--r--src/encoding/json/indent.go11
2 files changed, 5 insertions, 14 deletions
diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go
index f3c824d13e..79a82cfe75 100644
--- a/src/encoding/json/encode.go
+++ b/src/encoding/json/encode.go
@@ -259,10 +259,6 @@ type encodeState struct {
ptrSeen map[any]struct{}
}
-func (e *encodeState) AvailableBuffer() []byte {
- return availableBuffer(&e.Buffer)
-}
-
const startDetectingCyclesAfter = 1000
var encodeStatePool sync.Pool
@@ -445,7 +441,7 @@ func marshalerEncoder(e *encodeState, v reflect.Value, opts encOpts) {
b, err := m.MarshalJSON()
if err == nil {
e.Grow(len(b))
- out := availableBuffer(&e.Buffer)
+ out := e.AvailableBuffer()
out, err = appendCompact(out, b, opts.escapeHTML)
e.Buffer.Write(out)
}
@@ -464,7 +460,7 @@ func addrMarshalerEncoder(e *encodeState, v reflect.Value, opts encOpts) {
b, err := m.MarshalJSON()
if err == nil {
e.Grow(len(b))
- out := availableBuffer(&e.Buffer)
+ out := e.AvailableBuffer()
out, err = appendCompact(out, b, opts.escapeHTML)
e.Buffer.Write(out)
}
diff --git a/src/encoding/json/indent.go b/src/encoding/json/indent.go
index 99951208a0..26bb5d2e47 100644
--- a/src/encoding/json/indent.go
+++ b/src/encoding/json/indent.go
@@ -6,11 +6,6 @@ package json
import "bytes"
-// TODO(https://go.dev/issue/53685): Use bytes.Buffer.AvailableBuffer instead.
-func availableBuffer(b *bytes.Buffer) []byte {
- return b.Bytes()[b.Len():]
-}
-
// HTMLEscape appends to dst the JSON-encoded src with <, >, &, U+2028 and U+2029
// characters inside string literals changed to \u003c, \u003e, \u0026, \u2028, \u2029
// so that the JSON will be safe to embed inside HTML <script> tags.
@@ -18,7 +13,7 @@ func availableBuffer(b *bytes.Buffer) []byte {
// escaping within <script> tags, so an alternative JSON encoding must be used.
func HTMLEscape(dst *bytes.Buffer, src []byte) {
dst.Grow(len(src))
- dst.Write(appendHTMLEscape(availableBuffer(dst), src))
+ dst.Write(appendHTMLEscape(dst.AvailableBuffer(), src))
}
func appendHTMLEscape(dst, src []byte) []byte {
@@ -45,7 +40,7 @@ func appendHTMLEscape(dst, src []byte) []byte {
// insignificant space characters elided.
func Compact(dst *bytes.Buffer, src []byte) error {
dst.Grow(len(src))
- b := availableBuffer(dst)
+ b := dst.AvailableBuffer()
b, err := appendCompact(b, src, false)
dst.Write(b)
return err
@@ -114,7 +109,7 @@ const indentGrowthFactor = 2
// if src ends in a trailing newline, so will dst.
func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error {
dst.Grow(indentGrowthFactor * len(src))
- b := availableBuffer(dst)
+ b := dst.AvailableBuffer()
b, err := appendIndent(b, src, prefix, indent)
dst.Write(b)
return err