Index: sdk/lib/_internal/js_runtime/lib/js_helper.dart |
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart |
index 91049cda0fe66872d542cdc2d79fdb2ac2b06f45..b4ab91c192b236631901ea56dfd63960692ea18a 100644 |
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart |
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart |
@@ -1566,7 +1566,7 @@ ioore(receiver, index) { |
*/ |
@NoInline() |
Error diagnoseIndexError(indexable, index) { |
- if (index is !int) return new ArgumentError.value(index, 'index'); |
+ if (index is! int) return new ArgumentError.value(index, 'index'); |
int length = indexable.length; |
// The following returns the same error that would be thrown by calling |
// [RangeError.checkValidIndex] with no optional parameters provided. |
@@ -1577,6 +1577,29 @@ Error diagnoseIndexError(indexable, index) { |
return new RangeError.value(index, 'index'); |
} |
+/** |
+ * Diagnoses a range error. Returns the ArgumentError or RangeError that |
+ * describes the problem. |
+ */ |
+@NoInline() |
+Error diagnoseRangeError(start, end, length) { |
+ if (start is! int) { |
+ return new ArgumentError.value(start, 'start'); |
+ } |
+ if (start < 0 || start > length) { |
+ return new RangeError.range(start, 0, length, 'start'); |
+ } |
+ if (end != null) { |
+ if (end is! int) { |
+ return new ArgumentError.value(end, 'end'); |
+ } |
+ if (end < start || end > length) { |
+ return new RangeError.range(end, start, length, 'end'); |
+ } |
+ } |
+ // The above should always match, but if it does not, use the following. |
+ return new ArgumentError.value(end, "end"); |
+} |
stringLastIndexOfUnchecked(receiver, element, start) |
=> JS('int', r'#.lastIndexOf(#, #)', receiver, element, start); |