Pass test

This commit is contained in:
Masaaki Goshima 2021-02-19 15:03:52 +09:00
parent 413c811e37
commit a324a29256
6 changed files with 475 additions and 481 deletions

View File

@ -508,60 +508,92 @@ func encodeCompileUint64(ctx *encodeCompileContext) (*opcode, error) {
func encodeCompileIntString(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileIntString(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opIntString) code := newOpCode(ctx, opIntString)
switch intSize {
case 32:
code.mask = math.MaxUint32
code.rshiftNum = 31
default:
code.mask = math.MaxUint64
code.rshiftNum = 63
}
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileInt8String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileInt8String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opIntString) code := newOpCode(ctx, opIntString)
code.mask = math.MaxUint8
code.rshiftNum = 7
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileInt16String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileInt16String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opIntString) code := newOpCode(ctx, opIntString)
code.mask = math.MaxUint16
code.rshiftNum = 15
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileInt32String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileInt32String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opIntString) code := newOpCode(ctx, opIntString)
code.mask = math.MaxUint32
code.rshiftNum = 31
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileInt64String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileInt64String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opInt64String) code := newOpCode(ctx, opIntString)
code.mask = math.MaxUint64
code.rshiftNum = 63
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileUintString(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileUintString(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opUintString) code := newOpCode(ctx, opUintString)
switch intSize {
case 32:
code.mask = math.MaxUint32
code.rshiftNum = 31
default:
code.mask = math.MaxUint64
code.rshiftNum = 63
}
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileUint8String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileUint8String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opUintString) code := newOpCode(ctx, opUintString)
code.mask = math.MaxUint8
code.rshiftNum = 7
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileUint16String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileUint16String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opUintString) code := newOpCode(ctx, opUintString)
code.mask = math.MaxUint16
code.rshiftNum = 15
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileUint32String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileUint32String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opUintString) code := newOpCode(ctx, opUintString)
code.mask = math.MaxUint32
code.rshiftNum = 31
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }
func encodeCompileUint64String(ctx *encodeCompileContext) (*opcode, error) { func encodeCompileUint64String(ctx *encodeCompileContext) (*opcode, error) {
code := newOpCode(ctx, opUintString) code := newOpCode(ctx, opUintString)
code.mask = math.MaxUint64
code.rshiftNum = 63
ctx.incIndex() ctx.incIndex()
return code, nil return code, nil
} }

View File

