Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Unified Diff: tool/input_sdk/lib/core/errors.dart

Issue 1947723002: Update core/errors.dart (Closed) Base URL: https://github.com/dart-lang/dev_compiler@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/input_sdk/private/js_helper.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tool/input_sdk/lib/core/errors.dart
diff --git a/tool/input_sdk/lib/core/errors.dart b/tool/input_sdk/lib/core/errors.dart
index 0ac18808e643191f51e96665a57656df8ad4e2bf..4f9da83bed3fb82adad1df3bbd206b89d5c4f378 100644
--- a/tool/input_sdk/lib/core/errors.dart
+++ b/tool/input_sdk/lib/core/errors.dart
@@ -157,32 +157,34 @@ class ArgumentError extends Error {
*/
ArgumentError.value(value,
[String this.name,
- String this.message = "Invalid argument"])
+ String this.message])
: invalidValue = value,
_hasValue = true;
/**
* Create an argument error for a `null` argument that must not be `null`.
- *
- * Shorthand for calling [ArgumentError.value] with a `null` value and a
- * message of `"Must not be null"`.
*/
- ArgumentError.notNull([String name])
- : this.value(null, name, "Must not be null");
+ ArgumentError.notNull([this.name])
+ : _hasValue = false,
+ message = "Must not be null",
+ invalidValue = null;
+
+ // Helper functions for toString overridden in subclasses.
+ String get _errorName => "Invalid argument${!_hasValue ? "(s)" : ""}";
+ String get _errorExplanation => "";
String toString() {
- if (!_hasValue) {
- var result = "Invalid arguments(s)";
- if (message != null) {
- result = "$result: $message";
- }
- return result;
- }
String nameString = "";
if (name != null) {
nameString = " ($name)";
}
- return "$message$nameString: ${Error.safeToString(invalidValue)}";
+ var message = (this.message == null) ? "" : ": ${this.message}";
+ String prefix = "$_errorName$nameString$message";
+ if (!_hasValue) return prefix;
+ // If we know the invalid value, we can try to describe the problem.
+ String explanation = _errorExplanation;
+ String errorValue = Error.safeToString(invalidValue);
+ return "$prefix$explanation: $errorValue";
}
}
@@ -274,12 +276,13 @@ class RangeError extends ArgumentError {
* `[]` that accepts an index if `0 <= index < length`.
*
* If [length] is provided, it is used as the length of the indexable object,
- * otherwise the length is found as `idexable.length`.
+ * otherwise the length is found as `indexable.length`.
*/
static void checkValidIndex(int index, var indexable,
[String name, int length, String message]) {
if (length == null) length = indexable.length;
- if (index < 0 || index >= length) {
+ // Comparing with `0` as receiver produces better dart2js type inference.
+ if (0 > index || index >= length) {
if (name == null) name = "index";
throw new RangeError.index(index, indexable, name, message, length);
}
@@ -297,18 +300,27 @@ class RangeError extends ArgumentError {
*
* 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.
*/
- static void checkValidRange(int start, int end, int length,
+ static int checkValidRange(int start, int end, int length,
[String startName, String endName,
String message]) {
- if (start < 0 || start > length) {
+ // 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 && (end < start || end > length)) {
- if (endName == null) endName = "end";
- throw new RangeError.range(end, start, length, endName, 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;
}
/**
@@ -320,9 +332,9 @@ class RangeError extends ArgumentError {
if (value < 0) throw new RangeError.range(value, 0, null, name, message);
}
- String toString() {
- if (!_hasValue) return "RangeError: $message";
- String value = Error.safeToString(invalidValue);
+ String get _errorName => "RangeError";
+ String get _errorExplanation {
+ assert(_hasValue);
String explanation = "";
if (start == null) {
if (end != null) {
@@ -332,14 +344,14 @@ class RangeError extends ArgumentError {
} else if (end == null) {
explanation = ": Not greater than or equal to $start";
} else if (end > start) {
- explanation = ": Not in range $start..$end, inclusive.";
+ 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";
+ return explanation;
}
}
@@ -376,14 +388,16 @@ class IndexError extends ArgumentError implements RangeError {
int get start => 0;
int get end => length - 1;
- String toString() {
+ String get _errorName => "RangeError";
+ String get _errorExplanation {
assert(_hasValue);
- String target = Error.safeToString(indexable);
- var explanation = "index should be less than $length";
if (invalidValue < 0) {
- explanation = "index must not be negative";
+ return ": index must not be negative";
+ }
+ if (length == 0) {
+ return ": no indices are valid";
}
- return "RangeError: $message ($target[$invalidValue]): $explanation";
+ return ": index should be less than $length";
}
}
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/input_sdk/private/js_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698