Index: src/js/regexp.js |
diff --git a/src/js/regexp.js b/src/js/regexp.js |
index 584d4cdf41bdbe58c76cb3bd9ee22249f34f494a..b9d0f50b244345c52e73e1cb33fdbe09d7c3c6f6 100644 |
--- a/src/js/regexp.js |
+++ b/src/js/regexp.js |
@@ -162,46 +162,6 @@ function RegExpSubclassExecJS(string) { |
%FunctionRemovePrototype(RegExpSubclassExecJS); |
-// Legacy implementation of RegExp.prototype.exec |
-function RegExpExecJS(string) { |
- if (!IS_REGEXP(this)) { |
- throw %make_type_error(kIncompatibleMethodReceiver, |
- 'RegExp.prototype.exec', this); |
- } |
- |
- string = TO_STRING(string); |
- var lastIndex = this.lastIndex; |
- |
- // Conversion is required by the ES2015 specification (RegExpBuiltinExec |
- // algorithm, step 4) even if the value is discarded for non-global RegExps. |
- var i = TO_LENGTH(lastIndex); |
- |
- var updateLastIndex = REGEXP_GLOBAL(this) || REGEXP_STICKY(this); |
- if (updateLastIndex) { |
- if (i < 0 || i > string.length) { |
- this.lastIndex = 0; |
- return null; |
- } |
- } else { |
- i = 0; |
- } |
- |
- // matchIndices is either null or the RegExpLastMatchInfo array. |
- var matchIndices = %_RegExpExec(this, string, i, RegExpLastMatchInfo); |
- |
- if (IS_NULL(matchIndices)) { |
- this.lastIndex = 0; |
- return null; |
- } |
- |
- // Successful match. |
- if (updateLastIndex) { |
- this.lastIndex = RegExpLastMatchInfo[CAPTURE1]; |
- } |
- RETURN_NEW_RESULT_FROM_MATCH_INFO(matchIndices, string); |
-} |
- |
- |
// ES#sec-regexpexec Runtime Semantics: RegExpExec ( R, S ) |
// Also takes an optional exec method in case our caller |
// has already fetched exec. |
@@ -216,70 +176,11 @@ function RegExpSubclassExec(regexp, string, exec) { |
} |
return result; |
} |
- return %_Call(RegExpExecJS, regexp, string); |
+ return %_Call(RegExpSubclassExecJS, regexp, string); |
} |
%SetForceInlineFlag(RegExpSubclassExec); |
-// One-element cache for the simplified test regexp. |
-var regexp_key; |
-var regexp_val; |
- |
-// Legacy implementation of RegExp.prototype.test |
-// Section 15.10.6.3 doesn't actually make sense, but the intention seems to be |
-// that test is defined in terms of String.prototype.exec. However, it probably |
-// means the original value of String.prototype.exec, which is what everybody |
-// else implements. |
-function RegExpTest(string) { |
- if (!IS_REGEXP(this)) { |
- throw %make_type_error(kIncompatibleMethodReceiver, |
- 'RegExp.prototype.test', this); |
- } |
- string = TO_STRING(string); |
- |
- var lastIndex = this.lastIndex; |
- |
- // Conversion is required by the ES2015 specification (RegExpBuiltinExec |
- // algorithm, step 4) even if the value is discarded for non-global RegExps. |
- var i = TO_LENGTH(lastIndex); |
- |
- if (REGEXP_GLOBAL(this) || REGEXP_STICKY(this)) { |
- if (i < 0 || i > string.length) { |
- this.lastIndex = 0; |
- return false; |
- } |
- // matchIndices is either null or the RegExpLastMatchInfo array. |
- var matchIndices = %_RegExpExec(this, string, i, RegExpLastMatchInfo); |
- if (IS_NULL(matchIndices)) { |
- this.lastIndex = 0; |
- return false; |
- } |
- this.lastIndex = RegExpLastMatchInfo[CAPTURE1]; |
- return true; |
- } else { |
- // Non-global, non-sticky regexp. |
- // Remove irrelevant preceeding '.*' in a test regexp. The expression |
- // checks whether this.source starts with '.*' and that the third char is |
- // not a '?'. But see https://code.google.com/p/v8/issues/detail?id=3560 |
- var regexp = this; |
- var source = REGEXP_SOURCE(regexp); |
- if (source.length >= 3 && |
- %_StringCharCodeAt(source, 0) == 46 && // '.' |
- %_StringCharCodeAt(source, 1) == 42 && // '*' |
- %_StringCharCodeAt(source, 2) != 63) { // '?' |
- regexp = TrimRegExp(regexp); |
- } |
- // matchIndices is either null or the RegExpLastMatchInfo array. |
- var matchIndices = %_RegExpExec(regexp, string, 0, RegExpLastMatchInfo); |
- if (IS_NULL(matchIndices)) { |
- this.lastIndex = 0; |
- return false; |
- } |
- return true; |
- } |
-} |
- |
- |
// ES#sec-regexp.prototype.test RegExp.prototype.test ( S ) |
function RegExpSubclassTest(string) { |
if (!IS_RECEIVER(this)) { |
@@ -292,18 +193,6 @@ function RegExpSubclassTest(string) { |
} |
%FunctionRemovePrototype(RegExpSubclassTest); |
-function TrimRegExp(regexp) { |
- if (regexp_key !== regexp) { |
- regexp_key = regexp; |
- regexp_val = |
- new GlobalRegExp( |
- %_SubString(REGEXP_SOURCE(regexp), 2, REGEXP_SOURCE(regexp).length), |
- (REGEXP_IGNORE_CASE(regexp) ? REGEXP_MULTILINE(regexp) ? "im" : "i" |
- : REGEXP_MULTILINE(regexp) ? "m" : "")); |
- } |
- return regexp_val; |
-} |
- |
function AtSurrogatePair(subject, index) { |
if (index + 1 >= subject.length) return false; |
@@ -927,10 +816,7 @@ utils.Export(function(to) { |
to.InternalRegExpMatch = InternalRegExpMatch; |
to.InternalRegExpReplace = InternalRegExpReplace; |
to.IsRegExp = IsRegExp; |
- to.RegExpExec = DoRegExpExec; |
to.RegExpInitialize = RegExpInitialize; |
- to.RegExpLastMatchInfo = RegExpLastMatchInfo; |
- to.RegExpTest = RegExpTest; |
}); |
}) |