@ -49,13 +49,9 @@ var intBELookup = [100]uint16{
var intLookup = [2]*[100]uint16{&intLELookup, &intBELookup} var intLookup = [2]*[100]uint16{&intLELookup, &intBELookup}
var appendInt = formatInteger func appendInt(out []byte, u64 uint64, code *opcode) []byte {
n := u64 & code.mask
func appendUint(b []byte, n uint64) []byte { negative := (u64>>code.rshiftNum)&1 == 1
return formatInteger(b, n, false)
}
func formatInteger(out []byte, n uint64, negative bool) []byte {
if !negative { if !negative {
if n < 10 { if n < 10 {
return append(out, byte(n+'0')) return append(out, byte(n+'0'))
@ -64,7 +60,7 @@ func formatInteger(out []byte, n uint64, negative bool) []byte {
return append(out, byte(u), byte(u>>8)) return append(out, byte(u), byte(u>>8))
} }
} else { } else {
n = -n n = -n & code.mask
} }
lookup := intLookup[endianness] lookup := intLookup[endianness]
@ -94,3 +90,35 @@ func formatInteger(out []byte, n uint64, negative bool) []byte {
return append(out, b[i:]...) return append(out, b[i:]...)
} }
func appendUint(out []byte, u64 uint64, code *opcode) []byte {
n := u64 & code.mask
if n < 10 {
return append(out, byte(n+'0'))
} else if n < 100 {
u := intLELookup[n]
return append(out, byte(u), byte(u>>8))
}
lookup := intLookup[endianness]
var b [22]byte
u := (*[11]uint16)(unsafe.Pointer(&b))
i := 11
for n >= 100 {
j := n % 100
n /= 100
i--
u[i] = lookup[j]
}
i--
u[i] = lookup[n]
i *= 2 // convert to byte index
if n < 10 {
i++ // remove leading zero
}
return append(out, b[i:]...)
}

View File

@ -93,12 +93,23 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.next code = code.next
store(ctxptr, code.idx, ptrToPtr(ptr)) store(ctxptr, code.idx, ptrToPtr(ptr))
case opInt: case opInt:
u64 := ptrToUint64(load(ctxptr, code.idx)) b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opUint: case opUint:
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx))&code.mask) b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = encodeComma(b)
code = code.next
case opIntString:
b = append(b, '"')
b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeComma(b)
code = code.next
case opUintString:
b = append(b, '"')
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opFloat32: case opFloat32:
@ -605,8 +616,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
} else { } else {
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -630,7 +640,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendInt(b, v, v>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -651,8 +661,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -661,8 +670,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly: case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly:
@ -672,7 +680,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
v := u64 & code.mask v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -681,8 +689,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -703,8 +710,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -723,8 +729,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p = ptrToPtr(p + code.offset) p = ptrToPtr(p + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -747,8 +752,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -771,8 +775,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -791,8 +794,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -814,8 +816,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -836,8 +837,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -851,8 +851,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -873,7 +872,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -891,8 +890,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -903,8 +901,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -919,7 +916,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -931,8 +928,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -951,8 +947,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -970,8 +965,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -990,8 +984,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -1010,8 +1003,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1029,8 +1021,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1049,8 +1040,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -1067,7 +1057,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
} else { } else {
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1085,12 +1075,13 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.end.next code = code.end.next
} else { } else {
b = append(b, '{') b = append(b, '{')
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1111,7 +1102,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1120,16 +1111,17 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly: case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{') b = append(b, '{')
v := ptrToUint64(p) & code.mask u64 := ptrToUint64(p)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -1138,7 +1130,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = append(b, '{') b = append(b, '{')
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1159,7 +1151,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -1178,7 +1170,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p = ptrToPtr(p + code.offset) p = ptrToPtr(p + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -1201,7 +1193,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -1224,7 +1216,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1243,7 +1235,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -1265,7 +1257,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -1286,7 +1278,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -1300,7 +1292,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1315,12 +1307,13 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1338,7 +1331,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1349,7 +1342,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1358,12 +1351,13 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1375,7 +1369,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1394,7 +1388,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1412,7 +1406,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1431,7 +1425,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -1450,7 +1444,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1468,7 +1462,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1487,7 +1481,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -4032,8 +4026,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
case opStructFieldInt: case opStructFieldInt:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyInt: case opStructFieldOmitEmptyInt:
@ -4042,7 +4035,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
v := u64 & code.mask v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -4050,8 +4043,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4062,8 +4054,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4072,8 +4063,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -4085,8 +4075,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -4104,23 +4093,23 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldUint: case opStructFieldUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyUint: case opStructFieldOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -4128,7 +4117,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4139,7 +4128,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4148,7 +4137,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -4160,7 +4149,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -4653,8 +4642,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
case opStructEndInt: case opStructEndInt:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndOmitEmptyInt: case opStructEndOmitEmptyInt:
@ -4663,7 +4651,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
v := u64 & code.mask v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4679,8 +4667,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4691,8 +4678,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4701,8 +4687,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4722,8 +4707,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEnd(b) b = appendStructEnd(b)
@ -4741,23 +4725,23 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndUint: case opStructEndUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndOmitEmptyUint: case opStructEndOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4773,7 +4757,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4784,7 +4768,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4793,7 +4777,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.key...) b = append(b, code.key...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4813,7 +4797,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEnd(b) b = appendStructEnd(b)
@ -4831,7 +4815,7 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next

View File

@ -27,18 +27,23 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.next code = code.next
store(ctxptr, code.idx, ptrToPtr(ptr)) store(ctxptr, code.idx, ptrToPtr(ptr))
case opInt: case opInt:
p := load(ctxptr, code.idx) b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
u64 := ptrToUint64(p)
if (u64>>code.rshiftNum)&1 == 1 {
v := ^u64&code.mask + 1
b = appendInt(b, -v, true)
} else {
b = appendInt(b, u64&code.mask, (u64>>code.rshiftNum)&1 == 1)
}
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opUint: case opUint:
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx))&code.mask) b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = encodeComma(b)
code = code.next
case opIntString:
b = append(b, '"')
b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeComma(b)
code = code.next
case opUintString:
b = append(b, '"')
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opFloat32: case opFloat32:
@ -542,8 +547,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
} else { } else {
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -567,7 +571,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, v, v>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -588,8 +592,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -598,8 +601,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly: case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly:
@ -609,7 +611,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
v := u64 & code.mask v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -618,8 +620,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -640,8 +641,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -660,8 +660,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p = ptrToPtr(p + code.offset) p = ptrToPtr(p + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -684,8 +683,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -708,8 +706,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -728,8 +725,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -751,8 +747,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -773,8 +768,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -788,8 +782,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -810,7 +803,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -828,8 +821,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -840,8 +832,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -856,7 +847,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -868,8 +859,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -888,8 +878,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -907,8 +896,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -927,8 +915,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -947,8 +934,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -966,8 +952,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -986,8 +971,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p + code.offset) b = appendInt(b, ptrToUint64(p+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -1004,7 +988,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
} else { } else {
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1022,12 +1006,13 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.end.next code = code.end.next
} else { } else {
b = append(b, '{') b = append(b, '{')
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1048,7 +1033,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1057,16 +1042,17 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly: case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{') b = append(b, '{')
v := ptrToUint64(p) & code.mask u64 := ptrToUint64(p)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -1075,7 +1061,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1096,7 +1082,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -1115,7 +1101,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p = ptrToPtr(p + code.offset) p = ptrToPtr(p + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -1138,7 +1124,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -1161,7 +1147,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1180,7 +1166,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -1202,7 +1188,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -1223,7 +1209,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeComma(b) b = encodeComma(b)
@ -1237,7 +1223,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1252,12 +1238,13 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1275,7 +1262,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1286,7 +1273,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.end.next code = code.end.next
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1295,12 +1282,13 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1312,7 +1300,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1331,7 +1319,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1349,7 +1337,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1368,7 +1356,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -1387,7 +1375,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -1405,7 +1393,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
code = code.nextField code = code.nextField
} else { } else {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -1424,7 +1412,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p+code.offset)&code.mask) b = appendUint(b, ptrToUint64(p+code.offset), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -3972,8 +3960,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
case opStructFieldInt: case opStructFieldInt:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyInt: case opStructFieldOmitEmptyInt:
@ -3982,7 +3969,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
v := u64 & code.mask v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -3990,8 +3977,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4002,8 +3988,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4012,8 +3997,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -4025,8 +4009,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -4044,23 +4027,23 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldUint: case opStructFieldUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyUint: case opStructFieldOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -4068,7 +4051,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4079,7 +4062,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -4088,7 +4071,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -4100,7 +4083,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeComma(b) b = encodeComma(b)
@ -4602,8 +4585,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
case opStructEndInt: case opStructEndInt:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndOmitEmptyInt: case opStructEndOmitEmptyInt:
@ -4612,7 +4594,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
v := u64 & code.mask v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4628,8 +4610,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4640,8 +4621,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4650,8 +4630,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4671,8 +4650,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEnd(b) b = appendStructEnd(b)
@ -4690,23 +4668,23 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndUint: case opStructEndUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndOmitEmptyUint: case opStructEndOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, v) b = appendUint(b, u64, code)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4722,7 +4700,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4733,7 +4711,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
@ -4742,7 +4720,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
p := ptrToPtr(ptr + code.offset) p := ptrToPtr(ptr + code.offset)
if p != 0 { if p != 0 {
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4762,7 +4740,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEnd(b) b = appendStructEnd(b)
@ -4780,7 +4758,7 @@ func encodeRunEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, o
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next

View File

@ -26,12 +26,23 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
code = code.next code = code.next
store(ctxptr, code.idx, ptrToPtr(ptr)) store(ctxptr, code.idx, ptrToPtr(ptr))
case opInt: case opInt:
u64 := ptrToUint64(load(ctxptr, code.idx)) b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opUint: case opUint:
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx))&code.mask) b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = encodeIndentComma(b)
code = code.next
case opIntString:
b = append(b, '"')
b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeIndentComma(b)
code = code.next
case opUintString:
b = append(b, '"')
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opFloat32: case opFloat32:
@ -568,8 +579,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -595,7 +605,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -617,8 +627,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -629,8 +638,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly: case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly:
@ -642,7 +650,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -652,8 +660,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -676,8 +683,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -698,8 +704,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -724,8 +729,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -750,8 +754,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -772,8 +775,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -797,8 +799,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -821,8 +822,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -838,8 +838,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -859,7 +858,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -876,8 +875,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -890,8 +888,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -908,7 +905,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -922,8 +919,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr) b = appendInt(b, ptrToUint64(ptr), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -944,8 +940,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -965,8 +960,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -987,8 +981,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1009,8 +1002,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1030,8 +1022,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1052,8 +1043,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1072,7 +1062,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1090,14 +1080,15 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
code = code.end.next code = code.end.next
} else { } else {
b = append(b, '{', '\n') b = append(b, '{', '\n')
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1119,7 +1110,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1130,18 +1121,19 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly: case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{', '\n') b = append(b, '{', '\n')
v := ptrToUint64(p) & code.mask u64 := ptrToUint64(p)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -1151,7 +1143,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1174,7 +1166,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1195,7 +1187,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -1220,7 +1212,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -1245,7 +1237,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1266,7 +1258,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -1290,7 +1282,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1313,7 +1305,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1329,7 +1321,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1341,14 +1333,15 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1365,7 +1358,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1378,7 +1371,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(ptr)&code.mask) b = appendUint(b, ptrToUint64(ptr), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1387,14 +1380,15 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr) & code.mask u64 := ptrToUint64(ptr)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1408,7 +1402,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr)&code.mask) b = appendUint(b, ptrToUint64(ptr), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1429,7 +1423,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1449,7 +1443,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1470,7 +1464,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1491,7 +1485,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1511,7 +1505,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1532,7 +1526,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -3661,8 +3655,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyInt: case opStructFieldOmitEmptyInt:
@ -3673,7 +3666,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3682,8 +3675,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3696,8 +3688,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3708,8 +3699,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3723,8 +3713,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -3734,17 +3723,18 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyUint: case opStructFieldOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3753,7 +3743,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3766,7 +3756,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3777,7 +3767,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3791,7 +3781,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -4404,8 +4394,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
case opStructEndOmitEmptyInt: case opStructEndOmitEmptyInt:
@ -4416,7 +4405,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4439,8 +4428,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4453,8 +4441,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4465,8 +4452,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4494,8 +4480,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
@ -4505,17 +4490,18 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
case opStructEndOmitEmptyUint: case opStructEndOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4538,7 +4524,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4551,7 +4537,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4562,7 +4548,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4590,7 +4576,7 @@ func encodeRunEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)

View File

@ -26,12 +26,23 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
code = code.next code = code.next
store(ctxptr, code.idx, ptrToPtr(ptr)) store(ctxptr, code.idx, ptrToPtr(ptr))
case opInt: case opInt:
u64 := ptrToUint64(load(ctxptr, code.idx)) b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opUint: case opUint:
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx))&code.mask) b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = encodeIndentComma(b)
code = code.next
case opIntString:
b = append(b, '"')
b = appendInt(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeIndentComma(b)
code = code.next
case opUintString:
b = append(b, '"')
b = appendUint(b, ptrToUint64(load(ctxptr, code.idx)), code)
b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opFloat32: case opFloat32:
@ -568,8 +579,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -595,7 +605,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -617,8 +627,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -629,8 +638,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly: case opStructFieldPtrHeadOmitEmptyIntOnly, opStructFieldHeadOmitEmptyIntOnly:
@ -642,7 +650,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -652,8 +660,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -676,8 +683,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -698,8 +704,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -724,8 +729,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -750,8 +754,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -772,8 +775,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -797,8 +799,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -821,8 +822,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -838,8 +838,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -859,7 +858,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -876,8 +875,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -890,8 +888,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -908,7 +905,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -922,8 +919,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(ptr) b = appendInt(b, ptrToUint64(ptr), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -944,8 +940,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -965,8 +960,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -987,8 +981,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1009,8 +1002,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1030,8 +1022,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1052,8 +1043,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1072,7 +1062,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1090,14 +1080,15 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
code = code.end.next code = code.end.next
} else { } else {
b = append(b, '{', '\n') b = append(b, '{', '\n')
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1119,7 +1110,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1130,18 +1121,19 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly: case opStructFieldPtrHeadOmitEmptyUintOnly, opStructFieldHeadOmitEmptyUintOnly:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
b = append(b, '{', '\n') b = append(b, '{', '\n')
v := ptrToUint64(p) & code.mask u64 := ptrToUint64(p)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -1151,7 +1143,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1174,7 +1166,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1195,7 +1187,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -1220,7 +1212,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
} }
@ -1245,7 +1237,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1266,7 +1258,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent+1) b = appendIndent(ctx, b, code.indent+1)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -1290,7 +1282,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1313,7 +1305,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1329,7 +1321,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1341,14 +1333,15 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1365,7 +1358,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1378,7 +1371,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(ptr)&code.mask) b = appendUint(b, ptrToUint64(ptr), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1387,14 +1380,15 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if ptr == 0 { if ptr == 0 {
code = code.end.next code = code.end.next
} else { } else {
v := ptrToUint64(ptr) & code.mask u64 := ptrToUint64(ptr)
v := u64 & code.mask
if v == 0 { if v == 0 {
code = code.nextField code = code.nextField
} else { } else {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1408,7 +1402,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(ptr)&code.mask) b = appendUint(b, ptrToUint64(ptr), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1429,7 +1423,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1449,7 +1443,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1470,7 +1464,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -1491,7 +1485,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -1511,7 +1505,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
} }
@ -1532,7 +1526,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -3661,8 +3655,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyInt: case opStructFieldOmitEmptyInt:
@ -3673,7 +3666,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3682,8 +3675,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3696,8 +3688,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3708,8 +3699,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3723,8 +3713,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -3734,17 +3723,18 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyUint: case opStructFieldOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3753,7 +3743,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3766,7 +3756,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
@ -3777,7 +3767,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = encodeIndentComma(b) b = encodeIndentComma(b)
} }
code = code.next code = code.next
@ -3791,7 +3781,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = encodeIndentComma(b) b = encodeIndentComma(b)
@ -4403,8 +4393,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
case opStructEndOmitEmptyInt: case opStructEndOmitEmptyInt:
@ -4415,7 +4404,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendInt(b, v, u64>>code.rshiftNum == 1) b = appendInt(b, u64, code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4438,8 +4427,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
u64 := ptrToUint64(ptr + code.offset) b = appendInt(b, ptrToUint64(ptr+code.offset), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4452,8 +4440,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4464,8 +4451,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4493,8 +4479,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
u64 := ptrToUint64(p) b = appendInt(b, ptrToUint64(p), code)
b = appendInt(b, u64&code.mask, u64>>code.rshiftNum == 1)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
@ -4504,17 +4489,18 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
case opStructEndOmitEmptyUint: case opStructEndOmitEmptyUint:
ptr := load(ctxptr, code.headIdx) ptr := load(ctxptr, code.headIdx)
v := ptrToUint64(ptr+code.offset) & code.mask u64 := ptrToUint64(ptr + code.offset)
v := u64 & code.mask
if v != 0 { if v != 0 {
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, v) b = appendUint(b, u64, code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4537,7 +4523,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ', '"') b = append(b, ' ', '"')
b = appendUint(b, ptrToUint64(ptr+code.offset)&code.mask) b = appendUint(b, ptrToUint64(ptr+code.offset), code)
b = append(b, '"') b = append(b, '"')
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4550,7 +4536,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
code = code.next code = code.next
@ -4561,7 +4547,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = appendIndent(ctx, b, code.indent) b = appendIndent(ctx, b, code.indent)
b = append(b, code.key...) b = append(b, code.key...)
b = append(b, ' ') b = append(b, ' ')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -4589,7 +4575,7 @@ func encodeRunIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, op
b = encodeNull(b) b = encodeNull(b)
} else { } else {
b = append(b, '"') b = append(b, '"')
b = appendUint(b, ptrToUint64(p)&code.mask) b = appendUint(b, ptrToUint64(p), code)
b = append(b, '"') b = append(b, '"')
} }
b = appendStructEndIndent(ctx, b, code.indent-1) b = appendStructEndIndent(ctx, b, code.indent-1)