whole_func_string: function ReadStream(opts) {
      assert.object(opts);
      if (opts.encoding !== null)
          assert.optionalString(opts.encoding, 'options.encoding');
      assert.optionalNumber(opts.end, 'options.end');
      assert.optionalNumber(opts.fd, 'options.fd');
      assert.object(opts.fs, 'options.fs');
      assert.optionalNumber(opts.start, 'options.start');
      assert.optionalBool(opts.autoClose, 'options.autoClose');
  
      stream.Readable.call(this, opts);
  
      this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;
      this.encoding = opts.encoding || null;
  
      this._fd = opts.fd;
      this._fs = opts.fs;
      this._end = opts.end || Infinity;
      this._start = opts.start || 0;
  
      this._pos = this._start;
      this._range = this._end - this._start;
  
      if (this._fd) {
          setImmediate(this.emit.bind(this, 'open', this._fd));
      } else {
          this._opening = true;
      }
  }
func_code_string: function ReadStream(opts) {
      assert.object(opts);
      if (opts.encoding !== null)
          assert.optionalString(opts.encoding, 'options.encoding');
      assert.optionalNumber(opts.end, 'options.end');
      assert.optionalNumber(opts.fd, 'options.fd');
      assert.object(opts.fs, 'options.fs');
      assert.optionalNumber(opts.start, 'options.start');
      assert.optionalBool(opts.autoClose, 'options.autoClose');
  
      stream.Readable.call(this, opts);
  
      this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;
      this.encoding = opts.encoding || null;
  
      this._fd = opts.fd;
      this._fs = opts.fs;
      this._end = opts.end || Infinity;
      this._start = opts.start || 0;
  
      this._pos = this._start;
      this._range = this._end - this._start;
  
      if (this._fd) {
          setImmediate(this.emit.bind(this, 'open', this._fd));
      } else {
          this._opening = true;
      }
  }
func_documentation_string: /--- Streams