int checkValidRange(int start, int end, int length, [ String startName, String endName, String message ])

Check that a range represents a slice of an indexable object.

Throws if the range is not valid for an indexable object with the given length. A range is valid for an indexable object with a given length

if 0 <= [start] <= [end] <= [length]. An end of null is considered equivalent to length.

The startName and endName defaults to "start" and "end", respectively.

Returns the actual end value, which is length if end is null, and end otherwise.

Source

static int checkValidRange(int start, int end, int length,
                            [String startName, String endName,
                             String message]) {
  // Comparing with `0` as receiver produces better dart2js type inference.
  // Ditto `start > end` below.
  if (0 > start || start > length) {
    if (startName == null) startName = "start";
    throw new RangeError.range(start, 0, length, startName, message);
  }
  if (end != null) {
    if (start > end || end > length) {
      if (endName == null) endName = "end";
      throw new RangeError.range(end, start, length, endName, message);
    }
    return end;
  }
  return length;
}