readInt32() {
    let result = 0,
      shift = 0
    while (this.offset < this.buf.byteLength) {
      const nextByte = this.buf[this.offset]
      if (
        (shift === 28 && (nextByte & 0x80) !== 0) || // more than 5 bytes
        (shift === 28 && (nextByte & 0x40) === 0 && (nextByte & 0x38) !== 0) || // positive int > 0x7fffffff
        (shift === 28 && (nextByte & 0x40) !== 0 && (nextByte & 0x38) !== 0x38)
      ) {
        // negative int < -0x80000000
        throw new RangeError("number out of range")
      }
      result |= (nextByte & 0x7f) << shift
      shift += 7
      this.offset++

      if ((nextByte & 0x80) === 0) {
        if ((nextByte & 0x40) === 0 || shift > 28) {
          return result // positive, or negative value that doesn't need sign-extending
        } else {
          return result | (-1 << shift) // sign-extend negative integer
        }
      }
    }
    throw new RangeError("buffer ended with incomplete number")
  }
Reads a LEB128-encoded signed integer from the current position in the buffer.
Throws an exception if the value doesn't fit in a 32-bit signed int.