MCPcopy Index your code
hub / github.com/segmentio/encoding / decodeMap

Method decodeMap

json/decode.go:647–725  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer, t, kt, vt reflect.Type, kz, vz reflect.Value, decodeKey, decodeValue decodeFunc)

Source from the content-addressed store, hash-verified

645}
646
647func (d decoder) decodeMap(b []byte, p unsafe.Pointer, t, kt, vt reflect.Type, kz, vz reflect.Value, decodeKey, decodeValue decodeFunc) ([]byte, error) {
648 if hasNullPrefix(b) {
649 *(*unsafe.Pointer)(p) = nil
650 return b[4:], nil
651 }
652
653 if len(b) < 2 || b[0] != '{' {
654 return d.inputError(b, t)
655 }
656 i := 0
657 m := reflect.NewAt(t, p).Elem()
658
659 k := reflect.New(kt).Elem()
660 v := reflect.New(vt).Elem()
661
662 kptr := (*iface)(unsafe.Pointer(&k)).ptr
663 vptr := (*iface)(unsafe.Pointer(&v)).ptr
664 input := b
665
666 if m.IsNil() {
667 m = reflect.MakeMap(t)
668 }
669
670 var err error
671 b = b[1:]
672 for {
673 k.Set(kz)
674 v.Set(vz)
675 b = skipSpaces(b)
676
677 if len(b) != 0 && b[0] == '}' {
678 *(*unsafe.Pointer)(p) = unsafe.Pointer(m.Pointer())
679 return b[1:], nil
680 }
681
682 if i != 0 {
683 if len(b) == 0 {
684 return b, syntaxError(b, "unexpected end of JSON input after object field value")
685 }
686 if b[0] != ',' {
687 return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0])
688 }
689 b = skipSpaces(b[1:])
690 }
691
692 if hasNullPrefix(b) {
693 return b, syntaxError(b, "cannot decode object key string from 'null' value")
694 }
695
696 if b, err = decodeKey(d, b, kptr); err != nil {
697 return objectKeyError(b, err)
698 }
699 b = skipSpaces(b)
700
701 if len(b) == 0 {
702 return b, syntaxError(b, "unexpected end of JSON input after object field key")
703 }
704 if b[0] != ':' {

Callers 1

constructMapDecodeFuncFunction · 0.80

Calls 9

inputErrorMethod · 0.95
parseValueMethod · 0.95
prependFieldMethod · 0.95
hasNullPrefixFunction · 0.85
skipSpacesFunction · 0.85
syntaxErrorFunction · 0.85
objectKeyErrorFunction · 0.85
ElemMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected