diff options
| author | Joe Tsai <joetsai@digital-static.net> | 2023-03-11 12:03:28 -0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-03-15 15:41:55 +0000 |
| commit | 2e51f6f25cfc37f1e1d6fd3a90f0570979939a21 (patch) | |
| tree | bae827c86ba9b00aedce29e5331c6e973400eff7 /src/encoding | |
| parent | e64e000f5561a37cbfae1e9e48d516d93934c91b (diff) | |
| download | go-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.go | 8 | ||||
| -rw-r--r-- | src/encoding/json/indent.go | 11 |
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 |
