tape: Properly allocate maps when decoding KTV
This commit is contained in:
parent
2e03867c66
commit
ba2dc6b53f
@ -116,7 +116,7 @@ func DecodeAnyInto(decoder *Decoder, destination any, tag Tag) (n int, err error
|
|||||||
func DecodeAny(decoder *Decoder, tag Tag) (value any, n int, err error) {
|
func DecodeAny(decoder *Decoder, tag Tag) (value any, n int, err error) {
|
||||||
destination, err := skeletonPointer(decoder, tag)
|
destination, err := skeletonPointer(decoder, tag)
|
||||||
if err != nil { return nil, n, err }
|
if err != nil { return nil, n, err }
|
||||||
nn, err := decodeAny(decoder, destination, tag)
|
nn, err := decodeAny(decoder, destination.Elem(), tag)
|
||||||
n += nn; if err != nil { return nil, n, err }
|
n += nn; if err != nil { return nil, n, err }
|
||||||
return destination.Elem().Interface(), n, err
|
return destination.Elem().Interface(), n, err
|
||||||
}
|
}
|
||||||
@ -496,7 +496,11 @@ func skeletonValue(decoder *Decoder, tag Tag) (reflect.Value, error) {
|
|||||||
func skeletonPointer(decoder *Decoder, tag Tag) (reflect.Value, error) {
|
func skeletonPointer(decoder *Decoder, tag Tag) (reflect.Value, error) {
|
||||||
typ, err := typeOf(decoder, tag)
|
typ, err := typeOf(decoder, tag)
|
||||||
if err != nil { return reflect.Value { }, err }
|
if err != nil { return reflect.Value { }, err }
|
||||||
return reflect.New(typ), nil
|
value := reflect.New(typ)
|
||||||
|
if tag.Is(KTV) {
|
||||||
|
value.Elem().Set(reflect.MakeMap(typ))
|
||||||
|
}
|
||||||
|
return value, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// typeOf returns the type of the current tag being decoded. It does not use up
|
// typeOf returns the type of the current tag being decoded. It does not use up
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user