package jsoniter

import (
	
	
	
	

	
)

func decoderOfStruct( *ctx,  reflect2.Type) ValDecoder {
	 := map[string]*Binding{}
	 := describeStruct(, )
	for ,  := range .Fields {
		for ,  := range .FromNames {
			 := []
			if  == nil {
				[] = 
				continue
			}
			,  := resolveConflictBinding(.frozenConfig, , )
			if  {
				delete(, )
			}
			if ! {
				[] = 
			}
		}
	}
	 := map[string]*structFieldDecoder{}
	for ,  := range  {
		[] = .Decoder.(*structFieldDecoder)
	}

	if !.caseSensitive() {
		for ,  := range  {
			if ,  := [strings.ToLower()]; ! {
				[strings.ToLower()] = .Decoder.(*structFieldDecoder)
			}
		}
	}

	return createStructDecoder(, , )
}

func createStructDecoder( *ctx,  reflect2.Type,  map[string]*structFieldDecoder) ValDecoder {
	if .disallowUnknownFields {
		return &generalStructDecoder{typ: , fields: , disallowUnknownFields: true}
	}
	 := map[int64]struct{}{
		0: {},
	}

	switch len() {
	case 0:
		return &skipObjectDecoder{}
	case 1:
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			return &oneFieldStructDecoder{, , }
		}
	case 2:
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &twoFieldsStructDecoder{, , , , }
	case 3:
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &threeFieldsStructDecoder{,
			, ,
			, ,
			, }
	case 4:
		var  int64
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &fourFieldsStructDecoder{,
			, ,
			, ,
			, ,
			, }
	case 5:
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &fiveFieldsStructDecoder{,
			, ,
			, ,
			, ,
			, ,
			, }
	case 6:
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &sixFieldsStructDecoder{,
			, ,
			, ,
			, ,
			, ,
			, ,
			, }
	case 7:
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &sevenFieldsStructDecoder{,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, }
	case 8:
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &eightFieldsStructDecoder{,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, }
	case 9:
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &nineFieldsStructDecoder{,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, }
	case 10:
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  int64
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		var  *structFieldDecoder
		for ,  := range  {
			 := calcHash(, .caseSensitive())
			,  := []
			if  {
				return &generalStructDecoder{, , false}
			}
			[] = struct{}{}
			if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else if  == 0 {
				 = 
				 = 
			} else {
				 = 
				 = 
			}
		}
		return &tenFieldsStructDecoder{,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, ,
			, }
	}
	return &generalStructDecoder{, , false}
}

type generalStructDecoder struct {
	typ                   reflect2.Type
	fields                map[string]*structFieldDecoder
	disallowUnknownFields bool
}

func ( *generalStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	var  byte
	for  = ',';  == ',';  = .nextToken() {
		.decodeOneField(, )
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	if  != '}' {
		.ReportError("struct Decode", `expect }, but found `+string([]byte{}))
	}
	.decrementDepth()
}

func ( *generalStructDecoder) ( unsafe.Pointer,  *Iterator) {
	var  string
	var  *structFieldDecoder
	if .cfg.objectFieldMustBeSimpleString {
		 := .ReadStringAsSlice()
		 = *(*string)(unsafe.Pointer(&))
		 = .fields[]
		if  == nil && !.cfg.caseSensitive {
			 = .fields[strings.ToLower()]
		}
	} else {
		 = .ReadString()
		 = .fields[]
		if  == nil && !.cfg.caseSensitive {
			 = .fields[strings.ToLower()]
		}
	}
	if  == nil {
		if .disallowUnknownFields {
			 := "found unknown field: " + 
			.ReportError("ReadObject", )
		}
		 := .nextToken()
		if  != ':' {
			.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{}))
		}
		.Skip()
		return
	}
	 := .nextToken()
	if  != ':' {
		.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{}))
	}
	.Decode(, )
}

type skipObjectDecoder struct {
	typ reflect2.Type
}

