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

Unified Diff: sdk/lib/_internal/compiler/js_lib/string_helper.dart

Issue 1212513002: sdk files reorganization to make dart2js a proper package (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: renamed Created 5 years, 6 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
Index: sdk/lib/_internal/compiler/js_lib/string_helper.dart
diff --git a/sdk/lib/_internal/compiler/js_lib/string_helper.dart b/sdk/lib/_internal/compiler/js_lib/string_helper.dart
deleted file mode 100644
index 51b696bc708c5b5fb401cf72de21a19fb9a55553..0000000000000000000000000000000000000000
--- a/sdk/lib/_internal/compiler/js_lib/string_helper.dart
+++ /dev/null
@@ -1,252 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of _js_helper;
-
-stringIndexOfStringUnchecked(receiver, other, startIndex) {
- return JS('int', '#.indexOf(#, #)', receiver, other, startIndex);
-}
-
-substring1Unchecked(receiver, startIndex) {
- return JS('String', '#.substring(#)', receiver, startIndex);
-}
-
-substring2Unchecked(receiver, startIndex, endIndex) {
- return JS('String', '#.substring(#, #)', receiver, startIndex, endIndex);
-}
-
-stringContainsStringUnchecked(receiver, other, startIndex) {
- return stringIndexOfStringUnchecked(receiver, other, startIndex) >= 0;
-}
-
-class StringMatch implements Match {
- const StringMatch(int this.start,
- String this.input,
- String this.pattern);
-
- int get end => start + pattern.length;
- String operator[](int g) => group(g);
- int get groupCount => 0;
-
- String group(int group_) {
- if (group_ != 0) {
- throw new RangeError.value(group_);
- }
- return pattern;
- }
-
- List<String> groups(List<int> groups_) {
- List<String> result = new List<String>();
- for (int g in groups_) {
- result.add(group(g));
- }
- return result;
- }
-
- final int start;
- final String input;
- final String pattern;
-}
-
-List<Match> allMatchesInStringUnchecked(String pattern, String string,
- int startIndex) {
- // Copied from StringBase.allMatches in
- // /runtime/lib/string_base.dart
- List<Match> result = new List<Match>();
- int length = string.length;
- int patternLength = pattern.length;
- while (true) {
- int position = stringIndexOfStringUnchecked(string, pattern, startIndex);
- if (position == -1) {
- break;
- }
- result.add(new StringMatch(position, string, pattern));
- int endIndex = position + patternLength;
- if (endIndex == length) {
- break;
- } else if (position == endIndex) {
- ++startIndex; // empty match, advance and restart
- } else {
- startIndex = endIndex;
- }
- }
- return result;
-}
-
-stringContainsUnchecked(receiver, other, startIndex) {
- if (other is String) {
- return stringContainsStringUnchecked(receiver, other, startIndex);
- } else if (other is JSSyntaxRegExp) {
- return other.hasMatch(receiver.substring(startIndex));
- } else {
- var substr = receiver.substring(startIndex);
- return other.allMatches(substr).isNotEmpty;
- }
-}
-
-stringReplaceJS(receiver, replacer, replacement) {
- // The JavaScript String.replace method recognizes replacement
- // patterns in the replacement string. Dart does not have that
- // behavior.
- replacement = JS('String', r'#.replace(/\$/g, "$$$$")', replacement);
- return JS('String', r'#.replace(#, #)', receiver, replacer, replacement);
-}
-
-stringReplaceFirstRE(receiver, regexp, replacement, startIndex) {
- var match = regexp._execGlobal(receiver, startIndex);
- if (match == null) return receiver;
- var start = match.start;
- var end = match.end;
- return stringReplaceRangeUnchecked(receiver, start, end, replacement);
-}
-
-const String ESCAPE_REGEXP = r'[[\]{}()*+?.\\^$|]';
-
-stringReplaceAllUnchecked(receiver, pattern, replacement) {
- checkString(replacement);
- if (pattern is String) {
- if (pattern == "") {
- if (receiver == "") {
- return replacement;
- } else {
- StringBuffer result = new StringBuffer();
- int length = receiver.length;
- result.write(replacement);
- for (int i = 0; i < length; i++) {
- result.write(receiver[i]);
- result.write(replacement);
- }
- return result.toString();
- }
- } else {
- var quoter = JS('', "new RegExp(#, 'g')", ESCAPE_REGEXP);
- var quoted = JS('String', r'#.replace(#, "\\$&")', pattern, quoter);
- var replacer = JS('', "new RegExp(#, 'g')", quoted);
- return stringReplaceJS(receiver, replacer, replacement);
- }
- } else if (pattern is JSSyntaxRegExp) {
- var re = regExpGetGlobalNative(pattern);
- return stringReplaceJS(receiver, re, replacement);
- } else {
- checkNull(pattern);
- // TODO(floitsch): implement generic String.replace (with patterns).
- throw "String.replaceAll(Pattern) UNIMPLEMENTED";
- }
-}
-
-String _matchString(Match match) => match[0];
-String _stringIdentity(String string) => string;
-
-stringReplaceAllFuncUnchecked(receiver, pattern, onMatch, onNonMatch) {
- if (onMatch == null) onMatch = _matchString;
- if (onNonMatch == null) onNonMatch = _stringIdentity;
- if (pattern is String) {
- return stringReplaceAllStringFuncUnchecked(receiver, pattern,
- onMatch, onNonMatch);
- }
- // Placing the Pattern test here is indistingishable from placing it at the
- // top of the method but it saves an extra check on the `pattern is String`
- // path.
- if (pattern is! Pattern) {
- throw new ArgumentError.value(pattern, 'pattern', 'is not a Pattern');
- }
- StringBuffer buffer = new StringBuffer();
- int startIndex = 0;
- for (Match match in pattern.allMatches(receiver)) {
- buffer.write(onNonMatch(receiver.substring(startIndex, match.start)));
- buffer.write(onMatch(match));
- startIndex = match.end;
- }
- buffer.write(onNonMatch(receiver.substring(startIndex)));
- return buffer.toString();
-}
-
-stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch) {
- // Pattern is the empty string.
- StringBuffer buffer = new StringBuffer();
- int length = receiver.length;
- int i = 0;
- buffer.write(onNonMatch(""));
- while (i < length) {
- buffer.write(onMatch(new StringMatch(i, receiver, "")));
- // Special case to avoid splitting a surrogate pair.
- int code = receiver.codeUnitAt(i);
- if ((code & ~0x3FF) == 0xD800 && length > i + 1) {
- // Leading surrogate;
- code = receiver.codeUnitAt(i + 1);
- if ((code & ~0x3FF) == 0xDC00) {
- // Matching trailing surrogate.
- buffer.write(onNonMatch(receiver.substring(i, i + 2)));
- i += 2;
- continue;
- }
- }
- buffer.write(onNonMatch(receiver[i]));
- i++;
- }
- buffer.write(onMatch(new StringMatch(i, receiver, "")));
- buffer.write(onNonMatch(""));
- return buffer.toString();
-}
-
-stringReplaceAllStringFuncUnchecked(receiver, pattern, onMatch, onNonMatch) {
- int patternLength = pattern.length;
- if (patternLength == 0) {
- return stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch);
- }
- int length = receiver.length;
- StringBuffer buffer = new StringBuffer();
- int startIndex = 0;
- while (startIndex < length) {
- int position = stringIndexOfStringUnchecked(receiver, pattern, startIndex);
- if (position == -1) {
- break;
- }
- buffer.write(onNonMatch(receiver.substring(startIndex, position)));
- buffer.write(onMatch(new StringMatch(position, receiver, pattern)));
- startIndex = position + patternLength;
- }
- buffer.write(onNonMatch(receiver.substring(startIndex)));
- return buffer.toString();
-}
-
-
-stringReplaceFirstUnchecked(receiver, pattern, replacement, int startIndex) {
- if (pattern is String) {
- int index = stringIndexOfStringUnchecked(receiver, pattern, startIndex);
- if (index < 0) return receiver;
- int end = index + pattern.length;
- return stringReplaceRangeUnchecked(receiver, index, end, replacement);
- }
- if (pattern is JSSyntaxRegExp) {
- return startIndex == 0
- ? stringReplaceJS(receiver, regExpGetNative(pattern), replacement)
- : stringReplaceFirstRE(receiver, pattern, replacement, startIndex);
- }
- checkNull(pattern);
- Iterator<Match> matches = pattern.allMatches(receiver, startIndex).iterator;
- if (!matches.moveNext()) return receiver;
- Match match = matches.current;
- return receiver.replaceRange(match.start, match.end, replacement);
-}
-
-stringReplaceFirstMappedUnchecked(receiver, pattern, replace,
- int startIndex) {
- Iterator<Match> matches = pattern.allMatches(receiver, startIndex).iterator;
- if (!matches.moveNext()) return receiver;
- Match match = matches.current;
- String replacement = "${replace(match)}";
- return receiver.replaceRange(match.start, match.end, replacement);
-}
-
-stringJoinUnchecked(array, separator) {
- return JS('String', r'#.join(#)', array, separator);
-}
-
-String stringReplaceRangeUnchecked(String receiver,
- int start, int end, String replacement) {
- var prefix = JS('String', '#.substring(0, #)', receiver, start);
- var suffix = JS('String', '#.substring(#)', receiver, end);
- return "$prefix$replacement$suffix";
-}

Powered by Google App Engine
This is Rietveld 408576698