forked from mirror/go-json
Pass RuntimeContext to the first argument of all append functions
This commit is contained in:
parent
11437c8556
commit
69cca05981
12
encode.go
12
encode.go
|
@ -170,8 +170,8 @@ func marshalIndent(v interface{}, prefix, indent string, optFuncs ...EncodeOptio
|
||||||
func encode(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error) {
|
func encode(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error) {
|
||||||
b := ctx.Buf[:0]
|
b := ctx.Buf[:0]
|
||||||
if v == nil {
|
if v == nil {
|
||||||
b = encoder.AppendNull(b)
|
b = encoder.AppendNull(ctx, b)
|
||||||
b = encoder.AppendComma(b)
|
b = encoder.AppendComma(ctx, b)
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
header := (*emptyInterface)(unsafe.Pointer(&v))
|
header := (*emptyInterface)(unsafe.Pointer(&v))
|
||||||
|
@ -198,8 +198,8 @@ func encode(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error) {
|
||||||
func encodeNoEscape(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error) {
|
func encodeNoEscape(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error) {
|
||||||
b := ctx.Buf[:0]
|
b := ctx.Buf[:0]
|
||||||
if v == nil {
|
if v == nil {
|
||||||
b = encoder.AppendNull(b)
|
b = encoder.AppendNull(ctx, b)
|
||||||
b = encoder.AppendComma(b)
|
b = encoder.AppendComma(ctx, b)
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
header := (*emptyInterface)(unsafe.Pointer(&v))
|
header := (*emptyInterface)(unsafe.Pointer(&v))
|
||||||
|
@ -225,8 +225,8 @@ func encodeNoEscape(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error)
|
||||||
func encodeIndent(ctx *encoder.RuntimeContext, v interface{}, prefix, indent string) ([]byte, error) {
|
func encodeIndent(ctx *encoder.RuntimeContext, v interface{}, prefix, indent string) ([]byte, error) {
|
||||||
b := ctx.Buf[:0]
|
b := ctx.Buf[:0]
|
||||||
if v == nil {
|
if v == nil {
|
||||||
b = encoder.AppendNull(b)
|
b = encoder.AppendNull(ctx, b)
|
||||||
b = encoder.AppendCommaIndent(b)
|
b = encoder.AppendCommaIndent(ctx, b)
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
header := (*emptyInterface)(unsafe.Pointer(&v))
|
header := (*emptyInterface)(unsafe.Pointer(&v))
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -269,7 +269,7 @@ func MapIterNext(it unsafe.Pointer)
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func MapLen(m unsafe.Pointer) int
|
func MapLen(m unsafe.Pointer) int
|
||||||
|
|
||||||
func AppendByteSlice(b []byte, src []byte) []byte {
|
func AppendByteSlice(_ *RuntimeContext, b []byte, src []byte) []byte {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
return append(b, `null`...)
|
return append(b, `null`...)
|
||||||
}
|
}
|
||||||
|
@ -287,7 +287,7 @@ func AppendByteSlice(b []byte, src []byte) []byte {
|
||||||
return append(append(b, buf...), '"')
|
return append(append(b, buf...), '"')
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendFloat32(b []byte, v float32) []byte {
|
func AppendFloat32(_ *RuntimeContext, b []byte, v float32) []byte {
|
||||||
f64 := float64(v)
|
f64 := float64(v)
|
||||||
abs := math.Abs(f64)
|
abs := math.Abs(f64)
|
||||||
fmt := byte('f')
|
fmt := byte('f')
|
||||||
|
@ -301,7 +301,7 @@ func AppendFloat32(b []byte, v float32) []byte {
|
||||||
return strconv.AppendFloat(b, f64, fmt, -1, 32)
|
return strconv.AppendFloat(b, f64, fmt, -1, 32)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendFloat64(b []byte, v float64) []byte {
|
func AppendFloat64(_ *RuntimeContext, b []byte, v float64) []byte {
|
||||||
abs := math.Abs(v)
|
abs := math.Abs(v)
|
||||||
fmt := byte('f')
|
fmt := byte('f')
|
||||||
// Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right.
|
// Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right.
|
||||||
|
@ -313,7 +313,7 @@ func AppendFloat64(b []byte, v float64) []byte {
|
||||||
return strconv.AppendFloat(b, v, fmt, -1, 64)
|
return strconv.AppendFloat(b, v, fmt, -1, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendBool(b []byte, v bool) []byte {
|
func AppendBool(_ *RuntimeContext, b []byte, v bool) []byte {
|
||||||
if v {
|
if v {
|
||||||
return append(b, "true"...)
|
return append(b, "true"...)
|
||||||
}
|
}
|
||||||
|
@ -340,7 +340,7 @@ var (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func AppendNumber(b []byte, n json.Number) ([]byte, error) {
|
func AppendNumber(_ *RuntimeContext, b []byte, n json.Number) ([]byte, error) {
|
||||||
if len(n) == 0 {
|
if len(n) == 0 {
|
||||||
return append(b, '0'), nil
|
return append(b, '0'), nil
|
||||||
}
|
}
|
||||||
|
@ -367,7 +367,7 @@ func AppendMarshalJSON(ctx *RuntimeContext, code *Opcode, b []byte, v interface{
|
||||||
v = rv.Interface()
|
v = rv.Interface()
|
||||||
marshaler, ok := v.(json.Marshaler)
|
marshaler, ok := v.(json.Marshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return AppendNull(b), nil
|
return AppendNull(ctx, b), nil
|
||||||
}
|
}
|
||||||
bb, err := marshaler.MarshalJSON()
|
bb, err := marshaler.MarshalJSON()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -397,7 +397,7 @@ func AppendMarshalJSONIndent(ctx *RuntimeContext, code *Opcode, b []byte, v inte
|
||||||
v = rv.Interface()
|
v = rv.Interface()
|
||||||
marshaler, ok := v.(json.Marshaler)
|
marshaler, ok := v.(json.Marshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return AppendNull(b), nil
|
return AppendNull(ctx, b), nil
|
||||||
}
|
}
|
||||||
bb, err := marshaler.MarshalJSON()
|
bb, err := marshaler.MarshalJSON()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -433,7 +433,7 @@ func AppendMarshalText(ctx *RuntimeContext, code *Opcode, b []byte, v interface{
|
||||||
v = rv.Interface()
|
v = rv.Interface()
|
||||||
marshaler, ok := v.(encoding.TextMarshaler)
|
marshaler, ok := v.(encoding.TextMarshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return AppendNull(b), nil
|
return AppendNull(ctx, b), nil
|
||||||
}
|
}
|
||||||
bytes, err := marshaler.MarshalText()
|
bytes, err := marshaler.MarshalText()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -456,7 +456,7 @@ func AppendMarshalTextIndent(ctx *RuntimeContext, code *Opcode, b []byte, v inte
|
||||||
v = rv.Interface()
|
v = rv.Interface()
|
||||||
marshaler, ok := v.(encoding.TextMarshaler)
|
marshaler, ok := v.(encoding.TextMarshaler)
|
||||||
if !ok {
|
if !ok {
|
||||||
return AppendNull(b), nil
|
return AppendNull(ctx, b), nil
|
||||||
}
|
}
|
||||||
bytes, err := marshaler.MarshalText()
|
bytes, err := marshaler.MarshalText()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -465,19 +465,19 @@ func AppendMarshalTextIndent(ctx *RuntimeContext, code *Opcode, b []byte, v inte
|
||||||
return AppendString(ctx, b, *(*string)(unsafe.Pointer(&bytes))), nil
|
return AppendString(ctx, b, *(*string)(unsafe.Pointer(&bytes))), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendNull(b []byte) []byte {
|
func AppendNull(_ *RuntimeContext, b []byte) []byte {
|
||||||
return append(b, "null"...)
|
return append(b, "null"...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendComma(b []byte) []byte {
|
func AppendComma(_ *RuntimeContext, b []byte) []byte {
|
||||||
return append(b, ',')
|
return append(b, ',')
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendCommaIndent(b []byte) []byte {
|
func AppendCommaIndent(_ *RuntimeContext, b []byte) []byte {
|
||||||
return append(b, ',', '\n')
|
return append(b, ',', '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendStructEnd(b []byte) []byte {
|
func AppendStructEnd(_ *RuntimeContext, b []byte) []byte {
|
||||||
return append(b, '}', ',')
|
return append(b, '}', ',')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,22 +90,22 @@ func ptrToInterface(code *encoder.Opcode, p uintptr) interface{} {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendBool(b []byte, v bool) []byte {
|
func appendBool(_ *encoder.RuntimeContext, b []byte, v bool) []byte {
|
||||||
if v {
|
if v {
|
||||||
return append(b, "true"...)
|
return append(b, "true"...)
|
||||||
}
|
}
|
||||||
return append(b, "false"...)
|
return append(b, "false"...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendNull(b []byte) []byte {
|
func appendNull(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, "null"...)
|
return append(b, "null"...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendComma(b []byte) []byte {
|
func appendComma(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, ',')
|
return append(b, ',')
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendColon(b []byte) []byte {
|
func appendColon(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
last := len(b) - 1
|
last := len(b) - 1
|
||||||
b[last] = ':'
|
b[last] = ':'
|
||||||
return b
|
return b
|
||||||
|
@ -174,11 +174,11 @@ func appendArrayEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []by
|
||||||
return append(b, ',')
|
return append(b, ',')
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendEmptyArray(b []byte) []byte {
|
func appendEmptyArray(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, '[', ']', ',')
|
return append(b, '[', ']', ',')
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendEmptyObject(b []byte) []byte {
|
func appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, '{', '}', ',')
|
return append(b, '{', '}', ',')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ func appendObjectEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []b
|
||||||
return append(b, ',')
|
return append(b, ',')
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendStructHead(b []byte) []byte {
|
func appendStructHead(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, '{')
|
return append(b, '{')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ func appendStructEndSkipLast(ctx *encoder.RuntimeContext, code *encoder.Opcode,
|
||||||
last := len(b) - 1
|
last := len(b) - 1
|
||||||
if b[last] == ',' {
|
if b[last] == ',' {
|
||||||
b[last] = '}'
|
b[last] = '}'
|
||||||
return appendComma(b)
|
return appendComma(ctx, b)
|
||||||
}
|
}
|
||||||
return appendStructEnd(ctx, code, b)
|
return appendStructEnd(ctx, code, b)
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -92,22 +92,22 @@ func ptrToInterface(code *encoder.Opcode, p uintptr) interface{} {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendBool(b []byte, v bool) []byte {
|
func appendBool(_ *encoder.RuntimeContext, b []byte, v bool) []byte {
|
||||||
if v {
|
if v {
|
||||||
return append(b, "true"...)
|
return append(b, "true"...)
|
||||||
}
|
}
|
||||||
return append(b, "false"...)
|
return append(b, "false"...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendNull(b []byte) []byte {
|
func appendNull(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, "null"...)
|
return append(b, "null"...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendComma(b []byte) []byte {
|
func appendComma(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, ',', '\n')
|
return append(b, ',', '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendColon(b []byte) []byte {
|
func appendColon(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, ':', ' ')
|
return append(b, ':', ' ')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,11 +175,11 @@ func appendArrayEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte)
|
||||||
return append(b, ']', ',', '\n')
|
return append(b, ']', ',', '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendEmptyArray(b []byte) []byte {
|
func appendEmptyArray(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, '[', ']', ',', '\n')
|
return append(b, '[', ']', ',', '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendEmptyObject(b []byte) []byte {
|
func appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, '{', '}', ',', '\n')
|
return append(b, '{', '}', ',', '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ func appendMarshalText(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []by
|
||||||
return encoder.AppendMarshalTextIndent(ctx, code, b, v)
|
return encoder.AppendMarshalTextIndent(ctx, code, b, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendStructHead(b []byte) []byte {
|
func appendStructHead(_ *encoder.RuntimeContext, b []byte) []byte {
|
||||||
return append(b, '{', '\n')
|
return append(b, '{', '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ func appendStructEndSkipLast(ctx *encoder.RuntimeContext, code *encoder.Opcode,
|
||||||
b = appendIndent(ctx, b, code.Indent-1)
|
b = appendIndent(ctx, b, code.Indent-1)
|
||||||
b = append(b, '}')
|
b = append(b, '}')
|
||||||
}
|
}
|
||||||
return appendComma(b)
|
return appendComma(ctx, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func restoreIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, ctxptr uintptr) {
|
func restoreIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, ctxptr uintptr) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue