Add int32/int64 test cases

This commit is contained in:
Masaaki Goshima 2021-01-09 20:14:34 +09:00
parent b132de9821
commit 8d4029d900
2 changed files with 1630 additions and 46 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2039,24 +2039,13 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, code *opcode) ([]byte
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldPtrHeadInt32: case opStructFieldPtrHeadInt32:
p := load(ctxptr, code.idx) store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
if p == 0 {
b = encodeNull(b)
b = encodeComma(b)
code = code.end.next
break
}
store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough fallthrough
case opStructFieldHeadInt32: case opStructFieldHeadInt32:
ptr := load(ctxptr, code.idx) ptr := load(ctxptr, code.idx)
if ptr == 0 { if ptr == 0 {
if code.op == opStructFieldPtrHeadInt32 {
b = encodeNull(b) b = encodeNull(b)
b = encodeComma(b) b = encodeComma(b)
} else {
b = append(b, '{', '}', ',')
}
code = code.end.next code = code.end.next
} else { } else {
b = append(b, '{') b = append(b, '{')
@ -2065,7 +2054,59 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, code *opcode) ([]byte
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
case opStructFieldPtrHeadInt32Only, opStructFieldHeadInt32Only:
p := load(ctxptr, code.idx)
b = append(b, '{')
b = append(b, code.key...)
b = appendInt(b, int64(e.ptrToInt32(p)))
b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrHeadInt32: case opStructEscapedFieldPtrHeadInt32:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructEscapedFieldHeadInt32:
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.escapedKey...)
b = appendInt(b, int64(e.ptrToInt32(ptr+code.offset)))
b = encodeComma(b)
code = code.next
}
case opStructEscapedFieldPtrHeadInt32Only, opStructEscapedFieldHeadInt32Only:
p := load(ctxptr, code.idx)
b = append(b, '{')
b = append(b, code.escapedKey...)
b = appendInt(b, int64(e.ptrToInt32(p)))
b = encodeComma(b)
code = code.next
case opStructFieldPtrHeadInt32Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructFieldHeadInt32Ptr:
p := load(ctxptr, code.idx)
if p == 0 {
b = encodeNull(b)
b = encodeComma(b)
code = code.end.next
break
} else {
b = append(b, '{')
b = append(b, code.key...)
p = e.ptrToPtr(p)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrHeadInt32PtrOnly:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
@ -2075,23 +2116,60 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, code *opcode) ([]byte
} }
store(ctxptr, code.idx, e.ptrToPtr(p)) store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough fallthrough
case opStructEscapedFieldHeadInt32: case opStructFieldHeadInt32PtrOnly:
ptr := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if ptr == 0 { b = append(b, '{')
if code.op == opStructEscapedFieldPtrHeadInt32 { b = append(b, code.key...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrHeadInt32Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructEscapedFieldHeadInt32Ptr:
p := load(ctxptr, code.idx)
if p == 0 {
b = encodeNull(b) b = encodeNull(b)
b = encodeComma(b) b = encodeComma(b)
} else {
b = append(b, '{', '}', ',')
}
code = code.end.next code = code.end.next
break
} else { } else {
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, int64(e.ptrToInt32(ptr+code.offset))) p = e.ptrToPtr(p)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
}
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructEscapedFieldPtrHeadInt32PtrOnly:
p := load(ctxptr, code.idx)
if p == 0 {
b = encodeNull(b)
b = encodeComma(b)
code = code.end.next
break
} }
store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough
case opStructEscapedFieldHeadInt32PtrOnly:
p := load(ctxptr, code.idx)
b = append(b, '{')
b = append(b, code.escapedKey...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrAnonymousHeadInt32: case opStructFieldPtrAnonymousHeadInt32:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx))) store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough fallthrough
@ -2118,25 +2196,106 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, code *opcode) ([]byte
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
case opStructFieldPtrHeadInt64: case opStructFieldPtrAnonymousHeadInt32Only, opStructFieldAnonymousHeadInt32Only:
ptr := load(ctxptr, code.idx)
if ptr == 0 {
code = code.end.next
} else {
b = append(b, code.key...)
b = appendInt(b, int64(e.ptrToInt32(ptr+code.offset)))
b = encodeComma(b)
code = code.next
}
case opStructEscapedFieldPtrAnonymousHeadInt32Only, opStructEscapedFieldAnonymousHeadInt32Only:
ptr := load(ctxptr, code.idx)
if ptr == 0 {
code = code.end.next
} else {
b = append(b, code.escapedKey...)
b = appendInt(b, int64(e.ptrToInt32(ptr+code.offset)))
b = encodeComma(b)
code = code.next
}
case opStructFieldPtrAnonymousHeadInt32Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructFieldAnonymousHeadInt32Ptr:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next
break
}
b = append(b, code.key...)
p = e.ptrToPtr(p)
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
b = encodeComma(b) b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrAnonymousHeadInt32Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructEscapedFieldAnonymousHeadInt32Ptr:
p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next
break
}
b = append(b, code.escapedKey...)
p = e.ptrToPtr(p)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrAnonymousHeadInt32PtrOnly:
p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next code = code.end.next
break break
} }
store(ctxptr, code.idx, e.ptrToPtr(p)) store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough fallthrough
case opStructFieldAnonymousHeadInt32PtrOnly:
p := load(ctxptr, code.idx)
b = append(b, code.key...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrAnonymousHeadInt32PtrOnly:
p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next
break
}
store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough
case opStructEscapedFieldAnonymousHeadInt32PtrOnly:
p := load(ctxptr, code.idx)
b = append(b, code.escapedKey...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, int64(e.ptrToInt32(p+code.offset)))
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrHeadInt64:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructFieldHeadInt64: case opStructFieldHeadInt64:
ptr := load(ctxptr, code.idx) ptr := load(ctxptr, code.idx)
if ptr == 0 { if ptr == 0 {
if code.op == opStructFieldPtrHeadInt64 {
b = encodeNull(b) b = encodeNull(b)
b = encodeComma(b) b = encodeComma(b)
} else {
b = append(b, '{', '}', ',')
}
code = code.end.next code = code.end.next
} else { } else {
b = append(b, '{') b = append(b, '{')
@ -2145,7 +2304,59 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, code *opcode) ([]byte
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
case opStructFieldPtrHeadInt64Only, opStructFieldHeadInt64Only:
p := load(ctxptr, code.idx)
b = append(b, '{')
b = append(b, code.key...)
b = appendInt(b, e.ptrToInt64(p))
b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrHeadInt64: case opStructEscapedFieldPtrHeadInt64:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructEscapedFieldHeadInt64:
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.escapedKey...)
b = appendInt(b, e.ptrToInt64(ptr+code.offset))
b = encodeComma(b)
code = code.next
}
case opStructEscapedFieldPtrHeadInt64Only, opStructEscapedFieldHeadInt64Only:
p := load(ctxptr, code.idx)
b = append(b, '{')
b = append(b, code.escapedKey...)
b = appendInt(b, e.ptrToInt64(p))
b = encodeComma(b)
code = code.next
case opStructFieldPtrHeadInt64Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructFieldHeadInt64Ptr:
p := load(ctxptr, code.idx)
if p == 0 {
b = encodeNull(b)
b = encodeComma(b)
code = code.end.next
break
} else {
b = append(b, '{')
b = append(b, code.key...)
p = e.ptrToPtr(p)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrHeadInt64PtrOnly:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p == 0 { if p == 0 {
b = encodeNull(b) b = encodeNull(b)
@ -2155,23 +2366,60 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, code *opcode) ([]byte
} }
store(ctxptr, code.idx, e.ptrToPtr(p)) store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough fallthrough
case opStructEscapedFieldHeadInt64: case opStructFieldHeadInt64PtrOnly:
ptr := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if ptr == 0 { b = append(b, '{')
if code.op == opStructEscapedFieldPtrHeadInt64 { b = append(b, code.key...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrHeadInt64Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructEscapedFieldHeadInt64Ptr:
p := load(ctxptr, code.idx)
if p == 0 {
b = encodeNull(b) b = encodeNull(b)
b = encodeComma(b) b = encodeComma(b)
} else {
b = append(b, '{', '}', ',')
}
code = code.end.next code = code.end.next
break
} else { } else {
b = append(b, '{') b = append(b, '{')
b = append(b, code.escapedKey...) b = append(b, code.escapedKey...)
b = appendInt(b, e.ptrToInt64(ptr+code.offset)) p = e.ptrToPtr(p)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
}
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructEscapedFieldPtrHeadInt64PtrOnly:
p := load(ctxptr, code.idx)
if p == 0 {
b = encodeNull(b)
b = encodeComma(b)
code = code.end.next
break
} }
store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough
case opStructEscapedFieldHeadInt64PtrOnly:
p := load(ctxptr, code.idx)
b = append(b, '{')
b = append(b, code.escapedKey...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrAnonymousHeadInt64: case opStructFieldPtrAnonymousHeadInt64:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx))) store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough fallthrough
@ -2198,6 +2446,98 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, code *opcode) ([]byte
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
case opStructFieldPtrAnonymousHeadInt64Only, opStructFieldAnonymousHeadInt64Only:
ptr := load(ctxptr, code.idx)
if ptr == 0 {
code = code.end.next
} else {
b = append(b, code.key...)
b = appendInt(b, e.ptrToInt64(ptr+code.offset))
b = encodeComma(b)
code = code.next
}
case opStructEscapedFieldPtrAnonymousHeadInt64Only, opStructEscapedFieldAnonymousHeadInt64Only:
ptr := load(ctxptr, code.idx)
if ptr == 0 {
code = code.end.next
} else {
b = append(b, code.escapedKey...)
b = appendInt(b, e.ptrToInt64(ptr+code.offset))
b = encodeComma(b)
code = code.next
}
case opStructFieldPtrAnonymousHeadInt64Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructFieldAnonymousHeadInt64Ptr:
p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next
break
}
b = append(b, code.key...)
p = e.ptrToPtr(p)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrAnonymousHeadInt64Ptr:
store(ctxptr, code.idx, e.ptrToPtr(load(ctxptr, code.idx)))
fallthrough
case opStructEscapedFieldAnonymousHeadInt64Ptr:
p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next
break
}
b = append(b, code.escapedKey...)
p = e.ptrToPtr(p)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrAnonymousHeadInt64PtrOnly:
p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next
break
}
store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough
case opStructFieldAnonymousHeadInt64PtrOnly:
p := load(ctxptr, code.idx)
b = append(b, code.key...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
b = encodeComma(b)
code = code.next
case opStructEscapedFieldPtrAnonymousHeadInt64PtrOnly:
p := load(ctxptr, code.idx)
if p == 0 {
code = code.end.next
break
}
store(ctxptr, code.idx, e.ptrToPtr(p))
fallthrough
case opStructEscapedFieldAnonymousHeadInt64PtrOnly:
p := load(ctxptr, code.idx)
b = append(b, code.escapedKey...)
if p == 0 {
b = encodeNull(b)
} else {
b = appendInt(b, e.ptrToInt64(p+code.offset))
}
b = encodeComma(b)
code = code.next
case opStructFieldPtrHeadUint: case opStructFieldPtrHeadUint:
p := load(ctxptr, code.idx) p := load(ctxptr, code.idx)
if p == 0 { if p == 0 {