Index: runtime/lib/string_patch.dart |
diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart |
index 9c7e5843b1f77fcc73dbc06fe80bc79e642be115..7fad31b0452cbf1fa99a4f4583178a53280f33a9 100644 |
--- a/runtime/lib/string_patch.dart |
+++ b/runtime/lib/string_patch.dart |
@@ -7,42 +7,48 @@ const int _maxLatin1 = 0xff; |
const int _maxUtf16 = 0xffff; |
const int _maxUnicode = 0x10ffff; |
-@patch class String { |
- @patch factory String.fromCharCodes(Iterable<int> charCodes, |
- [int start = 0, int end]) { |
- if (charCodes is! Iterable) throw new ArgumentError.value(charCodes, "charCodes"); |
+@patch |
+class String { |
+ @patch |
+ factory String.fromCharCodes(Iterable<int> charCodes, |
+ [int start = 0, int end]) { |
+ if (charCodes is! Iterable) |
+ throw new ArgumentError.value(charCodes, "charCodes"); |
if (start is! int) throw new ArgumentError.value(start, "start"); |
if (end != null && end is! int) throw new ArgumentError.value(end, "end"); |
return _StringBase.createFromCharCodes(charCodes, start, end, null); |
} |
- @patch factory String.fromCharCode(int charCode) { |
+ @patch |
+ factory String.fromCharCode(int charCode) { |
if (charCode >= 0) { |
if (charCode <= 0xff) { |
return _OneByteString._allocate(1).._setAt(0, charCode); |
} |
if (charCode <= 0xffff) { |
- return _StringBase._createFromCodePoints(new _List(1)..[0] = charCode, |
- 0, 1); |
+ return _StringBase._createFromCodePoints( |
+ new _List(1)..[0] = charCode, 0, 1); |
} |
if (charCode <= 0x10ffff) { |
var low = 0xDC00 | (charCode & 0x3ff); |
int bits = charCode - 0x10000; |
var high = 0xD800 | (bits >> 10); |
- return _StringBase._createFromCodePoints(new _List(2)..[0] = high |
- ..[1] = low, |
- 0, 2); |
+ return _StringBase._createFromCodePoints( |
+ new _List(2) |
+ ..[0] = high |
+ ..[1] = low, |
+ 0, |
+ 2); |
} |
} |
throw new RangeError.range(charCode, 0, 0x10ffff); |
} |
- @patch const factory String.fromEnvironment(String name, |
- {String defaultValue}) |
+ @patch |
+ const factory String.fromEnvironment(String name, {String defaultValue}) |
native "String_fromEnvironment"; |
} |
- |
/** |
* [_StringBase] contains common methods used by concrete String |
* implementations, e.g., _OneByteString. |
@@ -79,8 +85,7 @@ abstract class _StringBase { |
static const int _maxJoinReplaceOneByteStringLength = 500; |
factory _StringBase._uninstantiable() { |
- throw new UnsupportedError( |
- "_StringBase can't be instaniated"); |
+ throw new UnsupportedError("_StringBase can't be instaniated"); |
} |
int get hashCode native "String_getHashCode"; |
@@ -89,7 +94,7 @@ abstract class _StringBase { |
// Alternatively return false and override it on one-byte string classes. |
int id = ClassID.getID(this); |
return id == ClassID.cidOneByteString || |
- id == ClassID.cidExternalOneByteString; |
+ id == ClassID.cidExternalOneByteString; |
} |
/** |
@@ -102,9 +107,8 @@ abstract class _StringBase { |
* The [limit] is an upper limit on the character codes in the iterable. |
* It's `null` if unknown. |
*/ |
- static String createFromCharCodes(Iterable<int> charCodes, |
- int start, int end, |
- int limit) { |
+ static String createFromCharCodes( |
+ Iterable<int> charCodes, int start, int end, int limit) { |
if (start == null) throw new ArgumentError.notNull("start"); |
if (charCodes == null) throw new ArgumentError(charCodes); |
// TODO(srdjan): Also skip copying of wide typed arrays. |
@@ -152,14 +156,14 @@ abstract class _StringBase { |
return bits; |
} |
- static String _createStringFromIterable(Iterable<int> charCodes, |
- int start, int end) { |
+ static String _createStringFromIterable( |
+ Iterable<int> charCodes, int start, int end) { |
// Treat charCodes as Iterable. |
if (charCodes is EfficientLengthIterable) { |
int length = charCodes.length; |
end = RangeError.checkValidRange(start, end, length); |
- List charCodeList = new List.from(charCodes.take(end).skip(start), |
- growable: false); |
+ List charCodeList = |
+ new List.from(charCodes.take(end).skip(start), growable: false); |
return createFromCharCodes(charCodeList, 0, charCodeList.length, null); |
} |
// Don't know length of iterable, so iterate and see if all the values |
@@ -172,7 +176,7 @@ abstract class _StringBase { |
} |
} |
List charCodeList; |
- int bits = 0; // Bitwise-or of all char codes in list. |
+ int bits = 0; // Bitwise-or of all char codes in list. |
if (end == null) { |
var list = []; |
while (it.moveNext()) { |
@@ -222,7 +226,7 @@ abstract class _StringBase { |
String operator [](int index) native "String_charAt"; |
- int codeUnitAt(int index); // Implemented in the subclasses. |
+ int codeUnitAt(int index); // Implemented in the subclasses. |
int get length native "String_getLength"; |
@@ -242,8 +246,7 @@ abstract class _StringBase { |
if (identical(this, other)) { |
return true; |
} |
- if ((other is! String) || |
- (this.length != other.length)) { |
+ if ((other is! String) || (this.length != other.length)) { |
return false; |
} |
final len = this.length; |
@@ -389,10 +392,10 @@ abstract class _StringBase { |
// Checks for one-byte whitespaces only. |
static bool _isOneByteWhitespace(int codeUnit) { |
if (codeUnit <= 32) { |
- return ((codeUnit == 32) || // Space. |
- ((codeUnit <= 13) && (codeUnit >= 9))); // CR, LF, TAB, etc. |
+ return ((codeUnit == 32) || // Space. |
+ ((codeUnit <= 13) && (codeUnit >= 9))); // CR, LF, TAB, etc. |
} |
- return (codeUnit == 0x85) || (codeUnit == 0xA0); // NEL, NBSP. |
+ return (codeUnit == 0x85) || (codeUnit == 0xA0); // NEL, NBSP. |
} |
// Characters with Whitespace property (Unicode 6.2). |
@@ -412,21 +415,18 @@ abstract class _StringBase { |
// BOM: 0xFEFF |
static bool _isTwoByteWhitespace(int codeUnit) { |
if (codeUnit <= 32) { |
- return (codeUnit == 32) || |
- ((codeUnit <= 13) && (codeUnit >= 9)); |
+ return (codeUnit == 32) || ((codeUnit <= 13) && (codeUnit >= 9)); |
} |
if (codeUnit < 0x85) return false; |
if ((codeUnit == 0x85) || (codeUnit == 0xA0)) return true; |
return (codeUnit <= 0x200A) |
- ? ((codeUnit == 0x1680) || |
- (codeUnit == 0x180E) || |
- (0x2000 <= codeUnit)) |
- : ((codeUnit == 0x2028) || |
- (codeUnit == 0x2029) || |
- (codeUnit == 0x202F) || |
- (codeUnit == 0x205F) || |
- (codeUnit == 0x3000) || |
- (codeUnit == 0xFEFF)); |
+ ? ((codeUnit == 0x1680) || (codeUnit == 0x180E) || (0x2000 <= codeUnit)) |
+ : ((codeUnit == 0x2028) || |
+ (codeUnit == 0x2029) || |
+ (codeUnit == 0x202F) || |
+ (codeUnit == 0x205F) || |
+ (codeUnit == 0x3000) || |
+ (codeUnit == 0xFEFF)); |
} |
int _firstNonWhitespace() { |
@@ -505,7 +505,7 @@ abstract class _StringBase { |
return _substringUnchecked(0, last + 1); |
} |
- String operator*(int times) { |
+ String operator *(int times) { |
if (times <= 0) return ""; |
if (times == 1) return this; |
StringBuffer buffer = new StringBuffer(this); |
@@ -546,9 +546,8 @@ abstract class _StringBase { |
return pattern.allMatches(this.substring(startIndex)).isNotEmpty; |
} |
- String replaceFirst(Pattern pattern, |
- String replacement, |
- [int startIndex = 0]) { |
+ String replaceFirst(Pattern pattern, String replacement, |
+ [int startIndex = 0]) { |
if (pattern is! Pattern) { |
throw new ArgumentError("${pattern} is not a Pattern"); |
} |
@@ -559,9 +558,9 @@ abstract class _StringBase { |
throw new ArgumentError("${startIndex} is not an int"); |
} |
RangeError.checkValueInInterval(startIndex, 0, this.length, "startIndex"); |
- Iterator iterator = |
- startIndex == 0 ? pattern.allMatches(this).iterator |
- : pattern.allMatches(this, startIndex).iterator; |
+ Iterator iterator = startIndex == 0 |
+ ? pattern.allMatches(this).iterator |
+ : pattern.allMatches(this, startIndex).iterator; |
if (!iterator.moveNext()) return this; |
Match match = iterator.current; |
return replaceRange(match.start, match.end, replacement); |
@@ -586,8 +585,8 @@ abstract class _StringBase { |
_addReplaceSlice(slices, 0, start); |
if (replacement.length > 0) slices.add(replacement); |
_addReplaceSlice(slices, end, length); |
- return _joinReplaceAllResult(this, slices, totalLength, |
- replacementIsOneByte); |
+ return _joinReplaceAllResult( |
+ this, slices, totalLength, replacementIsOneByte); |
} |
static int _addReplaceSlice(List matches, int start, int end) { |
@@ -632,17 +631,15 @@ abstract class _StringBase { |
// TODO(lrn): Is there a cut-off point, or is runtime always faster? |
return _joinReplaceAllOneByteResult(this, matches, length); |
} |
- return _joinReplaceAllResult(this, matches, length, |
- replacementIsOneByte); |
+ return _joinReplaceAllResult(this, matches, length, replacementIsOneByte); |
} |
/** |
* As [_joinReplaceAllResult], but knowing that the result |
* is always a [_OneByteString]. |
*/ |
- static String _joinReplaceAllOneByteResult(String base, |
- List matches, |
- int length) { |
+ static String _joinReplaceAllOneByteResult( |
+ String base, List matches, int length) { |
_OneByteString result = _OneByteString._allocate(length); |
int writeIndex = 0; |
for (int i = 0; i < matches.length; i++) { |
@@ -689,8 +686,9 @@ abstract class _StringBase { |
* If they are, then we have to check the base string slices to know |
* whether the result must be a one-byte string. |
*/ |
- static String _joinReplaceAllResult(String base, List matches, int length, |
- bool replacementStringsAreOneByte) |
+ static String |
+ _joinReplaceAllResult(String base, List matches, int length, |
+ bool replacementStringsAreOneByte) |
native "StringBase_joinReplaceAllResult"; |
String replaceAllMapped(Pattern pattern, String replace(Match match)) { |
@@ -716,12 +714,12 @@ abstract class _StringBase { |
this._isOneByte) { |
return _joinReplaceAllOneByteResult(this, matches, length); |
} |
- return _joinReplaceAllResult(this, matches, length, |
- replacementStringsAreOneByte); |
+ return _joinReplaceAllResult( |
+ this, matches, length, replacementStringsAreOneByte); |
} |
String replaceFirstMapped(Pattern pattern, String replace(Match match), |
- [int startIndex = 0]) { |
+ [int startIndex = 0]) { |
if (pattern == null) throw new ArgumentError.notNull("pattern"); |
if (replace == null) throw new ArgumentError.notNull("replace"); |
if (startIndex == null) throw new ArgumentError.notNull("startIndex"); |
@@ -737,8 +735,8 @@ abstract class _StringBase { |
static String _matchString(Match match) => match[0]; |
static String _stringIdentity(String string) => string; |
- String _splitMapJoinEmptyString(String onMatch(Match match), |
- String onNonMatch(String nonMatch)) { |
+ String _splitMapJoinEmptyString( |
+ String onMatch(Match match), String onNonMatch(String nonMatch)) { |
// Pattern is the empty string. |
StringBuffer buffer = new StringBuffer(); |
int length = this.length; |
@@ -767,8 +765,7 @@ abstract class _StringBase { |
} |
String splitMapJoin(Pattern pattern, |
- {String onMatch(Match match), |
- String onNonMatch(String nonMatch)}) { |
+ {String onMatch(Match match), String onNonMatch(String nonMatch)}) { |
if (pattern is! Pattern) { |
throw new ArgumentError("${pattern} is not a Pattern"); |
} |
@@ -887,7 +884,7 @@ abstract class _StringBase { |
} |
int endIndex = match.end; |
if (startIndex == endIndex && endIndex == previousIndex) { |
- ++startIndex; // empty match, advance and restart |
+ ++startIndex; // empty match, advance and restart |
continue; |
} |
result.add(this.substring(previousIndex, match.start)); |
@@ -919,9 +916,7 @@ abstract class _StringBase { |
native "String_concatRange"; |
} |
- |
class _OneByteString extends _StringBase implements String { |
- |
factory _OneByteString._uninstantiable() { |
throw new UnsupportedError( |
"_OneByteString can only be allocated by the VM"); |
@@ -1018,14 +1013,14 @@ class _OneByteString extends _StringBase implements String { |
return super.contains(pattern, start); |
} |
- String operator*(int times) { |
+ String operator *(int times) { |
if (times <= 0) return ""; |
if (times == 1) return this; |
int length = this.length; |
- if (this.isEmpty) return this; // Don't clone empty string. |
+ if (this.isEmpty) return this; // Don't clone empty string. |
_OneByteString result = _OneByteString._allocate(length * times); |
int index = 0; |
- for (int i = 0; i < times; i ++) { |
+ for (int i = 0; i < times; i++) { |
for (int j = 0; j < length; j++) { |
result._setAt(index++, this.codeUnitAt(j)); |
} |
@@ -1193,10 +1188,8 @@ class _OneByteString extends _StringBase implements String { |
// set using _setAt. |
static _OneByteString _allocate(int length) native "OneByteString_allocate"; |
- |
- static _OneByteString _allocateFromOneByteList(List<int> list, |
- int start, int end) |
- native "OneByteString_allocateFromOneByteList"; |
+ static _OneByteString _allocateFromOneByteList(List<int> list, int start, |
+ int end) native "OneByteString_allocateFromOneByteList"; |
// This is internal helper method. Code point value must be a valid |
// Latin1 value (0..0xFF), index must be valid. |
@@ -1220,7 +1213,6 @@ class _OneByteString extends _StringBase implements String { |
} |
} |
- |
class _TwoByteString extends _StringBase implements String { |
factory _TwoByteString._uninstantiable() { |
throw new UnsupportedError( |
@@ -1241,7 +1233,6 @@ class _TwoByteString extends _StringBase implements String { |
} |
} |
- |
class _ExternalOneByteString extends _StringBase implements String { |
factory _ExternalOneByteString._uninstantiable() { |
throw new UnsupportedError( |
@@ -1261,7 +1252,6 @@ class _ExternalOneByteString extends _StringBase implements String { |
static int _getCid() native "ExternalOneByteString_getCid"; |
} |
- |
class _ExternalTwoByteString extends _StringBase implements String { |
factory _ExternalTwoByteString._uninstantiable() { |
throw new UnsupportedError( |
@@ -1279,12 +1269,11 @@ class _ExternalTwoByteString extends _StringBase implements String { |
} |
} |
- |
class _StringMatch implements Match { |
const _StringMatch(this.start, this.input, this.pattern); |
int get end => start + pattern.length; |
- String operator[](int g) => group(g); |
+ String operator [](int g) => group(g); |
int get groupCount => 0; |
String group(int group) { |
@@ -1307,7 +1296,6 @@ class _StringMatch implements Match { |
final String pattern; |
} |
- |
class _StringAllMatchesIterable extends Iterable<Match> { |
final String _input; |
final String _pattern; |