12345678910111213141516171819202122232425262728293031323334353637 |
- package decoder
- import (
- "unsafe"
- "github.com/goccy/go-json/internal/runtime"
- )
- type anonymousFieldDecoder struct {
- structType *runtime.Type
- offset uintptr
- dec Decoder
- }
- func newAnonymousFieldDecoder(structType *runtime.Type, offset uintptr, dec Decoder) *anonymousFieldDecoder {
- return &anonymousFieldDecoder{
- structType: structType,
- offset: offset,
- dec: dec,
- }
- }
- func (d *anonymousFieldDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {
- if *(*unsafe.Pointer)(p) == nil {
- *(*unsafe.Pointer)(p) = unsafe_New(d.structType)
- }
- p = *(*unsafe.Pointer)(p)
- return d.dec.DecodeStream(s, depth, unsafe.Pointer(uintptr(p)+d.offset))
- }
- func (d *anonymousFieldDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {
- if *(*unsafe.Pointer)(p) == nil {
- *(*unsafe.Pointer)(p) = unsafe_New(d.structType)
- }
- p = *(*unsafe.Pointer)(p)
- return d.dec.Decode(ctx, cursor, depth, unsafe.Pointer(uintptr(p)+d.offset))
- }
|