Index: sdk/lib/_internal/js_runtime/lib/regexp_helper.dart |
diff --git a/sdk/lib/_internal/js_runtime/lib/regexp_helper.dart b/sdk/lib/_internal/js_runtime/lib/regexp_helper.dart |
index 35a42d1ce00240ac3f2c7fc89e91651b4944e520..f7568682408fcf5062ecca4b1463bab08e32297d 100644 |
--- a/sdk/lib/_internal/js_runtime/lib/regexp_helper.dart |
+++ b/sdk/lib/_internal/js_runtime/lib/regexp_helper.dart |
@@ -18,7 +18,7 @@ regExpGetNative(JSSyntaxRegExp regexp) => regexp._nativeRegExp; |
*/ |
regExpGetGlobalNative(JSSyntaxRegExp regexp) { |
var nativeRegexp = regexp._nativeGlobalVersion; |
- JS("void", "#.lastIndex = 0", nativeRegexp); |
+ JS('void', '#.lastIndex = 0', nativeRegexp); |
return nativeRegexp; |
} |
@@ -34,7 +34,7 @@ regExpGetGlobalNative(JSSyntaxRegExp regexp) { |
*/ |
int regExpCaptureCount(JSSyntaxRegExp regexp) { |
var nativeAnchoredRegExp = regexp._nativeAnchoredVersion; |
- var match = JS('JSExtendableArray', "#.exec('')", nativeAnchoredRegExp); |
+ var match = JS('JSExtendableArray', '#.exec("")', nativeAnchoredRegExp); |
// The native-anchored regexp always have one capture more than the original, |
// and always matches the empty string. |
return match.length - 2; |
@@ -46,7 +46,7 @@ class JSSyntaxRegExp implements RegExp { |
var _nativeGlobalRegExp; |
var _nativeAnchoredRegExp; |
- String toString() => "RegExp/$pattern/"; |
+ String toString() => 'RegExp/$pattern/'; |
JSSyntaxRegExp(String source, |
{ bool multiLine: false, |
@@ -70,14 +70,14 @@ class JSSyntaxRegExp implements RegExp { |
// that it tries, and you can see if the original regexp matched, or it |
// was the added zero-width match that matched, by looking at the last |
// capture. If it is a String, the match participated, otherwise it didn't. |
- return _nativeAnchoredRegExp = makeNative("$pattern|()", |
+ return _nativeAnchoredRegExp = makeNative('$pattern|()', |
_isMultiLine, |
_isCaseSensitive, |
true); |
} |
- bool get _isMultiLine => JS("bool", "#.multiline", _nativeRegExp); |
- bool get _isCaseSensitive => JS("bool", "!#.ignoreCase", _nativeRegExp); |
+ bool get _isMultiLine => JS('bool', '#.multiline', _nativeRegExp); |
+ bool get _isCaseSensitive => JS('bool', '!#.ignoreCase', _nativeRegExp); |
static makeNative( |
String source, bool multiLine, bool caseSensitive, bool global) { |
@@ -135,21 +135,20 @@ class JSSyntaxRegExp implements RegExp { |
Match _execGlobal(String string, int start) { |
Object regexp = _nativeGlobalVersion; |
- JS("void", "#.lastIndex = #", regexp, start); |
- List match = JS("JSExtendableArray|Null", "#.exec(#)", regexp, string); |
+ JS('void', '#.lastIndex = #', regexp, start); |
+ List match = JS('JSExtendableArray|Null', '#.exec(#)', regexp, string); |
if (match == null) return null; |
return new _MatchImplementation(this, match); |
} |
Match _execAnchored(String string, int start) { |
Object regexp = _nativeAnchoredVersion; |
- JS("void", "#.lastIndex = #", regexp, start); |
- List match = JS("JSExtendableArray|Null", "#.exec(#)", regexp, string); |
+ JS('void', '#.lastIndex = #', regexp, start); |
+ List match = JS('JSExtendableArray|Null', '#.exec(#)', regexp, string); |
if (match == null) return null; |
// If the last capture group participated, the original regexp did not |
// match at the start position. |
- if (match[match.length - 1] != null) return null; |
- match.length -= 1; |
+ if (match.removeLast() != null) return null; |
return new _MatchImplementation(this, match); |
} |
@@ -167,17 +166,23 @@ class JSSyntaxRegExp implements RegExp { |
class _MatchImplementation implements Match { |
final Pattern pattern; |
// Contains a JS RegExp match object. |
- // It is an Array of String values with extra "index" and "input" properties. |
+ // It is an Array of String values with extra 'index' and 'input' properties. |
final List<String> _match; |
_MatchImplementation(this.pattern, this._match) { |
- assert(JS("var", "#.input", _match) is String); |
- assert(JS("var", "#.index", _match) is int); |
+ assert(JS('var', '#.input', _match) is String); |
+ assert(JS('var', '#.index', _match) is int); |
} |
- String get input => JS("String", "#.input", _match); |
- int get start => JS("int", "#.index", _match); |
- int get end => start + _match[0].length; |
+ String get input => JS('String', '#.input', _match); |
+ |
+ int get start => |
+ JS('returns:int;depends:none;effects:none;gvn:true', '#.index', _match); |
+ |
+ int get end => |
+ start + |
+ JS('returns:int;depends:none;effects:none;gvn:true', '#[0].length', |
+ _match); |
String group(int index) => _match[index]; |
String operator [](int index) => group(index); |