forked from mirror/go-json
Refactor HeadInt operation
This commit is contained in:
parent
116df927e2
commit
fbfaea2c88
93
encode_vm.go
93
encode_vm.go
|
@ -596,67 +596,64 @@ func encodeRun(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet, opt Enco
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case opStructFieldPtrHeadInt:
|
case opStructFieldPtrHeadInt:
|
||||||
store(ctxptr, code.idx, ptrToPtr(load(ctxptr, code.idx)))
|
p := ptrToPtr(load(ctxptr, code.idx))
|
||||||
|
if p == 0 {
|
||||||
|
b = encodeNull(b)
|
||||||
|
b = encodeComma(b)
|
||||||
|
code = code.end.next
|
||||||
|
break
|
||||||
|
}
|
||||||
|
store(ctxptr, code.idx, p)
|
||||||
fallthrough
|
fallthrough
|
||||||
case opStructFieldHeadInt:
|
case opStructFieldHeadInt:
|
||||||
ptr := load(ctxptr, code.idx)
|
p := load(ctxptr, code.idx) + code.offset
|
||||||
if ptr == 0 {
|
b = append(b, '{')
|
||||||
|
b = append(b, code.key...)
|
||||||
|
b = appendInt(b, ptrToUint64(p), code)
|
||||||
|
b = encodeComma(b)
|
||||||
|
code = code.next
|
||||||
|
case opStructFieldPtrHeadOmitEmptyInt:
|
||||||
|
p := ptrToPtr(load(ctxptr, code.idx))
|
||||||
|
if p == 0 {
|
||||||
b = encodeNull(b)
|
b = encodeNull(b)
|
||||||
b = encodeComma(b)
|
b = encodeComma(b)
|
||||||
code = code.end.next
|
code = code.end.next
|
||||||
} else {
|
break
|
||||||
b = append(b, '{')
|
|
||||||
b = append(b, code.key...)
|
|
||||||
b = appendInt(b, ptrToUint64(ptr+code.offset), code)
|
|
||||||
b = encodeComma(b)
|
|
||||||
code = code.next
|
|
||||||
}
|
|
||||||
case opStructFieldPtrHeadOmitEmptyInt:
|
|
||||||
ptr := load(ctxptr, code.idx)
|
|
||||||
if ptr != 0 {
|
|
||||||
store(ctxptr, code.idx, ptrToPtr(ptr))
|
|
||||||
}
|
}
|
||||||
|
store(ctxptr, code.idx, p)
|
||||||
fallthrough
|
fallthrough
|
||||||
case opStructFieldHeadOmitEmptyInt:
|
case opStructFieldHeadOmitEmptyInt:
|
||||||
ptr := load(ctxptr, code.idx)
|
p := load(ctxptr, code.idx) + code.offset
|
||||||
if ptr == 0 {
|
b = append(b, '{')
|
||||||
b = encodeNull(b)
|
u64 := ptrToUint64(p)
|
||||||
b = encodeComma(b)
|
v := u64 & code.mask
|
||||||
code = code.end.next
|
if v == 0 {
|
||||||
|
code = code.nextField
|
||||||
} else {
|
} else {
|
||||||
b = append(b, '{')
|
|
||||||
u64 := ptrToUint64(ptr + code.offset)
|
|
||||||
v := u64 & code.mask
|
|
||||||
if v == 0 {
|
|
||||||
code = code.nextField
|
|
||||||
} else {
|
|
||||||
b = append(b, code.key...)
|
|
||||||
b = appendInt(b, u64, code)
|
|
||||||
b = encodeComma(b)
|
|
||||||
code = code.next
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case opStructFieldPtrHeadStringTagInt:
|
|
||||||
ptr := load(ctxptr, code.idx)
|
|
||||||
if ptr != 0 {
|
|
||||||
store(ctxptr, code.idx, ptrToPtr(ptr))
|
|
||||||
}
|
|
||||||
fallthrough
|
|
||||||
case opStructFieldHeadStringTagInt:
|
|
||||||
ptr := load(ctxptr, code.idx)
|
|
||||||
if ptr == 0 {
|
|
||||||
b = encodeNull(b)
|
|
||||||
b = encodeComma(b)
|
|
||||||
code = code.end.next
|
|
||||||
} else {
|
|
||||||
b = append(b, '{')
|
|
||||||
b = append(b, code.key...)
|
b = append(b, code.key...)
|
||||||
b = append(b, '"')
|
b = appendInt(b, u64, code)
|
||||||
b = appendInt(b, ptrToUint64(ptr+code.offset), code)
|
|
||||||
b = append(b, '"')
|
|
||||||
b = encodeComma(b)
|
b = encodeComma(b)
|
||||||
code = code.next
|
code = code.next
|
||||||
}
|
}
|
||||||
|
case opStructFieldPtrHeadStringTagInt:
|
||||||
|
p := ptrToPtr(load(ctxptr, code.idx))
|
||||||
|
if p == 0 {
|
||||||
|
b = encodeNull(b)
|
||||||
|
b = encodeComma(b)
|
||||||
|
code = code.end.next
|
||||||
|
break
|
||||||
|
}
|
||||||
|
store(ctxptr, code.idx, p)
|
||||||
|
fallthrough
|
||||||
|
case opStructFieldHeadStringTagInt:
|
||||||
|
p := load(ctxptr, code.idx) + code.offset
|
||||||
|
b = append(b, '{')
|
||||||
|
b = append(b, code.key...)
|
||||||
|
b = append(b, '"')
|
||||||
|
b = appendInt(b, ptrToUint64(p), code)
|
||||||
|
b = append(b, '"')
|
||||||
|
b = encodeComma(b)
|
||||||
|
code = code.next
|
||||||
case opStructFieldPtrHeadIntOnly, opStructFieldHeadIntOnly:
|
case opStructFieldPtrHeadIntOnly, opStructFieldHeadIntOnly:
|
||||||
p := load(ctxptr, code.idx)
|
p := load(ctxptr, code.idx)
|
||||||
b = append(b, '{')
|
b = append(b, '{')
|
||||||
|
|
Loading…
Reference in New Issue