Index: sdk/lib/_internal/compiler/implementation/lib/interceptors.dart |
=================================================================== |
--- sdk/lib/_internal/compiler/implementation/lib/interceptors.dart (revision 14879) |
+++ sdk/lib/_internal/compiler/implementation/lib/interceptors.dart (working copy) |
@@ -22,6 +22,72 @@ |
return JS('int', r'#.charCodeAt(#)', this, index); |
} |
+ Iterable<Match> allMatches(String str) { |
+ checkString(str); |
+ return allMatchesInStringUnchecked(this, str); |
+ } |
+ |
+ String concat(String other) { |
+ if (other is !String) throw new ArgumentError(other); |
+ return JS('String', r'# + #', this, other); |
+ } |
+ |
+ bool endsWith(String other) { |
+ checkString(other); |
+ int otherLength = other.length; |
+ if (otherLength > length) return false; |
+ return other == substring(length - otherLength); |
+ } |
+ |
+ String replaceAll(Pattern from, String to) { |
+ checkString(to); |
+ return stringReplaceAllUnchecked(this, from, to); |
+ } |
+ |
+ String replaceFirst(Pattern from, String to) { |
+ checkString(to); |
+ return stringReplaceFirstUnchecked(this, from, to); |
+ } |
+ |
+ List<String> split(Pattern pattern) { |
+ checkNull(pattern); |
+ return stringSplitUnchecked(this, pattern); |
+ } |
+ |
+ List<String> splitChars() { |
+ return JS('List', r'#.split("")', this); |
+ } |
+ |
+ bool startsWith(String other) { |
+ checkString(other); |
+ int otherLength = other.length; |
+ if (otherLength > length) return false; |
+ return JS('bool', r'# == #', other, |
+ JS('String', r'#.substring(0, #)', this, otherLength)); |
+ } |
+ |
+ String substring(int startIndex, [int endIndex]) { |
+ checkNum(startIndex); |
+ if (endIndex == null) endIndex = length; |
+ checkNum(endIndex); |
+ if (startIndex < 0 ) throw new RangeError.value(startIndex); |
+ if (startIndex > endIndex) throw new RangeError.value(startIndex); |
+ if (endIndex > length) throw new RangeError.value(endIndex); |
+ return JS('String', r'#.substring(#, #)', this, startIndex, endIndex); |
+ } |
+ |
+ String toLowerCase() { |
+ return JS('String', r'#.toLowerCase()', this); |
+ } |
+ |
+ String toUpperCase() { |
+ return JS('String', r'#.toUpperCase()', this); |
+ } |
+ |
+ String trim() { |
+ return JS('String', r'#.trim()', this); |
+ } |
+ |
List<int> get charCodes { |
List<int> result = new List<int>(length); |
for (int i = 0; i < length; i++) { |
@@ -534,19 +600,6 @@ |
return JS('String', r'#.toString(#)', receiver, radix); |
} |
-allMatches(receiver, str) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.allMatches(str)); |
- checkString(str); |
- return allMatchesInStringUnchecked(receiver, str); |
-} |
- |
-concat(receiver, other) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.concat(other)); |
- |
- if (other is !String) throw new ArgumentError(other); |
- return JS('String', r'# + #', receiver, other); |
-} |
- |
contains$1(receiver, other) { |
if (receiver is String) { |
return contains$2(receiver, other, 0); |
@@ -567,91 +620,6 @@ |
return stringContainsUnchecked(receiver, other, startIndex); |
} |
-endsWith(receiver, other) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.endsWith(other)); |
- |
- checkString(other); |
- int receiverLength = receiver.length; |
- int otherLength = other.length; |
- if (otherLength > receiverLength) return false; |
- return other == receiver.substring(receiverLength - otherLength); |
-} |
- |
-replaceAll(receiver, from, to) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.replaceAll(from, to)); |
- |
- checkString(to); |
- return stringReplaceAllUnchecked(receiver, from, to); |
-} |
- |
-replaceFirst(receiver, from, to) { |
- if (receiver is !String) { |
- return UNINTERCEPTED(receiver.replaceFirst(from, to)); |
- } |
- checkString(to); |
- return stringReplaceFirstUnchecked(receiver, from, to); |
-} |
- |
-split(receiver, pattern) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.split(pattern)); |
- checkNull(pattern); |
- return stringSplitUnchecked(receiver, pattern); |
-} |
- |
-splitChars(receiver) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.splitChars()); |
- |
- return JS('List', r'#.split("")', receiver); |
-} |
- |
-startsWith(receiver, other) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.startsWith(other)); |
- checkString(other); |
- |
- int length = other.length; |
- if (length > receiver.length) return false; |
- return JS('bool', r'# == #', other, |
- JS('String', r'#.substring(0, #)', receiver, length)); |
-} |
- |
-substring$1(receiver, startIndex) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.substring(startIndex)); |
- |
- return substring$2(receiver, startIndex, null); |
-} |
- |
-substring$2(receiver, startIndex, endIndex) { |
- if (receiver is !String) { |
- return UNINTERCEPTED(receiver.substring(startIndex, endIndex)); |
- } |
- checkNum(startIndex); |
- var length = receiver.length; |
- if (endIndex == null) endIndex = length; |
- checkNum(endIndex); |
- if (startIndex < 0 ) throw new RangeError.value(startIndex); |
- if (startIndex > endIndex) throw new RangeError.value(startIndex); |
- if (endIndex > length) throw new RangeError.value(endIndex); |
- return substringUnchecked(receiver, startIndex, endIndex); |
-} |
- |
-toLowerCase(receiver) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.toLowerCase()); |
- |
- return JS('String', r'#.toLowerCase()', receiver); |
-} |
- |
-toUpperCase(receiver) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.toUpperCase()); |
- |
- return JS('String', r'#.toUpperCase()', receiver); |
-} |
- |
-trim(receiver) { |
- if (receiver is !String) return UNINTERCEPTED(receiver.trim()); |
- |
- return JS('String', r'#.trim()', receiver); |
-} |
- |
/** |
* This is the [Jenkins hash function][1] but using masking to keep |
* values in SMI range. |