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

Unified Diff: sdk/lib/_internal/js_runtime/lib/regexp_helper.dart

Issue 2437863002: Prevent inlining of js_library core.RegExp constructor (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « sdk/lib/_internal/js_runtime/lib/core_patch.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « sdk/lib/_internal/js_runtime/lib/core_patch.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698