| Index: dart/sdk/lib/_internal/compiler/implementation/lib/string_helper.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/lib/string_helper.dart b/dart/sdk/lib/_internal/compiler/implementation/lib/string_helper.dart
|
| index 6e4dccfb2b057aceb67c705d27ef2c06a2dfab45..58a6267b0b938ae2effe5c78a93391f4722e6de1 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/lib/string_helper.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/lib/string_helper.dart
|
| @@ -77,7 +77,9 @@ stringReplaceJS(receiver, replacer, to) {
|
| return JS('String', r'#.replace(#, #)', receiver, replacer, to);
|
| }
|
|
|
| -final RegExp quoteRegExp = new JSSyntaxRegExp(r'[-[\]{}()*+?.,\\^$|#\s]');
|
| +const String ESCAPE_REGEXP = r'[-[\]{}()*+?.,\\^$|]';
|
| +
|
| +final RegExp quoteRegExp = new JSSyntaxRegExp(ESCAPE_REGEXP);
|
|
|
| stringReplaceAllUnchecked(receiver, from, to) {
|
| checkString(to);
|
| @@ -86,14 +88,12 @@ stringReplaceAllUnchecked(receiver, from, to) {
|
| if (receiver == "") {
|
| return to;
|
| } else {
|
| - StringBuffer result = new StringBuffer();
|
| + String result = to;
|
| int length = receiver.length;
|
| - result.add(to);
|
| for (int i = 0; i < length; i++) {
|
| - result.add(receiver[i]);
|
| - result.add(to);
|
| + result = '$result${receiver[i]}$to';
|
| }
|
| - return result.toString();
|
| + return result;
|
| }
|
| } else {
|
| var quoter = regExpMakeNative(quoteRegExp, global: true);
|
| @@ -125,25 +125,24 @@ stringReplaceAllFuncUnchecked(receiver, pattern, onMatch, onNonMatch) {
|
| return stringReplaceAllStringFuncUnchecked(receiver, pattern,
|
| onMatch, onNonMatch);
|
| }
|
| - StringBuffer buffer = new StringBuffer();
|
| + String result = '';
|
| int startIndex = 0;
|
| for (Match match in pattern.allMatches(receiver)) {
|
| - buffer.add(onNonMatch(receiver.substring(startIndex, match.start)));
|
| - buffer.add(onMatch(match));
|
| - startIndex = match.end;
|
| + result =
|
| + '$result'
|
| + '${onNonMatch(receiver.substring(startIndex, match.start))}'
|
| + '${onMatch(match)}';
|
| }
|
| - buffer.add(onNonMatch(receiver.substring(startIndex)));
|
| - return buffer.toString();
|
| + return '$result${onNonMatch(receiver.substring(startIndex))}';
|
| }
|
|
|
| stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch) {
|
| // Pattern is the empty string.
|
| - StringBuffer buffer = new StringBuffer();
|
| int length = receiver.length;
|
| int i = 0;
|
| - buffer.add(onNonMatch(""));
|
| + String result = '${onNonMatch("")}';
|
| while (i < length) {
|
| - buffer.add(onMatch(new StringMatch(i, receiver, "")));
|
| + result = '$result${onMatch(new StringMatch(i, receiver, ""))}';
|
| // Special case to avoid splitting a surrogate pair.
|
| int code = receiver.charCodeAt(i);
|
| if ((code & ~0x3FF) == 0xD800 && length > i + 1) {
|
| @@ -151,17 +150,17 @@ stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch) {
|
| code = receiver.charCodeAt(i + 1);
|
| if ((code & ~0x3FF) == 0xDC00) {
|
| // Matching trailing surrogate.
|
| - buffer.add(onNonMatch(receiver.substring(i, i + 2)));
|
| + result = '$result${onNonMatch(receiver.substring(i, i + 2))}';
|
| i += 2;
|
| continue;
|
| }
|
| }
|
| - buffer.add(onNonMatch(receiver[i]));
|
| + result = '$result${onNonMatch(receiver[i])}';
|
| i++;
|
| }
|
| - buffer.add(onMatch(new StringMatch(i, receiver, "")));
|
| - buffer.add(onNonMatch(""));
|
| - return buffer.toString();
|
| + return
|
| + '$result${onMatch(new StringMatch(i, receiver, ""))}'
|
| + '${onNonMatch("")}';
|
| }
|
|
|
| stringReplaceAllStringFuncUnchecked(receiver, pattern, onMatch, onNonMatch) {
|
| @@ -170,19 +169,19 @@ stringReplaceAllStringFuncUnchecked(receiver, pattern, onMatch, onNonMatch) {
|
| return stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch);
|
| }
|
| int length = receiver.length;
|
| - StringBuffer buffer = new StringBuffer();
|
| + String result = '';
|
| int startIndex = 0;
|
| while (startIndex < length) {
|
| int position = receiver.indexOf(pattern, startIndex);
|
| if (position == -1) {
|
| break;
|
| }
|
| - buffer.add(onNonMatch(receiver.substring(startIndex, position)));
|
| - buffer.add(onMatch(new StringMatch(position, receiver, pattern)));
|
| + result =
|
| + '$result${onNonMatch(receiver.substring(startIndex, position))}'
|
| + '${onMatch(new StringMatch(position, receiver, pattern))}';
|
| startIndex = position + patternLength;
|
| }
|
| - buffer.add(onNonMatch(receiver.substring(startIndex)));
|
| - return buffer.toString();
|
| + return '$result${onNonMatch(receiver.substring(startIndex))}';
|
| }
|
|
|
|
|
|
|