Merge pull request #154 from goccy/feature/fix-recursive-op

Fix recursive operation
This commit is contained in:
Masaaki Goshima 2021-03-19 16:07:18 +09:00 committed by GitHub
commit f218f0fc44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 376 additions and 531 deletions

View File

@ -12,56 +12,14 @@ import (
) )
type opType struct { type opType struct {
Op string Op string
Code string Code string
HeadToPtrHead func() string
HeadToOmitEmptyHead func() string
HeadToStringTagHead func() string
PtrHeadToHead func() string
FieldToEnd func() string
FieldToOmitEmptyField func() string
FieldToStringTagField func() string
}
func (t opType) IsHeadToPtrHead() bool {
return t.Op != t.HeadToPtrHead()
}
func (t opType) IsHeadToOmitEmptyHead() bool {
return t.Op != t.HeadToOmitEmptyHead()
}
func (t opType) IsHeadToStringTagHead() bool {
return t.Op != t.HeadToStringTagHead()
}
func (t opType) IsPtrHeadToHead() bool {
return t.Op != t.PtrHeadToHead()
}
func (t opType) IsFieldToEnd() bool {
return t.Op != t.FieldToEnd()
}
func (t opType) IsFieldToOmitEmptyField() bool {
return t.Op != t.FieldToOmitEmptyField()
}
func (t opType) IsFieldToStringTagField() bool {
return t.Op != t.FieldToStringTagField()
} }
func createOpType(op, code string) opType { func createOpType(op, code string) opType {
return opType{ return opType{
Op: op, Op: op,
Code: code, Code: code,
HeadToPtrHead: func() string { return op },
HeadToOmitEmptyHead: func() string { return op },
HeadToStringTagHead: func() string { return op },
PtrHeadToHead: func() string { return op },
FieldToEnd: func() string { return op },
FieldToOmitEmptyField: func() string { return op },
FieldToStringTagField: func() string { return op },
} }
} }
@ -226,16 +184,16 @@ func (t OpType) FieldToStringTagField() OpType {
"MapKey", "MapKey",
"MapValue", "MapValue",
"MapEnd", "MapEnd",
"StructFieldRecursive", "Recursive",
"StructField", "StructField",
"StructEnd", "StructEnd",
} }
primitiveTypes := []string{ primitiveTypes := []string{
"int", "uint", "float32", "float64", "bool", "string", "bytes", "number", "int", "uint", "float32", "float64", "bool", "string", "bytes", "number",
"array", "map", "slice", "struct", "MarshalJSON", "MarshalText", "recursive", "array", "map", "slice", "struct", "MarshalJSON", "MarshalText",
"intString", "uintString", "intString", "uintString",
"intPtr", "uintPtr", "float32Ptr", "float64Ptr", "boolPtr", "stringPtr", "bytesPtr", "numberPtr", "intPtr", "uintPtr", "float32Ptr", "float64Ptr", "boolPtr", "stringPtr", "bytesPtr", "numberPtr",
"arrayPtr", "mapPtr", "slicePtr", "marshalJSONPtr", "marshalTextPtr", "interfacePtr", "recursivePtr", "arrayPtr", "mapPtr", "slicePtr", "marshalJSONPtr", "marshalTextPtr", "interfacePtr",
} }
primitiveTypesUpper := []string{} primitiveTypesUpper := []string{}
for _, typ := range primitiveTypes { for _, typ := range primitiveTypes {
@ -252,7 +210,9 @@ func (t OpType) FieldToStringTagField() OpType {
createOpType("MapKey", "MapKey"), createOpType("MapKey", "MapKey"),
createOpType("MapValue", "MapValue"), createOpType("MapValue", "MapValue"),
createOpType("MapEnd", "Op"), createOpType("MapEnd", "Op"),
createOpType("StructFieldRecursiveEnd", "Op"), createOpType("Recursive", "Op"),
createOpType("RecursivePtr", "Op"),
createOpType("RecursiveEnd", "Op"),
createOpType("StructAnonymousEnd", "StructEnd"), createOpType("StructAnonymousEnd", "StructEnd"),
} }
for _, typ := range primitiveTypesUpper { for _, typ := range primitiveTypesUpper {
@ -275,37 +235,6 @@ func (t OpType) FieldToStringTagField() OpType {
opTypes = append(opTypes, opType{ opTypes = append(opTypes, opType{
Op: op, Op: op,
Code: "StructField", Code: "StructField",
HeadToPtrHead: func() string {
return fmt.Sprintf(
"StructPtrHead%s%s",
opt,
typ,
)
},
HeadToOmitEmptyHead: func() string {
return fmt.Sprintf(
"Struct%sHeadOmitEmpty%s",
ptrOrNot,
typ,
)
},
HeadToStringTagHead: func() string {
return fmt.Sprintf(
"Struct%sHeadStringTag%s",
ptrOrNot,
typ,
)
},
PtrHeadToHead: func() string {
return fmt.Sprintf(
"StructHead%s%s",
opt,
typ,
)
},
FieldToEnd: func() string { return op },
FieldToOmitEmptyField: func() string { return op },
FieldToStringTagField: func() string { return op },
}) })
} }
} }
@ -321,35 +250,8 @@ func (t OpType) FieldToStringTagField() OpType {
typ, typ,
) )
opTypes = append(opTypes, opType{ opTypes = append(opTypes, opType{
Op: op, Op: op,
Code: "StructField", Code: "StructField",
HeadToPtrHead: func() string { return op },
HeadToOmitEmptyHead: func() string { return op },
HeadToStringTagHead: func() string { return op },
PtrHeadToHead: func() string { return op },
FieldToEnd: func() string {
switch typ {
case "", "Array", "Map", "Slice", "Struct", "Recursive":
return op
}
return fmt.Sprintf(
"StructEnd%s%s",
opt,
typ,
)
},
FieldToOmitEmptyField: func() string {
return fmt.Sprintf(
"StructFieldOmitEmpty%s",
typ,
)
},
FieldToStringTagField: func() string {
return fmt.Sprintf(
"StructFieldStringTag%s",
typ,
)
},
}) })
} }
for _, opt := range []string{"", "OmitEmpty", "StringTag"} { for _, opt := range []string{"", "OmitEmpty", "StringTag"} {
@ -362,15 +264,8 @@ func (t OpType) FieldToStringTagField() OpType {
typ, typ,
) )
opTypes = append(opTypes, opType{ opTypes = append(opTypes, opType{
Op: op, Op: op,
Code: "StructEnd", Code: "StructEnd",
HeadToPtrHead: func() string { return op },
HeadToOmitEmptyHead: func() string { return op },
HeadToStringTagHead: func() string { return op },
PtrHeadToHead: func() string { return op },
FieldToEnd: func() string { return op },
FieldToOmitEmptyField: func() string { return op },
FieldToStringTagField: func() string { return op },
}) })
} }
} }

View File

