| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.core; | 5 part of dart.core; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Error objects thrown in the case of a program failure. | 8 * Error objects thrown in the case of a program failure. |
| 9 * | 9 * |
| 10 * An `Error` object represents a program failure that the programmer | 10 * An `Error` object represents a program failure that the programmer |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 * description. | 211 * description. |
| 212 */ | 212 */ |
| 213 RangeError.value(num value, [String name, String message]) | 213 RangeError.value(num value, [String name, String message]) |
| 214 : start = null, end = null, | 214 : start = null, end = null, |
| 215 super.value(value, name, | 215 super.value(value, name, |
| 216 (message != null) ? message : "Value not in range"); | 216 (message != null) ? message : "Value not in range"); |
| 217 | 217 |
| 218 /** | 218 /** |
| 219 * Create a new [RangeError] with for an invalid value being outside a range. | 219 * Create a new [RangeError] with for an invalid value being outside a range. |
| 220 * | 220 * |
| 221 * The allowed range is from [start] to [end], inclusive. | 221 * The allowed range is from [minValue] to [maxValue], inclusive. |
| 222 * If `start` or `end` are `null`, the range is infinite in that direction. | 222 * If `minValue` or `maxValue` are `null`, the range is infinite in |
| 223 * that direction. |
| 223 * | 224 * |
| 224 * For a range from 0 to the length of something, end exclusive, use | 225 * For a range from 0 to the length of something, end exclusive, use |
| 225 * [RangeError.index]. | 226 * [RangeError.index]. |
| 226 * | 227 * |
| 227 * An optional [name] can specify the argument name that has the | 228 * An optional [name] can specify the argument name that has the |
| 228 * invalid value, and the [message] can override the default error | 229 * invalid value, and the [message] can override the default error |
| 229 * description. | 230 * description. |
| 230 */ | 231 */ |
| 231 RangeError.range(num invalidValue, this.start, this.end, | 232 RangeError.range(num invalidValue, int minValue, int maxValue, |
| 232 [String name, String message]) | 233 [String name, String message]) |
| 233 : super.value(invalidValue, name, | 234 : start = minValue, |
| 235 end = maxValue, |
| 236 super.value(invalidValue, name, |
| 234 (message != null) ? message : "Invalid value"); | 237 (message != null) ? message : "Invalid value"); |
| 235 | 238 |
| 236 /** | 239 /** |
| 237 * Creates a new [RangeError] stating that [index] is not a valid index | 240 * Creates a new [RangeError] stating that [index] is not a valid index |
| 238 * into [indexable]. | 241 * into [indexable]. |
| 239 * | 242 * |
| 240 * An optional [name] can specify the argument name that has the | 243 * An optional [name] can specify the argument name that has the |
| 241 * invalid value, and the [message] can override the default error | 244 * invalid value, and the [message] can override the default error |
| 242 * description. | 245 * description. |
| 243 * | 246 * |
| 244 * The [length] is the length of [indexable] at the time of the error. | 247 * The [length] is the length of [indexable] at the time of the error. |
| 245 * If `length` is omitted, it defaults to `indexable.length`. | 248 * If `length` is omitted, it defaults to `indexable.length`. |
| 246 */ | 249 */ |
| 247 factory RangeError.index(int index, indexable, | 250 factory RangeError.index(int index, indexable, |
| 248 [String name, | 251 [String name, |
| 249 String message, | 252 String message, |
| 250 int length]) = IndexError; | 253 int length]) = IndexError; |
| 251 | 254 |
| 255 /** |
| 256 * Check that a [value] lies in a specific interval. |
| 257 * |
| 258 * Throws if [value] is not in the interval. |
| 259 * The interval is from [minValue] to [maxValue], both inclusive. |
| 260 */ |
| 261 static void checkValueInInterval(int value, int minValue, int maxValue, |
| 262 [String name, String message]) { |
| 263 if (value < minValue || value > maxValue) { |
| 264 throw new RangeError.range(value, minValue, maxValue, name, message); |
| 265 } |
| 266 } |
| 267 |
| 268 /** |
| 269 * Check that a value is a valid index into an indexable object. |
| 270 * |
| 271 * Throws if [index] is not a valid index into [indexable]. |
| 272 * |
| 273 * An indexable object is one that has a `length` and a and index-operator |
| 274 * `[]` that accepts an index if `0 <= index < length`. |
| 275 * |
| 276 * If [length] is provided, it is used as the length of the indexable object, |
| 277 * otherwise the length is found as `idexable.length`. |
| 278 */ |
| 279 static void checkValidIndex(int index, var indexable, |
| 280 [String name, int length, String message]) { |
| 281 if (length == null) length = indexable.length; |
| 282 if (index < 0 || index >= length) { |
| 283 if (name == null) name = "index"; |
| 284 throw new RangeError.index(index, indexable, name, message, length); |
| 285 } |
| 286 } |
| 287 |
| 288 /** |
| 289 * Check that a range represents a slice of an indexable object. |
| 290 * |
| 291 * Throws if the range is not valid for an indexable object with |
| 292 * the given [length]. |
| 293 * A range is valid for an indexable object with a given [length] |
| 294 * |
| 295 * if `0 <= [start] <= [end] <= [length]`. |
| 296 * An `end` of `null` is considered equivalent to `length`. |
| 297 * |
| 298 * The [startName] and [endName] defaults to `"start"` and `"end"`, |
| 299 * respectively. |
| 300 */ |
| 301 static void checkValidRange(int start, int end, int length, |
| 302 [String startName, String endName, |
| 303 String message]) { |
| 304 if (start < 0 || start > length) { |
| 305 if (startName == null) startName = "start"; |
| 306 throw new RangeError.range(start, 0, length, startName, message); |
| 307 } |
| 308 if (end != null && (end < start || end > length)) { |
| 309 if (endName == null) endName = "end"; |
| 310 throw new RangeError.range(end, start, length, endName, message); |
| 311 } |
| 312 } |
| 313 |
| 314 /** |
| 315 * Check that an integer value isn't negative. |
| 316 * |
| 317 * Throws if the value is negative. |
| 318 */ |
| 319 static void checkNotNegative(int value, [String name, String message]) { |
| 320 if (value < 0) throw new RangeError.range(value, 0, null, name, message); |
| 321 } |
| 322 |
| 252 String toString() { | 323 String toString() { |
| 253 if (!_hasValue) return "RangeError: $message"; | 324 if (!_hasValue) return "RangeError: $message"; |
| 254 String value = Error.safeToString(invalidValue); | 325 String value = Error.safeToString(invalidValue); |
| 255 String explanation = ""; | 326 String explanation = ""; |
| 256 if (start == null) { | 327 if (start == null) { |
| 257 if (end != null) { | 328 if (end != null) { |
| 258 explanation = ": Not less than or equal to $end"; | 329 explanation = ": Not less than or equal to $end"; |
| 259 } | 330 } |
| 260 // If both are null, we don't add a description of the limits. | 331 // If both are null, we don't add a description of the limits. |
| 261 } else if (end == null) { | 332 } else if (end == null) { |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 * the first time it is read. If evaluating the initializer expression causes | 548 * the first time it is read. If evaluating the initializer expression causes |
| 478 * another read of the variable, this error is thrown. | 549 * another read of the variable, this error is thrown. |
| 479 */ | 550 */ |
| 480 class CyclicInitializationError extends Error { | 551 class CyclicInitializationError extends Error { |
| 481 final String variableName; | 552 final String variableName; |
| 482 CyclicInitializationError([this.variableName]); | 553 CyclicInitializationError([this.variableName]); |
| 483 String toString() => variableName == null | 554 String toString() => variableName == null |
| 484 ? "Reading static variable during its initialization" | 555 ? "Reading static variable during its initialization" |
| 485 : "Reading static variable '$variableName' during its initialization"; | 556 : "Reading static variable '$variableName' during its initialization"; |
| 486 } | 557 } |
| OLD | NEW |