MCPcopy
hub / github.com/uptrace/uptrace / decodePointer

Method decodePointer

pkg/msgp/decoder.go:414–429  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer, t reflect.Type, decode decodeFunc)

Source from the content-addressed store, hash-verified

412 return decode(d, b, unsafe.Pointer(uintptr(v)+offset))
413}
414func (d decoder) decodePointer(b []byte, p unsafe.Pointer, t reflect.Type, decode decodeFunc) ([]byte, error) {
415 if hasNilCode(b) {
416 pp := *(*unsafe.Pointer)(p)
417 if pp != nil && t.Kind() == reflect.Ptr {
418 return decode(d, b, pp)
419 }
420 *(*unsafe.Pointer)(p) = nil
421 return b[1:], nil
422 }
423 v := *(*unsafe.Pointer)(p)
424 if v == nil {
425 v = unsafe.Pointer(reflect.New(t).Pointer())
426 *(*unsafe.Pointer)(p) = v
427 }
428 return decode(d, b, v)
429}
430func (d decoder) decodeInterface(b []byte, p unsafe.Pointer) ([]byte, error) {
431 v, b, err := ParseAny(b, d.flags)
432 if err != nil {

Callers 1

createPointerDecodeFuncFunction · 0.80

Calls 3

hasNilCodeFunction · 0.85
KindMethod · 0.80
PointerMethod · 0.80

Tested by

no test coverage detected