func ( *skipObjectDecoder) ( unsafe.Pointer,  *Iterator) {
	 := .WhatIsNext()
	if  != ObjectValue &&  != NilValue {
		.ReportError("skipObjectDecoder", "expect object or null")
		return
	}
	.Skip()
}

type oneFieldStructDecoder struct {
	typ          reflect2.Type
	fieldHash    int64
	fieldDecoder *structFieldDecoder
}

func ( *oneFieldStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		if .readFieldHash() == .fieldHash {
			.fieldDecoder.Decode(, )
		} else {
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type twoFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
}

func ( *twoFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type threeFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
	fieldHash3    int64
	fieldDecoder3 *structFieldDecoder
}

func ( *threeFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type fourFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
	fieldHash3    int64
	fieldDecoder3 *structFieldDecoder
	fieldHash4    int64
	fieldDecoder4 *structFieldDecoder
}

func ( *fourFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		case .fieldHash4:
			.fieldDecoder4.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type fiveFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
	fieldHash3    int64
	fieldDecoder3 *structFieldDecoder
	fieldHash4    int64
	fieldDecoder4 *structFieldDecoder
	fieldHash5    int64
	fieldDecoder5 *structFieldDecoder
}

func ( *fiveFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		case .fieldHash4:
			.fieldDecoder4.Decode(, )
		case .fieldHash5:
			.fieldDecoder5.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type sixFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
	fieldHash3    int64
	fieldDecoder3 *structFieldDecoder
	fieldHash4    int64
	fieldDecoder4 *structFieldDecoder
	fieldHash5    int64
	fieldDecoder5 *structFieldDecoder
	fieldHash6    int64
	fieldDecoder6 *structFieldDecoder
}

func ( *sixFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		case .fieldHash4:
			.fieldDecoder4.Decode(, )
		case .fieldHash5:
			.fieldDecoder5.Decode(, )
		case .fieldHash6:
			.fieldDecoder6.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type sevenFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
	fieldHash3    int64
	fieldDecoder3 *structFieldDecoder
	fieldHash4    int64
	fieldDecoder4 *structFieldDecoder
	fieldHash5    int64
	fieldDecoder5 *structFieldDecoder
	fieldHash6    int64
	fieldDecoder6 *structFieldDecoder
	fieldHash7    int64
	fieldDecoder7 *structFieldDecoder
}

func ( *sevenFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		case .fieldHash4:
			.fieldDecoder4.Decode(, )
		case .fieldHash5:
			.fieldDecoder5.Decode(, )
		case .fieldHash6:
			.fieldDecoder6.Decode(, )
		case .fieldHash7:
			.fieldDecoder7.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type eightFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
	fieldHash3    int64
	fieldDecoder3 *structFieldDecoder
	fieldHash4    int64
	fieldDecoder4 *structFieldDecoder
	fieldHash5    int64
	fieldDecoder5 *structFieldDecoder
	fieldHash6    int64
	fieldDecoder6 *structFieldDecoder
	fieldHash7    int64
	fieldDecoder7 *structFieldDecoder
	fieldHash8    int64
	fieldDecoder8 *structFieldDecoder
}

func ( *eightFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		case .fieldHash4:
			.fieldDecoder4.Decode(, )
		case .fieldHash5:
			.fieldDecoder5.Decode(, )
		case .fieldHash6:
			.fieldDecoder6.Decode(, )
		case .fieldHash7:
			.fieldDecoder7.Decode(, )
		case .fieldHash8:
			.fieldDecoder8.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type nineFieldsStructDecoder struct {
	typ           reflect2.Type
	fieldHash1    int64
	fieldDecoder1 *structFieldDecoder
	fieldHash2    int64
	fieldDecoder2 *structFieldDecoder
	fieldHash3    int64
	fieldDecoder3 *structFieldDecoder
	fieldHash4    int64
	fieldDecoder4 *structFieldDecoder
	fieldHash5    int64
	fieldDecoder5 *structFieldDecoder
	fieldHash6    int64
	fieldDecoder6 *structFieldDecoder
	fieldHash7    int64
	fieldDecoder7 *structFieldDecoder
	fieldHash8    int64
	fieldDecoder8 *structFieldDecoder
	fieldHash9    int64
	fieldDecoder9 *structFieldDecoder
}

func ( *nineFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		case .fieldHash4:
			.fieldDecoder4.Decode(, )
		case .fieldHash5:
			.fieldDecoder5.Decode(, )
		case .fieldHash6:
			.fieldDecoder6.Decode(, )
		case .fieldHash7:
			.fieldDecoder7.Decode(, )
		case .fieldHash8:
			.fieldDecoder8.Decode(, )
		case .fieldHash9:
			.fieldDecoder9.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type tenFieldsStructDecoder struct {
	typ            reflect2.Type
	fieldHash1     int64
	fieldDecoder1  *structFieldDecoder
	fieldHash2     int64
	fieldDecoder2  *structFieldDecoder
	fieldHash3     int64
	fieldDecoder3  *structFieldDecoder
	fieldHash4     int64
	fieldDecoder4  *structFieldDecoder
	fieldHash5     int64
	fieldDecoder5  *structFieldDecoder
	fieldHash6     int64
	fieldDecoder6  *structFieldDecoder
	fieldHash7     int64
	fieldDecoder7  *structFieldDecoder
	fieldHash8     int64
	fieldDecoder8  *structFieldDecoder
	fieldHash9     int64
	fieldDecoder9  *structFieldDecoder
	fieldHash10    int64
	fieldDecoder10 *structFieldDecoder
}

func ( *tenFieldsStructDecoder) ( unsafe.Pointer,  *Iterator) {
	if !.readObjectStart() {
		return
	}
	if !.incrementDepth() {
		return
	}
	for {
		switch .readFieldHash() {
		case .fieldHash1:
			.fieldDecoder1.Decode(, )
		case .fieldHash2:
			.fieldDecoder2.Decode(, )
		case .fieldHash3:
			.fieldDecoder3.Decode(, )
		case .fieldHash4:
			.fieldDecoder4.Decode(, )
		case .fieldHash5:
			.fieldDecoder5.Decode(, )
		case .fieldHash6:
			.fieldDecoder6.Decode(, )
		case .fieldHash7:
			.fieldDecoder7.Decode(, )
		case .fieldHash8:
			.fieldDecoder8.Decode(, )
		case .fieldHash9:
			.fieldDecoder9.Decode(, )
		case .fieldHash10:
			.fieldDecoder10.Decode(, )
		default:
			.Skip()
		}
		if .isObjectEnd() {
			break
		}
	}
	if .Error != nil && .Error != io.EOF && len(.typ.Type1().Name()) != 0 {
		.Error = fmt.Errorf("%v.%s", .typ, .Error.Error())
	}
	.decrementDepth()
}

type structFieldDecoder struct {
	field        reflect2.StructField
	fieldDecoder ValDecoder
}

func ( *structFieldDecoder) ( unsafe.Pointer,  *Iterator) {
	 := .field.UnsafeGet()
	.fieldDecoder.Decode(, )
	if .Error != nil && .Error != io.EOF {
		.Error = fmt.Errorf("%s: %s", .field.Name(), .Error.Error())
	}
}

type stringModeStringDecoder struct {
	elemDecoder ValDecoder
	cfg         *frozenConfig
}

func ( *stringModeStringDecoder) ( unsafe.Pointer,  *Iterator) {
	.elemDecoder.Decode(, )
	 := *((*string)())
	 := .cfg.BorrowIterator([]byte())
	defer .cfg.ReturnIterator()
	*((*string)()) = .ReadString()
}

type stringModeNumberDecoder struct {
	elemDecoder ValDecoder
}

func ( *stringModeNumberDecoder) ( unsafe.Pointer,  *Iterator) {
	if .WhatIsNext() == NilValue {
		.elemDecoder.Decode(, )
		return
	}

	 := .nextToken()
	if  != '"' {
		.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{}))
		return
	}
	.elemDecoder.Decode(, )
	if .Error != nil {
		return
	}
	 = .readByte()
	if  != '"' {
		.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{}))
		return
	}
}