anchor.diff:     *
      * For a range from 0 to the length of something, end exclusive, use
      * [RangeError.index].
  -   */
  -  RangeError.range(this.invalidValue, this.start, this.end,
  -                   [String message = "Invalid value"]) : super(message);
  +   *
  +   * An optional [name] can specify the argument name that has the
  +   * invalid value, and the [message] can override the default error
  +   * description.
  +   */
  +  RangeError.range(num invalidValue, this.start, this.end,
  +                   [String name, String message])
  +      : super.value(invalidValue, name,
  +                    (message != null) ? message : "Invalid value");
   
     /**
      * Creates a new [RangeError] stating that [index] is not a valid index
      * into [indexable].
      *
  +   * An optional [name] can specify the argument name that has the
  +   * invalid value, and the [message] can override the default error
  +   * description.
  +   *
      * The [length] is the length of [indexable] at the time of the error.
      * If `length` is omitted, it defaults to `indexable.length`.
  -   *
  -   * The message is used as part of the string representation of the error.
      */
     factory RangeError.index(int index, indexable,
  -                           [String message,
  +                           [String name,
  +                            String message,
                               int length]) = IndexError;
   
     String toString() {
  -    if (invalidValue == null) return "$message";
  +    if (!_hasValue) return "RangeError: $message";
       String value = Error.safeToString(invalidValue);
  +    String explanation = "";
       if (start == null) {
  -      if (end == null) {
  -        return "$message ($value)";
  +      if (end != null) {
  +        explanation = ": Not less than or equal to $end";
         }
  -      return "$message ($value): Value must be less than or equal to $end";
  -    }
  -    if (end == null) {
  -      return "$message ($value): Value must be greater than or equal to $start";
  -    }
  -    if (end > start) {
  -      return "$message ($value): Value must be in range $start..$end, "
  -             "inclusive.";
  -    }
  -    if (end < start) return "$message ($value): Valid range is empty";
  -    return "$message ($value): Only valid value is $start";
  +      // If both are null, we don't add a description of the limits.
  +    } else if (end == null) {
  +      explanation = ": Not greater than or equal to $start";
  +    } else if (end > start) {
  +      explanation = ": Not in range $start..$end, inclusive.";
  +    } else if (end < start) {
  +      explanation = ": Valid value range is empty";
  +    } else {
  +      // end == start.
  +      explanation = ": Only valid value is $start";
  +    }
  +    return "RangeError: $message ($value)$explanation";
     }
   }
   
  
positive.code: class IndexError extends ArgumentError implements RangeError {
    /** The indexable object that [index] was not a valid index into. */
    final indexable;
    /** The invalid index. */
    final int invalidValue;
    /** The length of [indexable] at the time of the error. */
    final int length;
  
  
negative.code:  * Error thrown due to an index being outside a valid range.
   */
  class RangeError extends ArgumentError {
    /** The minimum value that [value] is allowed to assume. */
    final num start;
    /** The maximum value that [value] is allowed to assume. */
  