@ -116,9 +116,9 @@ func compileHead(ctx *compileContext) (*Opcode, error) {
} }
func linkRecursiveCode(c *Opcode) { func linkRecursiveCode(c *Opcode) {
for code := c; code.Op != OpEnd && code.Op != OpStructFieldRecursiveEnd; { for code := c; code.Op != OpEnd && code.Op != OpRecursiveEnd; {
switch code.Op { switch code.Op {
case OpStructFieldRecursive, OpStructFieldRecursivePtr: case OpRecursive, OpRecursivePtr:
if code.Jmp.Linked { if code.Jmp.Linked {
code = code.Next code = code.Next
continue continue
@ -138,7 +138,7 @@ func linkRecursiveCode(c *Opcode) {
totalLength := uintptr(code.TotalLength() + 1) totalLength := uintptr(code.TotalLength() + 1)
nextTotalLength := uintptr(c.TotalLength() + 1) nextTotalLength := uintptr(c.TotalLength() + 1)
c.End.Next.Op = OpStructFieldRecursiveEnd c.End.Next.Op = OpRecursiveEnd
code.Jmp.CurLen = totalLength code.Jmp.CurLen = totalLength
code.Jmp.NextLen = nextTotalLength code.Jmp.NextLen = nextTotalLength
@ -159,7 +159,7 @@ func linkRecursiveCode(c *Opcode) {
func optimizeStructEnd(c *Opcode) { func optimizeStructEnd(c *Opcode) {
for code := c; code.Op != OpEnd; { for code := c; code.Op != OpEnd; {
if code.Op == OpStructFieldRecursive || code.Op == OpStructFieldRecursivePtr { if code.Op == OpRecursive || code.Op == OpRecursivePtr {
// ignore if exists recursive operation // ignore if exists recursive operation
return return
} }
@ -332,8 +332,8 @@ func convertPtrOp(code *Opcode) OpType {
return OpMarshalTextPtr return OpMarshalTextPtr
case OpInterface: case OpInterface:
return OpInterfacePtr return OpInterfacePtr
case OpStructFieldRecursive: case OpRecursive:
return OpStructFieldRecursivePtr return OpRecursivePtr
} }
return code.Op return code.Op
} }
@ -775,22 +775,20 @@ func structHeader(ctx *compileContext, fieldCode *Opcode, valueCode *Opcode, tag
return valueCode.BeforeLastCode() return valueCode.BeforeLastCode()
} }
ctx.decOpcodeIndex() ctx.decOpcodeIndex()
return (*Opcode)(unsafe.Pointer(fieldCode)) return fieldCode
} }
func structField(ctx *compileContext, fieldCode *Opcode, valueCode *Opcode, tag *runtime.StructTag) *Opcode { func structField(ctx *compileContext, fieldCode *Opcode, valueCode *Opcode, tag *runtime.StructTag) *Opcode {
code := (*Opcode)(unsafe.Pointer(fieldCode))
op := optimizeStructField(valueCode, tag) op := optimizeStructField(valueCode, tag)
fieldCode.Op = op fieldCode.Op = op
fieldCode.PtrNum = valueCode.PtrNum fieldCode.PtrNum = valueCode.PtrNum
fieldCode.Mask = valueCode.Mask fieldCode.Mask = valueCode.Mask
fieldCode.RshiftNum = valueCode.RshiftNum fieldCode.RshiftNum = valueCode.RshiftNum
fieldCode.Jmp = valueCode.Jmp
if op.IsMultipleOpField() { if op.IsMultipleOpField() {
return valueCode.BeforeLastCode() return valueCode.BeforeLastCode()
} }
ctx.decIndex() ctx.decIndex()
return code return fieldCode
} }
func isNotExistsField(head *Opcode) bool { func isNotExistsField(head *Opcode) bool {
@ -863,7 +861,7 @@ func anonymousStructFieldPairMap(tags runtime.StructTags, named string, valueCod
for { for {
existsKey := tags.ExistsKey(f.DisplayKey) existsKey := tags.ExistsKey(f.DisplayKey)
isHeadOp := strings.Contains(f.Op.String(), "Head") isHeadOp := strings.Contains(f.Op.String(), "Head")
if existsKey && strings.Contains(f.Op.String(), "Recursive") { if existsKey && f.Next != nil && strings.Contains(f.Next.Op.String(), "Recursive") {
// through // through
} else if isHeadOp && !f.AnonymousHead { } else if isHeadOp && !f.AnonymousHead {
if existsKey { if existsKey {

View File

@ -275,7 +275,7 @@ func (c *Opcode) TotalLength() int {
var idx int var idx int
for code := c; code.Op != OpEnd; { for code := c; code.Op != OpEnd; {
idx = int(code.Idx / uintptrSize) idx = int(code.Idx / uintptrSize)
if code.Op == OpStructFieldRecursiveEnd { if code.Op == OpRecursiveEnd {
break break
} }
switch code.Op.CodeType() { switch code.Op.CodeType() {
@ -636,7 +636,7 @@ func newInterfaceCode(ctx *compileContext) *Opcode {
func newRecursiveCode(ctx *compileContext, jmp *CompiledCode) *Opcode { func newRecursiveCode(ctx *compileContext, jmp *CompiledCode) *Opcode {
return &Opcode{ return &Opcode{
Op: OpStructFieldRecursive, Op: OpRecursive,
Type: ctx.typ, Type: ctx.typ,
DisplayIdx: ctx.opcodeIndex, DisplayIdx: ctx.opcodeIndex,
Idx: opcodeOffset(ctx.ptrIndex), Idx: opcodeOffset(ctx.ptrIndex),

View File

@ -8,21 +8,21 @@ import (
type CodeType int type CodeType int
const ( const (
CodeOp CodeType = 0 CodeOp CodeType = 0
CodeArrayHead CodeType = 1 CodeArrayHead CodeType = 1
CodeArrayElem CodeType = 2 CodeArrayElem CodeType = 2
CodeSliceHead CodeType = 3 CodeSliceHead CodeType = 3
CodeSliceElem CodeType = 4 CodeSliceElem CodeType = 4
CodeMapHead CodeType = 5 CodeMapHead CodeType = 5
CodeMapKey CodeType = 6 CodeMapKey CodeType = 6
CodeMapValue CodeType = 7 CodeMapValue CodeType = 7
CodeMapEnd CodeType = 8 CodeMapEnd CodeType = 8
CodeStructFieldRecursive CodeType = 9 CodeRecursive CodeType = 9
CodeStructField CodeType = 10 CodeStructField CodeType = 10
CodeStructEnd CodeType = 11 CodeStructEnd CodeType = 11
) )
var opTypeStrings = [440]string{ var opTypeStrings = [416]string{
"End", "End",
"Interface", "Interface",
"Ptr", "Ptr",
@ -33,7 +33,9 @@ var opTypeStrings = [440]string{
"MapKey", "MapKey",
"MapValue", "MapValue",
"MapEnd", "MapEnd",
"StructFieldRecursiveEnd", "Recursive",
"RecursivePtr",
"RecursiveEnd",
"StructAnonymousEnd", "StructAnonymousEnd",
"Int", "Int",
"Uint", "Uint",
@ -49,7 +51,6 @@ var opTypeStrings = [440]string{
"Struct", "Struct",
"MarshalJSON", "MarshalJSON",
"MarshalText", "MarshalText",
"Recursive",
"IntString", "IntString",
"UintString", "UintString",
"IntPtr", "IntPtr",
@ -66,7 +67,6 @@ var opTypeStrings = [440]string{
"MarshalJSONPtr", "MarshalJSONPtr",
"MarshalTextPtr", "MarshalTextPtr",
"InterfacePtr", "InterfacePtr",
"RecursivePtr",
"StructHeadInt", "StructHeadInt",
"StructHeadOmitEmptyInt", "StructHeadOmitEmptyInt",
"StructHeadStringTagInt", "StructHeadStringTagInt",
@ -151,12 +151,6 @@ var opTypeStrings = [440]string{
"StructPtrHeadMarshalText", "StructPtrHeadMarshalText",
"StructPtrHeadOmitEmptyMarshalText", "StructPtrHeadOmitEmptyMarshalText",
"StructPtrHeadStringTagMarshalText", "StructPtrHeadStringTagMarshalText",
"StructHeadRecursive",
"StructHeadOmitEmptyRecursive",
"StructHeadStringTagRecursive",
"StructPtrHeadRecursive",
"StructPtrHeadOmitEmptyRecursive",
"StructPtrHeadStringTagRecursive",
"StructHeadIntString", "StructHeadIntString",
"StructHeadOmitEmptyIntString", "StructHeadOmitEmptyIntString",
"StructHeadStringTagIntString", "StructHeadStringTagIntString",
@ -253,12 +247,6 @@ var opTypeStrings = [440]string{
"StructPtrHeadInterfacePtr", "StructPtrHeadInterfacePtr",
"StructPtrHeadOmitEmptyInterfacePtr", "StructPtrHeadOmitEmptyInterfacePtr",
"StructPtrHeadStringTagInterfacePtr", "StructPtrHeadStringTagInterfacePtr",
"StructHeadRecursivePtr",
"StructHeadOmitEmptyRecursivePtr",
"StructHeadStringTagRecursivePtr",
"StructPtrHeadRecursivePtr",
"StructPtrHeadOmitEmptyRecursivePtr",
"StructPtrHeadStringTagRecursivePtr",
"StructHead", "StructHead",
"StructHeadOmitEmpty", "StructHeadOmitEmpty",
"StructHeadStringTag", "StructHeadStringTag",
@ -349,12 +337,6 @@ var opTypeStrings = [440]string{
"StructEndMarshalText", "StructEndMarshalText",
"StructEndOmitEmptyMarshalText", "StructEndOmitEmptyMarshalText",
"StructEndStringTagMarshalText", "StructEndStringTagMarshalText",
"StructFieldRecursive",
"StructFieldOmitEmptyRecursive",
"StructFieldStringTagRecursive",
"StructEndRecursive",
"StructEndOmitEmptyRecursive",
"StructEndStringTagRecursive",
"StructFieldIntString", "StructFieldIntString",
"StructFieldOmitEmptyIntString", "StructFieldOmitEmptyIntString",
"StructFieldStringTagIntString", "StructFieldStringTagIntString",
@ -451,12 +433,6 @@ var opTypeStrings = [440]string{
"StructEndInterfacePtr", "StructEndInterfacePtr",
"StructEndOmitEmptyInterfacePtr", "StructEndOmitEmptyInterfacePtr",
"StructEndStringTagInterfacePtr", "StructEndStringTagInterfacePtr",
"StructFieldRecursivePtr",
"StructFieldOmitEmptyRecursivePtr",
"StructFieldStringTagRecursivePtr",
"StructEndRecursivePtr",
"StructEndOmitEmptyRecursivePtr",
"StructEndStringTagRecursivePtr",
"StructField", "StructField",
"StructFieldOmitEmpty", "StructFieldOmitEmpty",
"StructFieldStringTag", "StructFieldStringTag",
@ -478,40 +454,40 @@ const (
OpMapKey OpType = 7 OpMapKey OpType = 7
OpMapValue OpType = 8 OpMapValue OpType = 8
OpMapEnd OpType = 9 OpMapEnd OpType = 9
OpStructFieldRecursiveEnd OpType = 10 OpRecursive OpType = 10
OpStructAnonymousEnd OpType = 11 OpRecursivePtr OpType = 11
OpInt OpType = 12 OpRecursiveEnd OpType = 12
OpUint OpType = 13 OpStructAnonymousEnd OpType = 13
OpFloat32 OpType = 14 OpInt OpType = 14
OpFloat64 OpType = 15 OpUint OpType = 15
OpBool OpType = 16 OpFloat32 OpType = 16
OpString OpType = 17 OpFloat64 OpType = 17
OpBytes OpType = 18 OpBool OpType = 18
OpNumber OpType = 19 OpString OpType = 19
OpArray OpType = 20 OpBytes OpType = 20
OpMap OpType = 21 OpNumber OpType = 21
OpSlice OpType = 22 OpArray OpType = 22
OpStruct OpType = 23 OpMap OpType = 23
OpMarshalJSON OpType = 24 OpSlice OpType = 24
OpMarshalText OpType = 25 OpStruct OpType = 25
OpRecursive OpType = 26 OpMarshalJSON OpType = 26
OpIntString OpType = 27 OpMarshalText OpType = 27
OpUintString OpType = 28 OpIntString OpType = 28
OpIntPtr OpType = 29 OpUintString OpType = 29
OpUintPtr OpType = 30 OpIntPtr OpType = 30
OpFloat32Ptr OpType = 31 OpUintPtr OpType = 31
OpFloat64Ptr OpType = 32 OpFloat32Ptr OpType = 32
OpBoolPtr OpType = 33 OpFloat64Ptr OpType = 33
OpStringPtr OpType = 34 OpBoolPtr OpType = 34
OpBytesPtr OpType = 35 OpStringPtr OpType = 35
OpNumberPtr OpType = 36 OpBytesPtr OpType = 36
OpArrayPtr OpType = 37 OpNumberPtr OpType = 37
OpMapPtr OpType = 38 OpArrayPtr OpType = 38
OpSlicePtr OpType = 39 OpMapPtr OpType = 39
OpMarshalJSONPtr OpType = 40 OpSlicePtr OpType = 40
OpMarshalTextPtr OpType = 41 OpMarshalJSONPtr OpType = 41
OpInterfacePtr OpType = 42 OpMarshalTextPtr OpType = 42
OpRecursivePtr OpType = 43 OpInterfacePtr OpType = 43
OpStructHeadInt OpType = 44 OpStructHeadInt OpType = 44
OpStructHeadOmitEmptyInt OpType = 45 OpStructHeadOmitEmptyInt OpType = 45
OpStructHeadStringTagInt OpType = 46 OpStructHeadStringTagInt OpType = 46
@ -596,322 +572,298 @@ const (
OpStructPtrHeadMarshalText OpType = 125 OpStructPtrHeadMarshalText OpType = 125
OpStructPtrHeadOmitEmptyMarshalText OpType = 126 OpStructPtrHeadOmitEmptyMarshalText OpType = 126
OpStructPtrHeadStringTagMarshalText OpType = 127 OpStructPtrHeadStringTagMarshalText OpType = 127
OpStructHeadRecursive OpType = 128 OpStructHeadIntString OpType = 128
OpStructHeadOmitEmptyRecursive OpType = 129 OpStructHeadOmitEmptyIntString OpType = 129
OpStructHeadStringTagRecursive OpType = 130 OpStructHeadStringTagIntString OpType = 130
OpStructPtrHeadRecursive OpType = 131 OpStructPtrHeadIntString OpType = 131
OpStructPtrHeadOmitEmptyRecursive OpType = 132 OpStructPtrHeadOmitEmptyIntString OpType = 132
OpStructPtrHeadStringTagRecursive OpType = 133 OpStructPtrHeadStringTagIntString OpType = 133
OpStructHeadIntString OpType = 134 OpStructHeadUintString OpType = 134
OpStructHeadOmitEmptyIntString OpType = 135 OpStructHeadOmitEmptyUintString OpType = 135
OpStructHeadStringTagIntString OpType = 136 OpStructHeadStringTagUintString OpType = 136
OpStructPtrHeadIntString OpType = 137 OpStructPtrHeadUintString OpType = 137
OpStructPtrHeadOmitEmptyIntString OpType = 138 OpStructPtrHeadOmitEmptyUintString OpType = 138
OpStructPtrHeadStringTagIntString OpType = 139 OpStructPtrHeadStringTagUintString OpType = 139
OpStructHeadUintString OpType = 140 OpStructHeadIntPtr OpType = 140
OpStructHeadOmitEmptyUintString OpType = 141 OpStructHeadOmitEmptyIntPtr OpType = 141
OpStructHeadStringTagUintString OpType = 142 OpStructHeadStringTagIntPtr OpType = 142
OpStructPtrHeadUintString OpType = 143 OpStructPtrHeadIntPtr OpType = 143
OpStructPtrHeadOmitEmptyUintString OpType = 144 OpStructPtrHeadOmitEmptyIntPtr OpType = 144
OpStructPtrHeadStringTagUintString OpType = 145 OpStructPtrHeadStringTagIntPtr OpType = 145
OpStructHeadIntPtr OpType = 146 OpStructHeadUintPtr OpType = 146
OpStructHeadOmitEmptyIntPtr OpType = 147 OpStructHeadOmitEmptyUintPtr OpType = 147
OpStructHeadStringTagIntPtr OpType = 148 OpStructHeadStringTagUintPtr OpType = 148
OpStructPtrHeadIntPtr OpType = 149 OpStructPtrHeadUintPtr OpType = 149
OpStructPtrHeadOmitEmptyIntPtr OpType = 150 OpStructPtrHeadOmitEmptyUintPtr OpType = 150
OpStructPtrHeadStringTagIntPtr OpType = 151 OpStructPtrHeadStringTagUintPtr OpType = 151
OpStructHeadUintPtr OpType = 152 OpStructHeadFloat32Ptr OpType = 152
OpStructHeadOmitEmptyUintPtr OpType = 153 OpStructHeadOmitEmptyFloat32Ptr OpType = 153
OpStructHeadStringTagUintPtr OpType = 154 OpStructHeadStringTagFloat32Ptr OpType = 154
OpStructPtrHeadUintPtr OpType = 155 OpStructPtrHeadFloat32Ptr OpType = 155
OpStructPtrHeadOmitEmptyUintPtr OpType = 156 OpStructPtrHeadOmitEmptyFloat32Ptr OpType = 156
OpStructPtrHeadStringTagUintPtr OpType = 157 OpStructPtrHeadStringTagFloat32Ptr OpType = 157
OpStructHeadFloat32Ptr OpType = 158 OpStructHeadFloat64Ptr OpType = 158
OpStructHeadOmitEmptyFloat32Ptr OpType = 159 OpStructHeadOmitEmptyFloat64Ptr OpType = 159
OpStructHeadStringTagFloat32Ptr OpType = 160 OpStructHeadStringTagFloat64Ptr OpType = 160
OpStructPtrHeadFloat32Ptr OpType = 161 OpStructPtrHeadFloat64Ptr OpType = 161
OpStructPtrHeadOmitEmptyFloat32Ptr OpType = 162 OpStructPtrHeadOmitEmptyFloat64Ptr OpType = 162
OpStructPtrHeadStringTagFloat32Ptr OpType = 163 OpStructPtrHeadStringTagFloat64Ptr OpType = 163
OpStructHeadFloat64Ptr OpType = 164 OpStructHeadBoolPtr OpType = 164
OpStructHeadOmitEmptyFloat64Ptr OpType = 165 OpStructHeadOmitEmptyBoolPtr OpType = 165
OpStructHeadStringTagFloat64Ptr OpType = 166 OpStructHeadStringTagBoolPtr OpType = 166
OpStructPtrHeadFloat64Ptr OpType = 167 OpStructPtrHeadBoolPtr OpType = 167
OpStructPtrHeadOmitEmptyFloat64Ptr OpType = 168 OpStructPtrHeadOmitEmptyBoolPtr OpType = 168
OpStructPtrHeadStringTagFloat64Ptr OpType = 169 OpStructPtrHeadStringTagBoolPtr OpType = 169
OpStructHeadBoolPtr OpType = 170 OpStructHeadStringPtr OpType = 170
OpStructHeadOmitEmptyBoolPtr OpType = 171 OpStructHeadOmitEmptyStringPtr OpType = 171
OpStructHeadStringTagBoolPtr OpType = 172 OpStructHeadStringTagStringPtr OpType = 172
OpStructPtrHeadBoolPtr OpType = 173 OpStructPtrHeadStringPtr OpType = 173
OpStructPtrHeadOmitEmptyBoolPtr OpType = 174 OpStructPtrHeadOmitEmptyStringPtr OpType = 174
OpStructPtrHeadStringTagBoolPtr OpType = 175 OpStructPtrHeadStringTagStringPtr OpType = 175
OpStructHeadStringPtr OpType = 176 OpStructHeadBytesPtr OpType = 176
OpStructHeadOmitEmptyStringPtr OpType = 177 OpStructHeadOmitEmptyBytesPtr OpType = 177
OpStructHeadStringTagStringPtr OpType = 178 OpStructHeadStringTagBytesPtr OpType = 178
OpStructPtrHeadStringPtr OpType = 179 OpStructPtrHeadBytesPtr OpType = 179
OpStructPtrHeadOmitEmptyStringPtr OpType = 180 OpStructPtrHeadOmitEmptyBytesPtr OpType = 180
OpStructPtrHeadStringTagStringPtr OpType = 181 OpStructPtrHeadStringTagBytesPtr OpType = 181
OpStructHeadBytesPtr OpType = 182 OpStructHeadNumberPtr OpType = 182
OpStructHeadOmitEmptyBytesPtr OpType = 183 OpStructHeadOmitEmptyNumberPtr OpType = 183
OpStructHeadStringTagBytesPtr OpType = 184 OpStructHeadStringTagNumberPtr OpType = 184
OpStructPtrHeadBytesPtr OpType = 185 OpStructPtrHeadNumberPtr OpType = 185
OpStructPtrHeadOmitEmptyBytesPtr OpType = 186 OpStructPtrHeadOmitEmptyNumberPtr OpType = 186
OpStructPtrHeadStringTagBytesPtr OpType = 187 OpStructPtrHeadStringTagNumberPtr OpType = 187
OpStructHeadNumberPtr OpType = 188 OpStructHeadArrayPtr OpType = 188
OpStructHeadOmitEmptyNumberPtr OpType = 189 OpStructHeadOmitEmptyArrayPtr OpType = 189
OpStructHeadStringTagNumberPtr OpType = 190 OpStructHeadStringTagArrayPtr OpType = 190
OpStructPtrHeadNumberPtr OpType = 191 OpStructPtrHeadArrayPtr OpType = 191
OpStructPtrHeadOmitEmptyNumberPtr OpType = 192 OpStructPtrHeadOmitEmptyArrayPtr OpType = 192
OpStructPtrHeadStringTagNumberPtr OpType = 193 OpStructPtrHeadStringTagArrayPtr OpType = 193
OpStructHeadArrayPtr OpType = 194 OpStructHeadMapPtr OpType = 194
OpStructHeadOmitEmptyArrayPtr OpType = 195 OpStructHeadOmitEmptyMapPtr OpType = 195
OpStructHeadStringTagArrayPtr OpType = 196 OpStructHeadStringTagMapPtr OpType = 196
OpStructPtrHeadArrayPtr OpType = 197 OpStructPtrHeadMapPtr OpType = 197
OpStructPtrHeadOmitEmptyArrayPtr OpType = 198 OpStructPtrHeadOmitEmptyMapPtr OpType = 198
OpStructPtrHeadStringTagArrayPtr OpType = 199 OpStructPtrHeadStringTagMapPtr OpType = 199
OpStructHeadMapPtr OpType = 200 OpStructHeadSlicePtr OpType = 200
OpStructHeadOmitEmptyMapPtr OpType = 201 OpStructHeadOmitEmptySlicePtr OpType = 201
OpStructHeadStringTagMapPtr OpType = 202 OpStructHeadStringTagSlicePtr OpType = 202
OpStructPtrHeadMapPtr OpType = 203 OpStructPtrHeadSlicePtr OpType = 203
OpStructPtrHeadOmitEmptyMapPtr OpType = 204 OpStructPtrHeadOmitEmptySlicePtr OpType = 204
OpStructPtrHeadStringTagMapPtr OpType = 205 OpStructPtrHeadStringTagSlicePtr OpType = 205
OpStructHeadSlicePtr OpType = 206 OpStructHeadMarshalJSONPtr OpType = 206
OpStructHeadOmitEmptySlicePtr OpType = 207 OpStructHeadOmitEmptyMarshalJSONPtr OpType = 207
OpStructHeadStringTagSlicePtr OpType = 208 OpStructHeadStringTagMarshalJSONPtr OpType = 208
OpStructPtrHeadSlicePtr OpType = 209 OpStructPtrHeadMarshalJSONPtr OpType = 209
OpStructPtrHeadOmitEmptySlicePtr OpType = 210 OpStructPtrHeadOmitEmptyMarshalJSONPtr OpType = 210
OpStructPtrHeadStringTagSlicePtr OpType = 211 OpStructPtrHeadStringTagMarshalJSONPtr OpType = 211
OpStructHeadMarshalJSONPtr OpType = 212 OpStructHeadMarshalTextPtr OpType = 212
OpStructHeadOmitEmptyMarshalJSONPtr OpType = 213 OpStructHeadOmitEmptyMarshalTextPtr OpType = 213
OpStructHeadStringTagMarshalJSONPtr OpType = 214 OpStructHeadStringTagMarshalTextPtr OpType = 214
OpStructPtrHeadMarshalJSONPtr OpType = 215 OpStructPtrHeadMarshalTextPtr OpType = 215
OpStructPtrHeadOmitEmptyMarshalJSONPtr OpType = 216 OpStructPtrHeadOmitEmptyMarshalTextPtr OpType = 216
OpStructPtrHeadStringTagMarshalJSONPtr OpType = 217 OpStructPtrHeadStringTagMarshalTextPtr OpType = 217
OpStructHeadMarshalTextPtr OpType = 218 OpStructHeadInterfacePtr OpType = 218
OpStructHeadOmitEmptyMarshalTextPtr OpType = 219 OpStructHeadOmitEmptyInterfacePtr OpType = 219
OpStructHeadStringTagMarshalTextPtr OpType = 220 OpStructHeadStringTagInterfacePtr OpType = 220
OpStructPtrHeadMarshalTextPtr OpType = 221 OpStructPtrHeadInterfacePtr OpType = 221
OpStructPtrHeadOmitEmptyMarshalTextPtr OpType = 222 OpStructPtrHeadOmitEmptyInterfacePtr OpType = 222
OpStructPtrHeadStringTagMarshalTextPtr OpType = 223 OpStructPtrHeadStringTagInterfacePtr OpType = 223
OpStructHeadInterfacePtr OpType = 224 OpStructHead OpType = 224
OpStructHeadOmitEmptyInterfacePtr OpType = 225 OpStructHeadOmitEmpty OpType = 225
OpStructHeadStringTagInterfacePtr OpType = 226 OpStructHeadStringTag OpType = 226
OpStructPtrHeadInterfacePtr OpType = 227 OpStructPtrHead OpType = 227
OpStructPtrHeadOmitEmptyInterfacePtr OpType = 228 OpStructPtrHeadOmitEmpty OpType = 228
OpStructPtrHeadStringTagInterfacePtr OpType = 229 OpStructPtrHeadStringTag OpType = 229
OpStructHeadRecursivePtr OpType = 230 OpStructFieldInt OpType = 230
OpStructHeadOmitEmptyRecursivePtr OpType = 231 OpStructFieldOmitEmptyInt OpType = 231
OpStructHeadStringTagRecursivePtr OpType = 232 OpStructFieldStringTagInt OpType = 232
OpStructPtrHeadRecursivePtr OpType = 233 OpStructEndInt OpType = 233
OpStructPtrHeadOmitEmptyRecursivePtr OpType = 234 OpStructEndOmitEmptyInt OpType = 234
OpStructPtrHeadStringTagRecursivePtr OpType = 235 OpStructEndStringTagInt OpType = 235
OpStructHead OpType = 236 OpStructFieldUint OpType = 236
OpStructHeadOmitEmpty OpType = 237 OpStructFieldOmitEmptyUint OpType = 237
OpStructHeadStringTag OpType = 238 OpStructFieldStringTagUint OpType = 238
OpStructPtrHead OpType = 239 OpStructEndUint OpType = 239
OpStructPtrHeadOmitEmpty OpType = 240 OpStructEndOmitEmptyUint OpType = 240
OpStructPtrHeadStringTag OpType = 241 OpStructEndStringTagUint OpType = 241
OpStructFieldInt OpType = 242 OpStructFieldFloat32 OpType = 242
OpStructFieldOmitEmptyInt OpType = 243 OpStructFieldOmitEmptyFloat32 OpType = 243
OpStructFieldStringTagInt OpType = 244 OpStructFieldStringTagFloat32 OpType = 244
OpStructEndInt OpType = 245 OpStructEndFloat32 OpType = 245
OpStructEndOmitEmptyInt OpType = 246 OpStructEndOmitEmptyFloat32 OpType = 246
OpStructEndStringTagInt OpType = 247 OpStructEndStringTagFloat32 OpType = 247
OpStructFieldUint OpType = 248 OpStructFieldFloat64 OpType = 248
OpStructFieldOmitEmptyUint OpType = 249 OpStructFieldOmitEmptyFloat64 OpType = 249
OpStructFieldStringTagUint OpType = 250 OpStructFieldStringTagFloat64 OpType = 250
OpStructEndUint OpType = 251 OpStructEndFloat64 OpType = 251
OpStructEndOmitEmptyUint OpType = 252 OpStructEndOmitEmptyFloat64 OpType = 252
OpStructEndStringTagUint OpType = 253 OpStructEndStringTagFloat64 OpType = 253
OpStructFieldFloat32 OpType = 254 OpStructFieldBool OpType = 254
OpStructFieldOmitEmptyFloat32 OpType = 255 OpStructFieldOmitEmptyBool OpType = 255
OpStructFieldStringTagFloat32 OpType = 256 OpStructFieldStringTagBool OpType = 256
OpStructEndFloat32 OpType = 257 OpStructEndBool OpType = 257
OpStructEndOmitEmptyFloat32 OpType = 258 OpStructEndOmitEmptyBool OpType = 258
OpStructEndStringTagFloat32 OpType = 259 OpStructEndStringTagBool OpType = 259
OpStructFieldFloat64 OpType = 260 OpStructFieldString OpType = 260
OpStructFieldOmitEmptyFloat64 OpType = 261 OpStructFieldOmitEmptyString OpType = 261
OpStructFieldStringTagFloat64 OpType = 262 OpStructFieldStringTagString OpType = 262
OpStructEndFloat64 OpType = 263 OpStructEndString OpType = 263
OpStructEndOmitEmptyFloat64 OpType = 264 OpStructEndOmitEmptyString OpType = 264
OpStructEndStringTagFloat64 OpType = 265 OpStructEndStringTagString OpType = 265
OpStructFieldBool OpType = 266 OpStructFieldBytes OpType = 266
OpStructFieldOmitEmptyBool OpType = 267 OpStructFieldOmitEmptyBytes OpType = 267
OpStructFieldStringTagBool OpType = 268 OpStructFieldStringTagBytes OpType = 268
OpStructEndBool OpType = 269 OpStructEndBytes OpType = 269
OpStructEndOmitEmptyBool OpType = 270 OpStructEndOmitEmptyBytes OpType = 270
OpStructEndStringTagBool OpType = 271 OpStructEndStringTagBytes OpType = 271
OpStructFieldString OpType = 272 OpStructFieldNumber OpType = 272
OpStructFieldOmitEmptyString OpType = 273 OpStructFieldOmitEmptyNumber OpType = 273
OpStructFieldStringTagString OpType = 274 OpStructFieldStringTagNumber OpType = 274
OpStructEndString OpType = 275 OpStructEndNumber OpType = 275
OpStructEndOmitEmptyString OpType = 276 OpStructEndOmitEmptyNumber OpType = 276
OpStructEndStringTagString OpType = 277 OpStructEndStringTagNumber OpType = 277
OpStructFieldBytes OpType = 278 OpStructFieldArray OpType = 278
OpStructFieldOmitEmptyBytes OpType = 279 OpStructFieldOmitEmptyArray OpType = 279
OpStructFieldStringTagBytes OpType = 280 OpStructFieldStringTagArray OpType = 280
OpStructEndBytes OpType = 281 OpStructEndArray OpType = 281
OpStructEndOmitEmptyBytes OpType = 282 OpStructEndOmitEmptyArray OpType = 282
OpStructEndStringTagBytes OpType = 283 OpStructEndStringTagArray OpType = 283
OpStructFieldNumber OpType = 284 OpStructFieldMap OpType = 284
OpStructFieldOmitEmptyNumber OpType = 285 OpStructFieldOmitEmptyMap OpType = 285
OpStructFieldStringTagNumber OpType = 286 OpStructFieldStringTagMap OpType = 286
OpStructEndNumber OpType = 287 OpStructEndMap OpType = 287
OpStructEndOmitEmptyNumber OpType = 288 OpStructEndOmitEmptyMap OpType = 288
OpStructEndStringTagNumber OpType = 289 OpStructEndStringTagMap OpType = 289
OpStructFieldArray OpType = 290 OpStructFieldSlice OpType = 290
OpStructFieldOmitEmptyArray OpType = 291 OpStructFieldOmitEmptySlice OpType = 291
OpStructFieldStringTagArray OpType = 292 OpStructFieldStringTagSlice OpType = 292
OpStructEndArray OpType = 293 OpStructEndSlice OpType = 293
OpStructEndOmitEmptyArray OpType = 294 OpStructEndOmitEmptySlice OpType = 294
OpStructEndStringTagArray OpType = 295 OpStructEndStringTagSlice OpType = 295
OpStructFieldMap OpType = 296 OpStructFieldStruct OpType = 296
OpStructFieldOmitEmptyMap OpType = 297 OpStructFieldOmitEmptyStruct OpType = 297
OpStructFieldStringTagMap OpType = 298 OpStructFieldStringTagStruct OpType = 298
OpStructEndMap OpType = 299 OpStructEndStruct OpType = 299
OpStructEndOmitEmptyMap OpType = 300 OpStructEndOmitEmptyStruct OpType = 300
OpStructEndStringTagMap OpType = 301 OpStructEndStringTagStruct OpType = 301
OpStructFieldSlice OpType = 302 OpStructFieldMarshalJSON OpType = 302
OpStructFieldOmitEmptySlice OpType = 303 OpStructFieldOmitEmptyMarshalJSON OpType = 303
OpStructFieldStringTagSlice OpType = 304 OpStructFieldStringTagMarshalJSON OpType = 304
OpStructEndSlice OpType = 305 OpStructEndMarshalJSON OpType = 305
OpStructEndOmitEmptySlice OpType = 306 OpStructEndOmitEmptyMarshalJSON OpType = 306
OpStructEndStringTagSlice OpType = 307 OpStructEndStringTagMarshalJSON OpType = 307
OpStructFieldStruct OpType = 308 OpStructFieldMarshalText OpType = 308
OpStructFieldOmitEmptyStruct OpType = 309 OpStructFieldOmitEmptyMarshalText OpType = 309
OpStructFieldStringTagStruct OpType = 310 OpStructFieldStringTagMarshalText OpType = 310
OpStructEndStruct OpType = 311 OpStructEndMarshalText OpType = 311
OpStructEndOmitEmptyStruct OpType = 312 OpStructEndOmitEmptyMarshalText OpType = 312
OpStructEndStringTagStruct OpType = 313 OpStructEndStringTagMarshalText OpType = 313
OpStructFieldMarshalJSON OpType = 314 OpStructFieldIntString OpType = 314
OpStructFieldOmitEmptyMarshalJSON OpType = 315 OpStructFieldOmitEmptyIntString OpType = 315
OpStructFieldStringTagMarshalJSON OpType = 316 OpStructFieldStringTagIntString OpType = 316
OpStructEndMarshalJSON OpType = 317 OpStructEndIntString OpType = 317
OpStructEndOmitEmptyMarshalJSON OpType = 318 OpStructEndOmitEmptyIntString OpType = 318
OpStructEndStringTagMarshalJSON OpType = 319 OpStructEndStringTagIntString OpType = 319
OpStructFieldMarshalText OpType = 320 OpStructFieldUintString OpType = 320
OpStructFieldOmitEmptyMarshalText OpType = 321 OpStructFieldOmitEmptyUintString OpType = 321
OpStructFieldStringTagMarshalText OpType = 322 OpStructFieldStringTagUintString OpType = 322
OpStructEndMarshalText OpType = 323 OpStructEndUintString OpType = 323
OpStructEndOmitEmptyMarshalText OpType = 324 OpStructEndOmitEmptyUintString OpType = 324
OpStructEndStringTagMarshalText OpType = 325 OpStructEndStringTagUintString OpType = 325
OpStructFieldRecursive OpType = 326 OpStructFieldIntPtr OpType = 326
OpStructFieldOmitEmptyRecursive OpType = 327 OpStructFieldOmitEmptyIntPtr OpType = 327
OpStructFieldStringTagRecursive OpType = 328 OpStructFieldStringTagIntPtr OpType = 328
OpStructEndRecursive OpType = 329 OpStructEndIntPtr OpType = 329
OpStructEndOmitEmptyRecursive OpType = 330 OpStructEndOmitEmptyIntPtr OpType = 330
OpStructEndStringTagRecursive OpType = 331 OpStructEndStringTagIntPtr OpType = 331
OpStructFieldIntString OpType = 332 OpStructFieldUintPtr OpType = 332
OpStructFieldOmitEmptyIntString OpType = 333 OpStructFieldOmitEmptyUintPtr OpType = 333
OpStructFieldStringTagIntString OpType = 334 OpStructFieldStringTagUintPtr OpType = 334
OpStructEndIntString OpType = 335 OpStructEndUintPtr OpType = 335
OpStructEndOmitEmptyIntString OpType = 336 OpStructEndOmitEmptyUintPtr OpType = 336
OpStructEndStringTagIntString OpType = 337 OpStructEndStringTagUintPtr OpType = 337
OpStructFieldUintString OpType = 338 OpStructFieldFloat32Ptr OpType = 338
OpStructFieldOmitEmptyUintString OpType = 339 OpStructFieldOmitEmptyFloat32Ptr OpType = 339
OpStructFieldStringTagUintString OpType = 340 OpStructFieldStringTagFloat32Ptr OpType = 340
OpStructEndUintString OpType = 341 OpStructEndFloat32Ptr OpType = 341
OpStructEndOmitEmptyUintString OpType = 342 OpStructEndOmitEmptyFloat32Ptr OpType = 342
OpStructEndStringTagUintString OpType = 343 OpStructEndStringTagFloat32Ptr OpType = 343
OpStructFieldIntPtr OpType = 344 OpStructFieldFloat64Ptr OpType = 344
OpStructFieldOmitEmptyIntPtr OpType = 345 OpStructFieldOmitEmptyFloat64Ptr OpType = 345
OpStructFieldStringTagIntPtr OpType = 346 OpStructFieldStringTagFloat64Ptr OpType = 346
OpStructEndIntPtr OpType = 347 OpStructEndFloat64Ptr OpType = 347
OpStructEndOmitEmptyIntPtr OpType = 348 OpStructEndOmitEmptyFloat64Ptr OpType = 348
OpStructEndStringTagIntPtr OpType = 349 OpStructEndStringTagFloat64Ptr OpType = 349
OpStructFieldUintPtr OpType = 350 OpStructFieldBoolPtr OpType = 350
OpStructFieldOmitEmptyUintPtr OpType = 351 OpStructFieldOmitEmptyBoolPtr OpType = 351
OpStructFieldStringTagUintPtr OpType = 352 OpStructFieldStringTagBoolPtr OpType = 352
OpStructEndUintPtr OpType = 353 OpStructEndBoolPtr OpType = 353
OpStructEndOmitEmptyUintPtr OpType = 354 OpStructEndOmitEmptyBoolPtr OpType = 354
OpStructEndStringTagUintPtr OpType = 355 OpStructEndStringTagBoolPtr OpType = 355
OpStructFieldFloat32Ptr OpType = 356 OpStructFieldStringPtr OpType = 356
OpStructFieldOmitEmptyFloat32Ptr OpType = 357 OpStructFieldOmitEmptyStringPtr OpType = 357
OpStructFieldStringTagFloat32Ptr OpType = 358 OpStructFieldStringTagStringPtr OpType = 358
OpStructEndFloat32Ptr OpType = 359 OpStructEndStringPtr OpType = 359
OpStructEndOmitEmptyFloat32Ptr OpType = 360 OpStructEndOmitEmptyStringPtr OpType = 360
OpStructEndStringTagFloat32Ptr OpType = 361 OpStructEndStringTagStringPtr OpType = 361
OpStructFieldFloat64Ptr OpType = 362 OpStructFieldBytesPtr OpType = 362
OpStructFieldOmitEmptyFloat64Ptr OpType = 363 OpStructFieldOmitEmptyBytesPtr OpType = 363
OpStructFieldStringTagFloat64Ptr OpType = 364 OpStructFieldStringTagBytesPtr OpType = 364
OpStructEndFloat64Ptr OpType = 365 OpStructEndBytesPtr OpType = 365
OpStructEndOmitEmptyFloat64Ptr OpType = 366 OpStructEndOmitEmptyBytesPtr OpType = 366
OpStructEndStringTagFloat64Ptr OpType = 367 OpStructEndStringTagBytesPtr OpType = 367
OpStructFieldBoolPtr OpType = 368 OpStructFieldNumberPtr OpType = 368
OpStructFieldOmitEmptyBoolPtr OpType = 369 OpStructFieldOmitEmptyNumberPtr OpType = 369
OpStructFieldStringTagBoolPtr OpType = 370 OpStructFieldStringTagNumberPtr OpType = 370
OpStructEndBoolPtr OpType = 371 OpStructEndNumberPtr OpType = 371
OpStructEndOmitEmptyBoolPtr OpType = 372 OpStructEndOmitEmptyNumberPtr OpType = 372
OpStructEndStringTagBoolPtr OpType = 373 OpStructEndStringTagNumberPtr OpType = 373
OpStructFieldStringPtr OpType = 374 OpStructFieldArrayPtr OpType = 374
OpStructFieldOmitEmptyStringPtr OpType = 375 OpStructFieldOmitEmptyArrayPtr OpType = 375
OpStructFieldStringTagStringPtr OpType = 376 OpStructFieldStringTagArrayPtr OpType = 376
OpStructEndStringPtr OpType = 377 OpStructEndArrayPtr OpType = 377
OpStructEndOmitEmptyStringPtr OpType = 378 OpStructEndOmitEmptyArrayPtr OpType = 378
OpStructEndStringTagStringPtr OpType = 379 OpStructEndStringTagArrayPtr OpType = 379
OpStructFieldBytesPtr OpType = 380 OpStructFieldMapPtr OpType = 380
OpStructFieldOmitEmptyBytesPtr OpType = 381 OpStructFieldOmitEmptyMapPtr OpType = 381
OpStructFieldStringTagBytesPtr OpType = 382 OpStructFieldStringTagMapPtr OpType = 382
OpStructEndBytesPtr OpType = 383 OpStructEndMapPtr OpType = 383
OpStructEndOmitEmptyBytesPtr OpType = 384 OpStructEndOmitEmptyMapPtr OpType = 384
OpStructEndStringTagBytesPtr OpType = 385 OpStructEndStringTagMapPtr OpType = 385
OpStructFieldNumberPtr OpType = 386 OpStructFieldSlicePtr OpType = 386
OpStructFieldOmitEmptyNumberPtr OpType = 387 OpStructFieldOmitEmptySlicePtr OpType = 387
OpStructFieldStringTagNumberPtr OpType = 388 OpStructFieldStringTagSlicePtr OpType = 388
OpStructEndNumberPtr OpType = 389 OpStructEndSlicePtr OpType = 389
OpStructEndOmitEmptyNumberPtr OpType = 390 OpStructEndOmitEmptySlicePtr OpType = 390
OpStructEndStringTagNumberPtr OpType = 391 OpStructEndStringTagSlicePtr OpType = 391
OpStructFieldArrayPtr OpType = 392 OpStructFieldMarshalJSONPtr OpType = 392
OpStructFieldOmitEmptyArrayPtr OpType = 393 OpStructFieldOmitEmptyMarshalJSONPtr OpType = 393
OpStructFieldStringTagArrayPtr OpType = 394 OpStructFieldStringTagMarshalJSONPtr OpType = 394
OpStructEndArrayPtr OpType = 395 OpStructEndMarshalJSONPtr OpType = 395
OpStructEndOmitEmptyArrayPtr OpType = 396 OpStructEndOmitEmptyMarshalJSONPtr OpType = 396
OpStructEndStringTagArrayPtr OpType = 397 OpStructEndStringTagMarshalJSONPtr OpType = 397
OpStructFieldMapPtr OpType = 398 OpStructFieldMarshalTextPtr OpType = 398
OpStructFieldOmitEmptyMapPtr OpType = 399 OpStructFieldOmitEmptyMarshalTextPtr OpType = 399
OpStructFieldStringTagMapPtr OpType = 400 OpStructFieldStringTagMarshalTextPtr OpType = 400
OpStructEndMapPtr OpType = 401 OpStructEndMarshalTextPtr OpType = 401
OpStructEndOmitEmptyMapPtr OpType = 402 OpStructEndOmitEmptyMarshalTextPtr OpType = 402
OpStructEndStringTagMapPtr OpType = 403 OpStructEndStringTagMarshalTextPtr OpType = 403
OpStructFieldSlicePtr OpType = 404 OpStructFieldInterfacePtr OpType = 404
OpStructFieldOmitEmptySlicePtr OpType = 405 OpStructFieldOmitEmptyInterfacePtr OpType = 405
OpStructFieldStringTagSlicePtr OpType = 406 OpStructFieldStringTagInterfacePtr OpType = 406
OpStructEndSlicePtr OpType = 407 OpStructEndInterfacePtr OpType = 407
OpStructEndOmitEmptySlicePtr OpType = 408 OpStructEndOmitEmptyInterfacePtr OpType = 408
OpStructEndStringTagSlicePtr OpType = 409 OpStructEndStringTagInterfacePtr OpType = 409
OpStructFieldMarshalJSONPtr OpType = 410 OpStructField OpType = 410
OpStructFieldOmitEmptyMarshalJSONPtr OpType = 411 OpStructFieldOmitEmpty OpType = 411
OpStructFieldStringTagMarshalJSONPtr OpType = 412 OpStructFieldStringTag OpType = 412
OpStructEndMarshalJSONPtr OpType = 413 OpStructEnd OpType = 413
OpStructEndOmitEmptyMarshalJSONPtr OpType = 414 OpStructEndOmitEmpty OpType = 414
OpStructEndStringTagMarshalJSONPtr OpType = 415 OpStructEndStringTag OpType = 415
OpStructFieldMarshalTextPtr OpType = 416
OpStructFieldOmitEmptyMarshalTextPtr OpType = 417
OpStructFieldStringTagMarshalTextPtr OpType = 418
OpStructEndMarshalTextPtr OpType = 419
OpStructEndOmitEmptyMarshalTextPtr OpType = 420
OpStructEndStringTagMarshalTextPtr OpType = 421
OpStructFieldInterfacePtr OpType = 422
OpStructFieldOmitEmptyInterfacePtr OpType = 423
OpStructFieldStringTagInterfacePtr OpType = 424
OpStructEndInterfacePtr OpType = 425
OpStructEndOmitEmptyInterfacePtr OpType = 426
OpStructEndStringTagInterfacePtr OpType = 427
OpStructFieldRecursivePtr OpType = 428
OpStructFieldOmitEmptyRecursivePtr OpType = 429
OpStructFieldStringTagRecursivePtr OpType = 430
OpStructEndRecursivePtr OpType = 431
OpStructEndOmitEmptyRecursivePtr OpType = 432
OpStructEndStringTagRecursivePtr OpType = 433
OpStructField OpType = 434
OpStructFieldOmitEmpty OpType = 435
OpStructFieldStringTag OpType = 436
OpStructEnd OpType = 437
OpStructEndOmitEmpty OpType = 438
OpStructEndStringTag OpType = 439
) )
func (t OpType) String() string { func (t OpType) String() string {
if int(t) >= 440 { if int(t) >= 416 {
return "" return ""
} }
return opTypeStrings[int(t)] return opTypeStrings[int(t)]

View File

@ -518,7 +518,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
mapCtx.Buf = buf mapCtx.Buf = buf
encoder.ReleaseMapContext(mapCtx) encoder.ReleaseMapContext(mapCtx)
code = code.Next code = code.Next
case encoder.OpStructFieldRecursivePtr: case encoder.OpRecursivePtr:
p := load(ctxptr, code.Idx) p := load(ctxptr, code.Idx)
if p == 0 { if p == 0 {
code = code.Next code = code.Next
@ -526,7 +526,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
} }
store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum)) store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))
fallthrough fallthrough
case encoder.OpStructFieldRecursive: case encoder.OpRecursive:
ptr := load(ctxptr, code.Idx) ptr := load(ctxptr, code.Idx)
if ptr != 0 { if ptr != 0 {
if recursiveLevel > encoder.StartDetectingCyclesAfter { if recursiveLevel > encoder.StartDetectingCyclesAfter {
@ -555,7 +555,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next))) store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))
code = c code = c
recursiveLevel++ recursiveLevel++
case encoder.OpStructFieldRecursiveEnd: case encoder.OpRecursiveEnd:
recursiveLevel-- recursiveLevel--
// restore ctxptr // restore ctxptr

View File

@ -518,7 +518,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
mapCtx.Buf = buf mapCtx.Buf = buf
encoder.ReleaseMapContext(mapCtx) encoder.ReleaseMapContext(mapCtx)
code = code.Next code = code.Next
case encoder.OpStructFieldRecursivePtr: case encoder.OpRecursivePtr:
p := load(ctxptr, code.Idx) p := load(ctxptr, code.Idx)
if p == 0 { if p == 0 {
code = code.Next code = code.Next
@ -526,7 +526,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
} }
store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum)) store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))
fallthrough fallthrough
case encoder.OpStructFieldRecursive: case encoder.OpRecursive:
ptr := load(ctxptr, code.Idx) ptr := load(ctxptr, code.Idx)
if ptr != 0 { if ptr != 0 {
if recursiveLevel > encoder.StartDetectingCyclesAfter { if recursiveLevel > encoder.StartDetectingCyclesAfter {
@ -555,7 +555,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next))) store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))
code = c code = c
recursiveLevel++ recursiveLevel++
case encoder.OpStructFieldRecursiveEnd: case encoder.OpRecursiveEnd:
recursiveLevel-- recursiveLevel--
// restore ctxptr // restore ctxptr

View File

@ -534,7 +534,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
mapCtx.Buf = buf mapCtx.Buf = buf
encoder.ReleaseMapContext(mapCtx) encoder.ReleaseMapContext(mapCtx)
code = code.Next code = code.Next
case encoder.OpStructFieldRecursivePtr: case encoder.OpRecursivePtr:
p := load(ctxptr, code.Idx) p := load(ctxptr, code.Idx)
if p == 0 { if p == 0 {
code = code.Next code = code.Next
@ -542,7 +542,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
} }
store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum)) store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))
fallthrough fallthrough
case encoder.OpStructFieldRecursive: case encoder.OpRecursive:
ptr := load(ctxptr, code.Idx) ptr := load(ctxptr, code.Idx)
if ptr != 0 { if ptr != 0 {
if recursiveLevel > encoder.StartDetectingCyclesAfter { if recursiveLevel > encoder.StartDetectingCyclesAfter {
@ -571,7 +571,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next))) store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))
code = c code = c
recursiveLevel++ recursiveLevel++
case encoder.OpStructFieldRecursiveEnd: case encoder.OpRecursiveEnd:
recursiveLevel-- recursiveLevel--
// restore ctxptr // restore ctxptr

View File

@ -540,7 +540,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
mapCtx.Buf = buf mapCtx.Buf = buf
encoder.ReleaseMapContext(mapCtx) encoder.ReleaseMapContext(mapCtx)
code = code.Next code = code.Next
case encoder.OpStructFieldRecursivePtr: case encoder.OpRecursivePtr:
p := load(ctxptr, code.Idx) p := load(ctxptr, code.Idx)
if p == 0 { if p == 0 {
code = code.Next code = code.Next
@ -548,7 +548,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
} }
store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum)) store(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))
fallthrough fallthrough
case encoder.OpStructFieldRecursive: case encoder.OpRecursive:
ptr := load(ctxptr, code.Idx) ptr := load(ctxptr, code.Idx)
if ptr != 0 { if ptr != 0 {
if recursiveLevel > encoder.StartDetectingCyclesAfter { if recursiveLevel > encoder.StartDetectingCyclesAfter {
@ -577,7 +577,7 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, opt
store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next))) store(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))
code = c code = c
recursiveLevel++ recursiveLevel++
case encoder.OpStructFieldRecursiveEnd: case encoder.OpRecursiveEnd:
recursiveLevel-- recursiveLevel--
// restore ctxptr // restore ctxptr