(b []byte, p unsafe.Pointer, t reflect.Type, decode decodeFunc)
| 1246 | } |
| 1247 | |
| 1248 | func (d decoder) decodePointer(b []byte, p unsafe.Pointer, t reflect.Type, decode decodeFunc) ([]byte, error) { |
| 1249 | if hasNullPrefix(b) { |
| 1250 | pp := *(*unsafe.Pointer)(p) |
| 1251 | if pp != nil && t.Kind() == reflect.Ptr { |
| 1252 | return decode(d, b, pp) |
| 1253 | } |
| 1254 | *(*unsafe.Pointer)(p) = nil |
| 1255 | return b[4:], nil |
| 1256 | } |
| 1257 | |
| 1258 | v := *(*unsafe.Pointer)(p) |
| 1259 | if v == nil { |
| 1260 | v = unsafe.Pointer(reflect.New(t).Pointer()) |
| 1261 | *(*unsafe.Pointer)(p) = v |
| 1262 | } |
| 1263 | |
| 1264 | return decode(d, b, v) |
| 1265 | } |
| 1266 | |
| 1267 | func (d decoder) decodeInterface(b []byte, p unsafe.Pointer) ([]byte, error) { |
| 1268 | val := *(*any)(p) |
no test coverage detected