code: func (d *Decoder) parseInt(v reflect.Value) {
  	start := d.Offset - 1
  	d.readUntil('e')
  	if d.buf.Len() == 0 {
  		panic(&SyntaxError{
  			Offset: start,
  			What:   errors.New("empty integer value"),
  		})
  	}
  
  	s := bytesAsString(d.buf.Bytes())
  
  	switch v.Kind() {
  	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  		n, err := strconv.ParseInt(s, 10, 64)
  		checkForIntParseError(err, start)
  
  		if v.OverflowInt(n) {
  			panic(&UnmarshalTypeError{
  				Value: "integer " + s,
  				Type:  v.Type(),
  			})
  		}
  		v.SetInt(n)
  	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
  		n, err := strconv.ParseUint(s, 10, 64)
  		checkForIntParseError(err, start)
  
  		if v.OverflowUint(n) {
  			panic(&UnmarshalTypeError{
  				Value: "integer " + s,
  				Type:  v.Type(),
  			})
  		}
  		v.SetUint(n)
  	case reflect.Bool:
  		v.SetBool(s != "0")
  	default:
  		panic(&UnmarshalTypeError{
  			Value: "integer " + s,
  			Type:  v.Type(),
  		})
  	}
  	d.buf.Reset()
  }
docs: // called when 'i' was consumed