mirror of
https://github.com/json-iterator/go.git
synced 2025-04-20 11:28:49 +02:00
fix #236 case sensitive when both upper case and lower case presents
This commit is contained in:
parent
64cc784089
commit
24bb2eee9f
@ -45,15 +45,19 @@ func (iter *Iterator) ReadObject() (ret string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (iter *Iterator) readFieldHash() int32 {
|
// CaseInsensitive
|
||||||
|
func (iter *Iterator) readFieldHash() int64 {
|
||||||
hash := int64(0x811c9dc5)
|
hash := int64(0x811c9dc5)
|
||||||
c := iter.nextToken()
|
c := iter.nextToken()
|
||||||
if c == '"' {
|
if c != '"' {
|
||||||
|
iter.ReportError("readFieldHash", `expect ", but found `+string([]byte{c}))
|
||||||
|
return 0
|
||||||
|
}
|
||||||
for {
|
for {
|
||||||
for i := iter.head; i < iter.tail; i++ {
|
for i := iter.head; i < iter.tail; i++ {
|
||||||
// require ascii string and no escape
|
// require ascii string and no escape
|
||||||
b := iter.buf[i]
|
b := iter.buf[i]
|
||||||
if !iter.cfg.objectFieldMustBeSimpleString && b == '\\' {
|
if b == '\\' {
|
||||||
iter.head = i
|
iter.head = i
|
||||||
for _, b := range iter.readStringSlowPath() {
|
for _, b := range iter.readStringSlowPath() {
|
||||||
if 'A' <= b && b <= 'Z' {
|
if 'A' <= b && b <= 'Z' {
|
||||||
@ -67,7 +71,7 @@ func (iter *Iterator) readFieldHash() int32 {
|
|||||||
iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c}))
|
iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c}))
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
return int32(hash)
|
return hash
|
||||||
}
|
}
|
||||||
if b == '"' {
|
if b == '"' {
|
||||||
iter.head = i + 1
|
iter.head = i + 1
|
||||||
@ -76,7 +80,7 @@ func (iter *Iterator) readFieldHash() int32 {
|
|||||||
iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c}))
|
iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c}))
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
return int32(hash)
|
return hash
|
||||||
}
|
}
|
||||||
if 'A' <= b && b <= 'Z' {
|
if 'A' <= b && b <= 'Z' {
|
||||||
b += 'a' - 'A'
|
b += 'a' - 'A'
|
||||||
@ -89,18 +93,15 @@ func (iter *Iterator) readFieldHash() int32 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
iter.ReportError("readFieldHash", `expect ", but found `+string([]byte{c}))
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func calcHash(str string) int32 {
|
func calcHash(str string) int64 {
|
||||||
hash := int64(0x811c9dc5)
|
hash := int64(0x811c9dc5)
|
||||||
for _, b := range str {
|
for _, b := range str {
|
||||||
hash ^= int64(unicode.ToLower(b))
|
hash ^= int64(unicode.ToLower(b))
|
||||||
hash *= 0x1000193
|
hash *= 0x1000193
|
||||||
}
|
}
|
||||||
return int32(hash)
|
return int64(hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadObjectCB read object with callback, the key is ascii only and field name not copied
|
// ReadObjectCB read object with callback, the key is ascii only and field name not copied
|
||||||
|
@ -4,7 +4,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -97,7 +96,7 @@ func decoderOfStruct(cfg *frozenConfig, prefix string, typ reflect.Type) ValDeco
|
|||||||
}
|
}
|
||||||
fields := map[string]*structFieldDecoder{}
|
fields := map[string]*structFieldDecoder{}
|
||||||
for k, binding := range bindings {
|
for k, binding := range bindings {
|
||||||
fields[strings.ToLower(k)] = binding.Decoder.(*structFieldDecoder)
|
fields[k] = binding.Decoder.(*structFieldDecoder)
|
||||||
}
|
}
|
||||||
return createStructDecoder(cfg, typ, fields)
|
return createStructDecoder(cfg, typ, fields)
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
if cfg.disallowUnknownFields {
|
if cfg.disallowUnknownFields {
|
||||||
return &generalStructDecoder{typ: typ, fields: fields, disallowUnknownFields: true}
|
return &generalStructDecoder{typ: typ, fields: fields, disallowUnknownFields: true}
|
||||||
}
|
}
|
||||||
knownHash := map[int32]struct{}{
|
knownHash := map[int64]struct{}{
|
||||||
0: {},
|
0: {},
|
||||||
}
|
}
|
||||||
switch len(fields) {
|
switch len(fields) {
|
||||||
@ -29,8 +29,8 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
return &oneFieldStructDecoder{typ, fieldHash, fieldDecoder}
|
return &oneFieldStructDecoder{typ, fieldHash, fieldDecoder}
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
var fieldHash1 int32
|
var fieldHash1 int64
|
||||||
var fieldHash2 int32
|
var fieldHash2 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
for fieldName, fieldDecoder := range fields {
|
for fieldName, fieldDecoder := range fields {
|
||||||
@ -50,9 +50,9 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
}
|
}
|
||||||
return &twoFieldsStructDecoder{typ, fieldHash1, fieldDecoder1, fieldHash2, fieldDecoder2}
|
return &twoFieldsStructDecoder{typ, fieldHash1, fieldDecoder1, fieldHash2, fieldDecoder2}
|
||||||
case 3:
|
case 3:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -79,10 +79,10 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
fieldName2, fieldDecoder2,
|
fieldName2, fieldDecoder2,
|
||||||
fieldName3, fieldDecoder3}
|
fieldName3, fieldDecoder3}
|
||||||
case 4:
|
case 4:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldName4 int32
|
var fieldName4 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -114,11 +114,11 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
fieldName3, fieldDecoder3,
|
fieldName3, fieldDecoder3,
|
||||||
fieldName4, fieldDecoder4}
|
fieldName4, fieldDecoder4}
|
||||||
case 5:
|
case 5:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldName4 int32
|
var fieldName4 int64
|
||||||
var fieldName5 int32
|
var fieldName5 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -155,12 +155,12 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
fieldName4, fieldDecoder4,
|
fieldName4, fieldDecoder4,
|
||||||
fieldName5, fieldDecoder5}
|
fieldName5, fieldDecoder5}
|
||||||
case 6:
|
case 6:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldName4 int32
|
var fieldName4 int64
|
||||||
var fieldName5 int32
|
var fieldName5 int64
|
||||||
var fieldName6 int32
|
var fieldName6 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -202,13 +202,13 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
fieldName5, fieldDecoder5,
|
fieldName5, fieldDecoder5,
|
||||||
fieldName6, fieldDecoder6}
|
fieldName6, fieldDecoder6}
|
||||||
case 7:
|
case 7:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldName4 int32
|
var fieldName4 int64
|
||||||
var fieldName5 int32
|
var fieldName5 int64
|
||||||
var fieldName6 int32
|
var fieldName6 int64
|
||||||
var fieldName7 int32
|
var fieldName7 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -255,14 +255,14 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
fieldName6, fieldDecoder6,
|
fieldName6, fieldDecoder6,
|
||||||
fieldName7, fieldDecoder7}
|
fieldName7, fieldDecoder7}
|
||||||
case 8:
|
case 8:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldName4 int32
|
var fieldName4 int64
|
||||||
var fieldName5 int32
|
var fieldName5 int64
|
||||||
var fieldName6 int32
|
var fieldName6 int64
|
||||||
var fieldName7 int32
|
var fieldName7 int64
|
||||||
var fieldName8 int32
|
var fieldName8 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -314,15 +314,15 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
fieldName7, fieldDecoder7,
|
fieldName7, fieldDecoder7,
|
||||||
fieldName8, fieldDecoder8}
|
fieldName8, fieldDecoder8}
|
||||||
case 9:
|
case 9:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldName4 int32
|
var fieldName4 int64
|
||||||
var fieldName5 int32
|
var fieldName5 int64
|
||||||
var fieldName6 int32
|
var fieldName6 int64
|
||||||
var fieldName7 int32
|
var fieldName7 int64
|
||||||
var fieldName8 int32
|
var fieldName8 int64
|
||||||
var fieldName9 int32
|
var fieldName9 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -379,16 +379,16 @@ func createStructDecoder(cfg *frozenConfig, typ reflect.Type, fields map[string]
|
|||||||
fieldName8, fieldDecoder8,
|
fieldName8, fieldDecoder8,
|
||||||
fieldName9, fieldDecoder9}
|
fieldName9, fieldDecoder9}
|
||||||
case 10:
|
case 10:
|
||||||
var fieldName1 int32
|
var fieldName1 int64
|
||||||
var fieldName2 int32
|
var fieldName2 int64
|
||||||
var fieldName3 int32
|
var fieldName3 int64
|
||||||
var fieldName4 int32
|
var fieldName4 int64
|
||||||
var fieldName5 int32
|
var fieldName5 int64
|
||||||
var fieldName6 int32
|
var fieldName6 int64
|
||||||
var fieldName7 int32
|
var fieldName7 int64
|
||||||
var fieldName8 int32
|
var fieldName8 int64
|
||||||
var fieldName9 int32
|
var fieldName9 int64
|
||||||
var fieldName10 int32
|
var fieldName10 int64
|
||||||
var fieldDecoder1 *structFieldDecoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 *structFieldDecoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 *structFieldDecoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
@ -463,52 +463,51 @@ func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
|
|||||||
if !iter.readObjectStart() {
|
if !iter.readObjectStart() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var fieldBytes []byte
|
decoder.decodeOneField(ptr, iter)
|
||||||
var field string
|
|
||||||
if iter.cfg.objectFieldMustBeSimpleString {
|
|
||||||
fieldBytes = iter.readObjectFieldAsBytes()
|
|
||||||
field = *(*string)(unsafe.Pointer(&fieldBytes))
|
|
||||||
} else {
|
|
||||||
field = iter.ReadString()
|
|
||||||
c := iter.nextToken()
|
|
||||||
if c != ':' {
|
|
||||||
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fieldDecoder := decoder.fields[strings.ToLower(field)]
|
|
||||||
if fieldDecoder == nil {
|
|
||||||
if decoder.disallowUnknownFields {
|
|
||||||
iter.ReportError("ReadObject", "found unknown field: "+field)
|
|
||||||
iter.Skip()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
iter.Skip()
|
|
||||||
} else {
|
|
||||||
fieldDecoder.Decode(ptr, iter)
|
|
||||||
}
|
|
||||||
for iter.nextToken() == ',' {
|
for iter.nextToken() == ',' {
|
||||||
field = iter.ReadString()
|
decoder.decodeOneField(ptr, iter)
|
||||||
c := iter.nextToken()
|
|
||||||
if c != ':' {
|
|
||||||
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
|
||||||
}
|
|
||||||
fieldDecoder = decoder.fields[strings.ToLower(field)]
|
|
||||||
if fieldDecoder == nil {
|
|
||||||
if decoder.disallowUnknownFields {
|
|
||||||
iter.ReportError("ReadObject", "found unknown field: "+field)
|
|
||||||
iter.Skip()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
iter.Skip()
|
|
||||||
} else {
|
|
||||||
fieldDecoder.Decode(ptr, iter)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if iter.Error != nil && iter.Error != io.EOF {
|
if iter.Error != nil && iter.Error != io.EOF {
|
||||||
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
|
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (decoder *generalStructDecoder) decodeOneField(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
|
var field string
|
||||||
|
var fieldDecoder *structFieldDecoder
|
||||||
|
if iter.cfg.objectFieldMustBeSimpleString {
|
||||||
|
fieldBytes := iter.ReadStringAsSlice()
|
||||||
|
field = *(*string)(unsafe.Pointer(&fieldBytes))
|
||||||
|
fieldDecoder = decoder.fields[field]
|
||||||
|
if fieldDecoder == nil {
|
||||||
|
fieldDecoder = decoder.fields[strings.ToLower(field)]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
field = iter.ReadString()
|
||||||
|
fieldDecoder = decoder.fields[field]
|
||||||
|
if fieldDecoder == nil {
|
||||||
|
fieldDecoder = decoder.fields[strings.ToLower(field)]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if fieldDecoder == nil {
|
||||||
|
msg := "found unknown field: " + field
|
||||||
|
if decoder.disallowUnknownFields {
|
||||||
|
iter.ReportError("ReadObject", msg)
|
||||||
|
}
|
||||||
|
c := iter.nextToken()
|
||||||
|
if c != ':' {
|
||||||
|
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
||||||
|
}
|
||||||
|
iter.Skip()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c := iter.nextToken()
|
||||||
|
if c != ':' {
|
||||||
|
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
||||||
|
}
|
||||||
|
fieldDecoder.Decode(ptr, iter)
|
||||||
|
}
|
||||||
|
|
||||||
type skipObjectDecoder struct {
|
type skipObjectDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
}
|
}
|
||||||
@ -524,7 +523,7 @@ func (decoder *skipObjectDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
|||||||
|
|
||||||
type oneFieldStructDecoder struct {
|
type oneFieldStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash int32
|
fieldHash int64
|
||||||
fieldDecoder *structFieldDecoder
|
fieldDecoder *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -549,9 +548,9 @@ func (decoder *oneFieldStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
|
|||||||
|
|
||||||
type twoFieldsStructDecoder struct {
|
type twoFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -579,11 +578,11 @@ func (decoder *twoFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
|||||||
|
|
||||||
type threeFieldsStructDecoder struct {
|
type threeFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,13 +612,13 @@ func (decoder *threeFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
|||||||
|
|
||||||
type fourFieldsStructDecoder struct {
|
type fourFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldHash4 int32
|
fieldHash4 int64
|
||||||
fieldDecoder4 *structFieldDecoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -651,15 +650,15 @@ func (decoder *fourFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
|||||||
|
|
||||||
type fiveFieldsStructDecoder struct {
|
type fiveFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldHash4 int32
|
fieldHash4 int64
|
||||||
fieldDecoder4 *structFieldDecoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
fieldHash5 int32
|
fieldHash5 int64
|
||||||
fieldDecoder5 *structFieldDecoder
|
fieldDecoder5 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -693,17 +692,17 @@ func (decoder *fiveFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
|||||||
|
|
||||||
type sixFieldsStructDecoder struct {
|
type sixFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldHash4 int32
|
fieldHash4 int64
|
||||||
fieldDecoder4 *structFieldDecoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
fieldHash5 int32
|
fieldHash5 int64
|
||||||
fieldDecoder5 *structFieldDecoder
|
fieldDecoder5 *structFieldDecoder
|
||||||
fieldHash6 int32
|
fieldHash6 int64
|
||||||
fieldDecoder6 *structFieldDecoder
|
fieldDecoder6 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -739,19 +738,19 @@ func (decoder *sixFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
|||||||
|
|
||||||
type sevenFieldsStructDecoder struct {
|
type sevenFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldHash4 int32
|
fieldHash4 int64
|
||||||
fieldDecoder4 *structFieldDecoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
fieldHash5 int32
|
fieldHash5 int64
|
||||||
fieldDecoder5 *structFieldDecoder
|
fieldDecoder5 *structFieldDecoder
|
||||||
fieldHash6 int32
|
fieldHash6 int64
|
||||||
fieldDecoder6 *structFieldDecoder
|
fieldDecoder6 *structFieldDecoder
|
||||||
fieldHash7 int32
|
fieldHash7 int64
|
||||||
fieldDecoder7 *structFieldDecoder
|
fieldDecoder7 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -789,21 +788,21 @@ func (decoder *sevenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
|||||||
|
|
||||||
type eightFieldsStructDecoder struct {
|
type eightFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldHash4 int32
|
fieldHash4 int64
|
||||||
fieldDecoder4 *structFieldDecoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
fieldHash5 int32
|
fieldHash5 int64
|
||||||
fieldDecoder5 *structFieldDecoder
|
fieldDecoder5 *structFieldDecoder
|
||||||
fieldHash6 int32
|
fieldHash6 int64
|
||||||
fieldDecoder6 *structFieldDecoder
|
fieldDecoder6 *structFieldDecoder
|
||||||
fieldHash7 int32
|
fieldHash7 int64
|
||||||
fieldDecoder7 *structFieldDecoder
|
fieldDecoder7 *structFieldDecoder
|
||||||
fieldHash8 int32
|
fieldHash8 int64
|
||||||
fieldDecoder8 *structFieldDecoder
|
fieldDecoder8 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -843,23 +842,23 @@ func (decoder *eightFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
|||||||
|
|
||||||
type nineFieldsStructDecoder struct {
|
type nineFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldHash4 int32
|
fieldHash4 int64
|
||||||
fieldDecoder4 *structFieldDecoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
fieldHash5 int32
|
fieldHash5 int64
|
||||||
fieldDecoder5 *structFieldDecoder
|
fieldDecoder5 *structFieldDecoder
|
||||||
fieldHash6 int32
|
fieldHash6 int64
|
||||||
fieldDecoder6 *structFieldDecoder
|
fieldDecoder6 *structFieldDecoder
|
||||||
fieldHash7 int32
|
fieldHash7 int64
|
||||||
fieldDecoder7 *structFieldDecoder
|
fieldDecoder7 *structFieldDecoder
|
||||||
fieldHash8 int32
|
fieldHash8 int64
|
||||||
fieldDecoder8 *structFieldDecoder
|
fieldDecoder8 *structFieldDecoder
|
||||||
fieldHash9 int32
|
fieldHash9 int64
|
||||||
fieldDecoder9 *structFieldDecoder
|
fieldDecoder9 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -901,25 +900,25 @@ func (decoder *nineFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
|||||||
|
|
||||||
type tenFieldsStructDecoder struct {
|
type tenFieldsStructDecoder struct {
|
||||||
typ reflect.Type
|
typ reflect.Type
|
||||||
fieldHash1 int32
|
fieldHash1 int64
|
||||||
fieldDecoder1 *structFieldDecoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldHash2 int32
|
fieldHash2 int64
|
||||||
fieldDecoder2 *structFieldDecoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldHash3 int32
|
fieldHash3 int64
|
||||||
fieldDecoder3 *structFieldDecoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldHash4 int32
|
fieldHash4 int64
|
||||||
fieldDecoder4 *structFieldDecoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
fieldHash5 int32
|
fieldHash5 int64
|
||||||
fieldDecoder5 *structFieldDecoder
|
fieldDecoder5 *structFieldDecoder
|
||||||
fieldHash6 int32
|
fieldHash6 int64
|
||||||
fieldDecoder6 *structFieldDecoder
|
fieldDecoder6 *structFieldDecoder
|
||||||
fieldHash7 int32
|
fieldHash7 int64
|
||||||
fieldDecoder7 *structFieldDecoder
|
fieldDecoder7 *structFieldDecoder
|
||||||
fieldHash8 int32
|
fieldHash8 int64
|
||||||
fieldDecoder8 *structFieldDecoder
|
fieldDecoder8 *structFieldDecoder
|
||||||
fieldHash9 int32
|
fieldHash9 int64
|
||||||
fieldDecoder9 *structFieldDecoder
|
fieldDecoder9 *structFieldDecoder
|
||||||
fieldHash10 int32
|
fieldHash10 int64
|
||||||
fieldDecoder10 *structFieldDecoder
|
fieldDecoder10 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package test
|
package test
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
//testCases = append(testCases,
|
testCases = append(testCases,
|
||||||
// (*struct {
|
(*struct {
|
||||||
// Upper bool `json:"M"`
|
Upper bool `json:"M"`
|
||||||
// Lower bool `json:"m"`
|
Lower bool `json:"m"`
|
||||||
// })(nil),
|
})(nil),
|
||||||
//)
|
)
|
||||||
asymmetricTestCases = append(asymmetricTestCases, [][2]interface{}{
|
asymmetricTestCases = append(asymmetricTestCases, [][2]interface{}{
|
||||||
{
|
{
|
||||||
(*struct {
|
(*struct {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user