code: func makePtrDecoder(typ reflect.Type) (decoder, error) {
  	etype := typ.Elem()
  	etypeinfo, err := cachedTypeInfo1(etype, tags{})
  	if err != nil {
  		return nil, err
  	}
  	dec := func(s *Stream, val reflect.Value) (err error) {
  		newval := val
  		if val.IsNil() {
  			newval = reflect.New(etype)
  		}
  		if err = etypeinfo.decoder(s, newval.Elem()); err == nil {
  			val.Set(newval)
  		}
  		return err
  	}
  	return dec, nil
  }
docs: // makePtrDecoder creates a decoder that decodes into
  // the pointer's element type.