Index: frog/lib/string_implementation.dart |
diff --git a/frog/lib/string_implementation.dart b/frog/lib/string_implementation.dart |
deleted file mode 100644 |
index 45407ebe5964f1b81abad6a2efa15f49b9113254..0000000000000000000000000000000000000000 |
--- a/frog/lib/string_implementation.dart |
+++ /dev/null |
@@ -1,184 +0,0 @@ |
-// Copyright (c) 2011, 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. |
- |
-//String.prototype.get$length = function() { |
-// return this.length; |
-//} |
- |
-// TODO(jimhug): Unify with code from compiler/lib/implementation. |
-class StringImplementation implements String native "String" { |
- |
- String operator[](int index) native; |
- |
- int charCodeAt(int index) native; |
- |
- final int length; //native since it's on a native type. |
- |
- bool operator ==(var other) native; |
- |
- bool endsWith(String other) native ''' |
- 'use strict'; |
- if (other.length > this.length) return false; |
- return other == this.substring(this.length - other.length);'''; |
- |
- bool startsWith(String other) native ''' |
- 'use strict'; |
- if (other.length > this.length) return false; |
- return other == this.substring(0, other.length);'''; |
- |
- int indexOf(String other, [int start]) native; |
- int lastIndexOf(String other, [int start]) native; |
- |
- bool isEmpty() => length == 0; |
- |
- String concat(String other) native; |
- |
- String operator +(Object obj) native { obj.toString(); } |
- |
- String substring(int startIndex, [int endIndex = null]) native; |
- |
- String trim() native; |
- |
- // TODO(jmesserly): should support pattern too. |
- bool contains(Pattern pattern, [int startIndex]) native |
- "'use strict'; return this.indexOf(pattern, startIndex) >= 0;"; |
- |
- String _replaceFirst(String from, String to) native |
- "'use strict';return this.replace(from, to);"; |
- |
- String _replaceRegExp(RegExp from, String to) native |
- "'use strict';return this.replace(from.re, to);"; |
- |
- String replaceFirst(Pattern from, String to) { |
- if (from is String) return _replaceFirst(from, to); |
- if (from is RegExp) return _replaceRegExp(from, to); |
- for (var match in from.allMatches(this)) { |
- // We just care about the first match |
- return substring(0, match.start()) + to + substring(match.end()); |
- } |
- } |
- |
- String _replaceAll(String from, String to) native @""" |
-'use strict'; |
-from = new RegExp(from.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'g'); |
-to = to.replace(/\$/g, '$$$$'); // Escape sequences are fun! |
-return this.replace(from, to);"""; |
- |
- String replaceAll(Pattern from, String to) { |
- if (from is String) return _replaceAll(from, to); |
- if (from is RegExp) return _replaceRegExp(from.dynamic._global, to); |
- var buffer = new StringBuffer(); |
- var lastMatchEnd = 0; |
- for (var match in from.allMatches(this)) { |
- buffer.add(substring(lastMatchEnd, match.start())); |
- buffer.add(to); |
- lastMatchEnd = match.end(); |
- } |
- buffer.add(substring(lastMatchEnd)); |
- } |
- |
- // TODO(jimhug): Get correct reified generic list here. |
- List<String> split(Pattern pattern) { |
- if (pattern is String) return _split(pattern); |
- if (pattern is RegExp) return _splitRegExp(pattern); |
- throw "String.split(Pattern) unimplemented."; |
- } |
- |
- List<String> _split(String pattern) native |
- "'use strict'; return this.split(pattern);"; |
- |
- List<String> _splitRegExp(RegExp pattern) native |
- "'use strict'; return this.split(pattern.re);"; |
- |
- Iterable<Match> allMatches(String str) { |
- throw "String.allMatches(String str) unimplemented."; |
- } |
- /* |
- Iterable<Match> allMatches(String str) { |
- List<Match> result = []; |
- if (this.isEmpty()) return result; |
- int length = this.length; |
- |
- int ix = 0; |
- while (ix < str.length) { |
- int foundIx = str.indexOf(this, ix); |
- if (foundIx < 0) break; |
- // Call "toString" to coerce the "this" back to a primitive string. |
- result.add(new _StringMatch(foundIx, str, this.toString())); |
- ix = foundIx + length; |
- } |
- return result; |
- } |
- */ |
- |
- List<String> splitChars() => split(''); |
- |
- List<int> charCodes() { |
- int len = length; |
- List<int> result = new List<int>(len); |
- for (int i = 0; i < len; i++) { |
- result[i] = charCodeAt(i); |
- } |
- return result; |
- } |
- |
- String toLowerCase() native; |
- String toUpperCase() native; |
- |
- // TODO(jmesserly): we might want to optimize this further. |
- // This is the [Jenkins hash function][1], but with masking to keep the |
- // hash in the Smi range. I did some simple microbenchmarks to verify that |
- // this performs adequately on the standard words list. Letting it spill over |
- // into doubles and truncating at the end was ~2x worse, letting it box was |
- // ~70x worse. |
- // |
- // [1]: http://en.wikipedia.org/wiki/Jenkins_hash_function |
- int hashCode() native ''' |
- 'use strict'; |
- var hash = 0; |
- for (var i = 0; i < this.length; i++) { |
- hash = 0x1fffffff & (hash + this.charCodeAt(i)); |
- hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); |
- hash ^= hash >> 6; |
- } |
- |
- hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); |
- hash ^= hash >> 11; |
- return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));'''; |
- |
- int compareTo(String other) native |
- "'use strict'; return this == other ? 0 : this < other ? -1 : 1;"; |
-} |
- |
-/* |
-class _StringMatch implements Match { |
- const _StringMatch(int this._start, |
- String this.str, |
- String this.pattern); |
- |
- int start() => _start; |
- int end() => _start + pattern.length; |
- String operator[](int g) => group(g); |
- int groupCount() => 0; |
- |
- String group(int group) { |
- if (group != 0) { |
- throw new IndexOutOfRangeException(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 str; |
- final String pattern; |
-} |
-*/ |