go-json/decode_compile_norace.go

25 lines
504 B
Go
Raw Normal View History

2021-02-04 12:00:08 +03:00
// +build !race
package json
2021-02-10 19:15:31 +03:00
import "unsafe"
func decodeCompileToGetDecoder(typ *rtype) (decoder, error) {
typeptr := uintptr(unsafe.Pointer(typ))
2021-02-09 15:37:18 +03:00
if typeptr > maxTypeAddr {
return decodeCompileToGetDecoderSlowPath(typeptr, typ)
2021-02-04 12:00:08 +03:00
}
index := (typeptr - baseTypeAddr) >> typeAddrShift
2021-02-04 12:00:08 +03:00
if dec := cachedDecoder[index]; dec != nil {
return dec, nil
}
dec, err := decodeCompileHead(typ, map[uintptr]decoder{})
2021-02-04 12:00:08 +03:00
if err != nil {
return nil, err
}
cachedDecoder[index] = dec
return dec, nil
}