| Index: src/regexp.js
|
| diff --git a/src/regexp.js b/src/regexp.js
|
| index a0d7094e026181f8071015658582319cdca6b0c9..6470f29ed9cbebcb350d8ea5858ca9146795f80b 100644
|
| --- a/src/regexp.js
|
| +++ b/src/regexp.js
|
| @@ -2,6 +2,9 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +var $regexpExec;
|
| +var $regexpExecNoTests;
|
| +var $regexpLastMatchInfo;
|
| var $regexpLastMatchInfoOverride;
|
| var harmony_regexps = false;
|
| var harmony_unicode_regexps = false;
|
| @@ -19,12 +22,12 @@
|
| // -------------------------------------------------------------------
|
|
|
| // Property of the builtins object for recording the result of the last
|
| -// regexp match. The property RegExpLastMatchInfo includes the matchIndices
|
| +// regexp match. The property $regexpLastMatchInfo includes the matchIndices
|
| // array of the last successful regexp match (an array of start/end index
|
| // pairs for the match and all the captured substrings), the invariant is
|
| // that there are at least two capture indeces. The array also contains
|
| // the subject string for the last successful match.
|
| -var RegExpLastMatchInfo = new InternalPackedArray(
|
| +$regexpLastMatchInfo = new InternalPackedArray(
|
| 2, // REGEXP_NUMBER_OF_CAPTURES
|
| "", // Last subject.
|
| UNDEFINED, // Last input - settable with RegExpSetInput.
|
| @@ -101,7 +104,7 @@
|
|
|
|
|
| function DoRegExpExec(regexp, string, index) {
|
| - var result = %_RegExpExec(regexp, string, index, RegExpLastMatchInfo);
|
| + var result = %_RegExpExec(regexp, string, index, $regexpLastMatchInfo);
|
| if (result !== null) $regexpLastMatchInfoOverride = null;
|
| return result;
|
| }
|
| @@ -135,7 +138,7 @@
|
|
|
| function RegExpExecNoTests(regexp, string, start) {
|
| // Must be called with RegExp, string and positive integer as arguments.
|
| - var matchInfo = %_RegExpExec(regexp, string, start, RegExpLastMatchInfo);
|
| + var matchInfo = %_RegExpExec(regexp, string, start, $regexpLastMatchInfo);
|
| if (matchInfo !== null) {
|
| $regexpLastMatchInfoOverride = null;
|
| RETURN_NEW_RESULT_FROM_MATCH_INFO(matchInfo, string);
|
| @@ -168,8 +171,8 @@
|
| i = 0;
|
| }
|
|
|
| - // matchIndices is either null or the RegExpLastMatchInfo array.
|
| - var matchIndices = %_RegExpExec(this, string, i, RegExpLastMatchInfo);
|
| + // matchIndices is either null or the $regexpLastMatchInfo array.
|
| + var matchIndices = %_RegExpExec(this, string, i, $regexpLastMatchInfo);
|
|
|
| if (IS_NULL(matchIndices)) {
|
| this.lastIndex = 0;
|
| @@ -179,7 +182,7 @@
|
| // Successful match.
|
| $regexpLastMatchInfoOverride = null;
|
| if (updateLastIndex) {
|
| - this.lastIndex = RegExpLastMatchInfo[CAPTURE1];
|
| + this.lastIndex = $regexpLastMatchInfo[CAPTURE1];
|
| }
|
| RETURN_NEW_RESULT_FROM_MATCH_INFO(matchIndices, string);
|
| }
|
| @@ -211,14 +214,14 @@
|
| this.lastIndex = 0;
|
| return false;
|
| }
|
| - // matchIndices is either null or the RegExpLastMatchInfo array.
|
| - var matchIndices = %_RegExpExec(this, string, i, RegExpLastMatchInfo);
|
| + // matchIndices is either null or the $regexpLastMatchInfo array.
|
| + var matchIndices = %_RegExpExec(this, string, i, $regexpLastMatchInfo);
|
| if (IS_NULL(matchIndices)) {
|
| this.lastIndex = 0;
|
| return false;
|
| }
|
| $regexpLastMatchInfoOverride = null;
|
| - this.lastIndex = RegExpLastMatchInfo[CAPTURE1];
|
| + this.lastIndex = $regexpLastMatchInfo[CAPTURE1];
|
| return true;
|
| } else {
|
| // Non-global, non-sticky regexp.
|
| @@ -232,8 +235,8 @@
|
| %_StringCharCodeAt(regexp.source, 2) != 63) { // '?'
|
| regexp = TrimRegExp(regexp);
|
| }
|
| - // matchIndices is either null or the RegExpLastMatchInfo array.
|
| - var matchIndices = %_RegExpExec(regexp, string, 0, RegExpLastMatchInfo);
|
| + // matchIndices is either null or the $regexpLastMatchInfo array.
|
| + var matchIndices = %_RegExpExec(regexp, string, 0, $regexpLastMatchInfo);
|
| if (IS_NULL(matchIndices)) {
|
| this.lastIndex = 0;
|
| return false;
|
| @@ -278,10 +281,10 @@
|
| if ($regexpLastMatchInfoOverride !== null) {
|
| return OVERRIDE_MATCH($regexpLastMatchInfoOverride);
|
| }
|
| - var regExpSubject = LAST_SUBJECT(RegExpLastMatchInfo);
|
| + var regExpSubject = LAST_SUBJECT($regexpLastMatchInfo);
|
| return %_SubString(regExpSubject,
|
| - RegExpLastMatchInfo[CAPTURE0],
|
| - RegExpLastMatchInfo[CAPTURE1]);
|
| + $regexpLastMatchInfo[CAPTURE0],
|
| + $regexpLastMatchInfo[CAPTURE1]);
|
| }
|
|
|
|
|
| @@ -291,14 +294,14 @@
|
| if (override.length <= 3) return '';
|
| return override[override.length - 3];
|
| }
|
| - var length = NUMBER_OF_CAPTURES(RegExpLastMatchInfo);
|
| + var length = NUMBER_OF_CAPTURES($regexpLastMatchInfo);
|
| if (length <= 2) return ''; // There were no captures.
|
| // We match the SpiderMonkey behavior: return the substring defined by the
|
| // last pair (after the first pair) of elements of the capture array even if
|
| // it is empty.
|
| - var regExpSubject = LAST_SUBJECT(RegExpLastMatchInfo);
|
| - var start = RegExpLastMatchInfo[CAPTURE(length - 2)];
|
| - var end = RegExpLastMatchInfo[CAPTURE(length - 1)];
|
| + var regExpSubject = LAST_SUBJECT($regexpLastMatchInfo);
|
| + var start = $regexpLastMatchInfo[CAPTURE(length - 2)];
|
| + var end = $regexpLastMatchInfo[CAPTURE(length - 1)];
|
| if (start != -1 && end != -1) {
|
| return %_SubString(regExpSubject, start, end);
|
| }
|
| @@ -310,8 +313,8 @@
|
| var start_index;
|
| var subject;
|
| if (!$regexpLastMatchInfoOverride) {
|
| - start_index = RegExpLastMatchInfo[CAPTURE0];
|
| - subject = LAST_SUBJECT(RegExpLastMatchInfo);
|
| + start_index = $regexpLastMatchInfo[CAPTURE0];
|
| + subject = LAST_SUBJECT($regexpLastMatchInfo);
|
| } else {
|
| var override = $regexpLastMatchInfoOverride;
|
| start_index = OVERRIDE_POS(override);
|
| @@ -325,8 +328,8 @@
|
| var start_index;
|
| var subject;
|
| if (!$regexpLastMatchInfoOverride) {
|
| - start_index = RegExpLastMatchInfo[CAPTURE1];
|
| - subject = LAST_SUBJECT(RegExpLastMatchInfo);
|
| + start_index = $regexpLastMatchInfo[CAPTURE1];
|
| + subject = LAST_SUBJECT($regexpLastMatchInfo);
|
| } else {
|
| var override = $regexpLastMatchInfoOverride;
|
| subject = OVERRIDE_SUBJECT(override);
|
| @@ -349,11 +352,11 @@
|
| return '';
|
| }
|
| var index = n * 2;
|
| - if (index >= NUMBER_OF_CAPTURES(RegExpLastMatchInfo)) return '';
|
| - var matchStart = RegExpLastMatchInfo[CAPTURE(index)];
|
| - var matchEnd = RegExpLastMatchInfo[CAPTURE(index + 1)];
|
| + if (index >= NUMBER_OF_CAPTURES($regexpLastMatchInfo)) return '';
|
| + var matchStart = $regexpLastMatchInfo[CAPTURE(index)];
|
| + var matchEnd = $regexpLastMatchInfo[CAPTURE(index + 1)];
|
| if (matchStart == -1 || matchEnd == -1) return '';
|
| - return %_SubString(LAST_SUBJECT(RegExpLastMatchInfo), matchStart, matchEnd);
|
| + return %_SubString(LAST_SUBJECT($regexpLastMatchInfo), matchStart, matchEnd);
|
| };
|
| }
|
|
|
| @@ -364,7 +367,7 @@
|
| GlobalRegExp.prototype, 'constructor', GlobalRegExp, DONT_ENUM);
|
| %SetCode(GlobalRegExp, RegExpConstructor);
|
|
|
| -utils.InstallFunctions(GlobalRegExp.prototype, DONT_ENUM, [
|
| +$installFunctions(GlobalRegExp.prototype, DONT_ENUM, [
|
| "exec", RegExpExecJS,
|
| "test", RegExpTest,
|
| "toString", RegExpToString,
|
| @@ -378,11 +381,11 @@
|
| // value is set the value it is set to is coerced to a string.
|
| // Getter and setter for the input.
|
| var RegExpGetInput = function() {
|
| - var regExpInput = LAST_INPUT(RegExpLastMatchInfo);
|
| + var regExpInput = LAST_INPUT($regexpLastMatchInfo);
|
| return IS_UNDEFINED(regExpInput) ? "" : regExpInput;
|
| };
|
| var RegExpSetInput = function(string) {
|
| - LAST_INPUT(RegExpLastMatchInfo) = $toString(string);
|
| + LAST_INPUT($regexpLastMatchInfo) = $toString(string);
|
| };
|
|
|
| %OptimizeObjectForAddingMultipleProperties(GlobalRegExp, 22);
|
| @@ -440,13 +443,7 @@
|
| }
|
| %ToFastProperties(GlobalRegExp);
|
|
|
| -// -------------------------------------------------------------------
|
| -// Exports
|
| -
|
| -utils.Export(function(to) {
|
| - to.RegExpExec = DoRegExpExec;
|
| - to.RegExpExecNoTests = RegExpExecNoTests;
|
| - to.RegExpLastMatchInfo = RegExpLastMatchInfo;
|
| -});
|
| +$regexpExecNoTests = RegExpExecNoTests;
|
| +$regexpExec = DoRegExpExec;
|
|
|
| })
|
|
|