处理AI胡乱生成的乱摊子
This commit is contained in:
40
vendor/github.com/bytedance/sonic/internal/resolver/resolver.go
generated
vendored
40
vendor/github.com/bytedance/sonic/internal/resolver/resolver.go
generated
vendored
@@ -17,10 +17,11 @@
|
||||
package resolver
|
||||
|
||||
import (
|
||||
`fmt`
|
||||
`reflect`
|
||||
`strings`
|
||||
`sync`
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
"sync"
|
||||
_ "unsafe"
|
||||
)
|
||||
|
||||
type FieldOpts int
|
||||
@@ -29,6 +30,7 @@ type OffsetType int
|
||||
const (
|
||||
F_omitempty FieldOpts = 1 << iota
|
||||
F_stringize
|
||||
F_omitzero
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -47,6 +49,7 @@ type FieldMeta struct {
|
||||
Path []Offset
|
||||
Opts FieldOpts
|
||||
Type reflect.Type
|
||||
IsZero func(reflect.Value) bool
|
||||
}
|
||||
|
||||
func (self *FieldMeta) String() string {
|
||||
@@ -117,20 +120,26 @@ func resolveFields(vt reflect.Type) []FieldMeta {
|
||||
|
||||
/* convert each field */
|
||||
for _, fv := range tfv.list {
|
||||
/* add to result */
|
||||
ret = append(ret, FieldMeta{})
|
||||
fm := &ret[len(ret)-1]
|
||||
|
||||
item := vt
|
||||
path := []Offset(nil)
|
||||
opts := FieldOpts(0)
|
||||
|
||||
/* check for "string" */
|
||||
if fv.quoted {
|
||||
opts |= F_stringize
|
||||
fm.Opts |= F_stringize
|
||||
}
|
||||
|
||||
/* check for "omitempty" */
|
||||
if fv.omitEmpty {
|
||||
opts |= F_omitempty
|
||||
fm.Opts |= F_omitempty
|
||||
}
|
||||
|
||||
/* handle the "omitzero" */
|
||||
handleOmitZero(fv, fm)
|
||||
|
||||
/* dump the field path */
|
||||
for _, i := range fv.index {
|
||||
kind := F_offset
|
||||
@@ -161,13 +170,9 @@ func resolveFields(vt reflect.Type) []FieldMeta {
|
||||
path[idx].Kind = F_offset
|
||||
}
|
||||
|
||||
/* add to result */
|
||||
ret = append(ret, FieldMeta {
|
||||
Type: fvt,
|
||||
Opts: opts,
|
||||
Path: path,
|
||||
Name: fv.name,
|
||||
})
|
||||
fm.Type = fvt
|
||||
fm.Path = path
|
||||
fm.Name = fv.name
|
||||
}
|
||||
|
||||
/* optimize the offsets */
|
||||
@@ -212,3 +217,10 @@ func ResolveStruct(vt reflect.Type) []FieldMeta {
|
||||
fieldCache[vt] = fm
|
||||
return fm
|
||||
}
|
||||
|
||||
func handleOmitZero(fv StdField, fm *FieldMeta) {
|
||||
if fv.omitZero {
|
||||
fm.Opts |= F_omitzero
|
||||
fm.IsZero = fv.isZero
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user