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

Side by Side Diff: runtime/lib/string_patch.dart

Issue 539153002: Port and integrate the irregexp engine from V8 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 patch class String { 5 patch class String {
6 /* patch */ factory String.fromCharCodes(Iterable<int> charCodes) { 6 /* patch */ factory String.fromCharCodes(Iterable<int> charCodes) {
7 return _StringBase.createFromCharCodes(charCodes); 7 return _StringBase.createFromCharCodes(charCodes);
8 } 8 }
9 9
10 /* patch */ factory String.fromCharCode(int charCode) { 10 /* patch */ factory String.fromCharCode(int charCode) {
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 native "OneByteString_splitWithCharCode"; 668 native "OneByteString_splitWithCharCode";
669 669
670 List<String> split(Pattern pattern) { 670 List<String> split(Pattern pattern) {
671 if ((ClassID.getID(pattern) == ClassID.cidOneByteString) && 671 if ((ClassID.getID(pattern) == ClassID.cidOneByteString) &&
672 (pattern.length == 1)) { 672 (pattern.length == 1)) {
673 return _splitWithCharCode(pattern.codeUnitAt(0)); 673 return _splitWithCharCode(pattern.codeUnitAt(0));
674 } 674 }
675 return super.split(pattern); 675 return super.split(pattern);
676 } 676 }
677 677
678 // Loads up to 4 code units into a single integer.
679 int _codeUnitsAt(int index, int count) {
680 assert(index >= 0);
681 assert(index + count - 1 < this.length);
682 assert(0 < count && count <= 4);
683
684 int codeUnits = 0;
685 for (int i = 0; i < count; i++) {
686 codeUnits |= this.codeUnitAt(index + i) << (i * 8);
687 }
688
689 return codeUnits;
690 }
691
678 // All element of 'strings' must be OneByteStrings. 692 // All element of 'strings' must be OneByteStrings.
679 static _concatAll(List<String> strings, int totalLength) { 693 static _concatAll(List<String> strings, int totalLength) {
680 // TODO(srdjan): Improve code below and raise or eliminate the limit. 694 // TODO(srdjan): Improve code below and raise or eliminate the limit.
681 if (totalLength > 128) { 695 if (totalLength > 128) {
682 // Native is quicker. 696 // Native is quicker.
683 return _StringBase._concatRangeNative(strings, 0, strings.length); 697 return _StringBase._concatRangeNative(strings, 0, strings.length);
684 } 698 }
685 var res = _OneByteString._allocate(totalLength); 699 var res = _OneByteString._allocate(totalLength);
686 final stringsLength = strings.length; 700 final stringsLength = strings.length;
687 int rIx = 0; 701 int rIx = 0;
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 "_TwoByteString can only be allocated by the VM"); 945 "_TwoByteString can only be allocated by the VM");
932 } 946 }
933 947
934 bool _isWhitespace(int codeUnit) { 948 bool _isWhitespace(int codeUnit) {
935 return _StringBase._isTwoByteWhitespace(codeUnit); 949 return _StringBase._isTwoByteWhitespace(codeUnit);
936 } 950 }
937 951
938 bool operator ==(Object other) { 952 bool operator ==(Object other) {
939 return super == other; 953 return super == other;
940 } 954 }
955
956 // Loads up to 2 code units into a single integer.
957 int _codeUnitsAt(int index, int count) {
958 assert(index >= 0);
959 assert(index + count - 1 < this.length);
960 assert(0 < count && count <= 2);
961
962 int codeUnits = 0;
963 for (int i = 0; i < count; i++) {
964 codeUnits |= this.codeUnitAt(index + i) << (i * 16);
965 }
966
967 return codeUnits;
968 }
941 } 969 }
942 970
943 971
944 class _ExternalOneByteString extends _StringBase implements String { 972 class _ExternalOneByteString extends _StringBase implements String {
945 factory _ExternalOneByteString._uninstantiable() { 973 factory _ExternalOneByteString._uninstantiable() {
946 throw new UnsupportedError( 974 throw new UnsupportedError(
947 "_ExternalOneByteString can only be allocated by the VM"); 975 "_ExternalOneByteString can only be allocated by the VM");
948 } 976 }
949 977
950 bool _isWhitespace(int codeUnit) { 978 bool _isWhitespace(int codeUnit) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 class _CodeUnits extends Object with ListMixin<int>, 1038 class _CodeUnits extends Object with ListMixin<int>,
1011 UnmodifiableListMixin<int> { 1039 UnmodifiableListMixin<int> {
1012 /** The string that this is the code units of. */ 1040 /** The string that this is the code units of. */
1013 String _string; 1041 String _string;
1014 1042
1015 _CodeUnits(this._string); 1043 _CodeUnits(this._string);
1016 1044
1017 int get length => _string.length; 1045 int get length => _string.length;
1018 int operator[](int i) => _string.codeUnitAt(i); 1046 int operator[](int i) => _string.codeUnitAt(i);
1019 } 1047 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698