Revert "In RegExp, lastIndex is read with ToLength, not ToInteger"
authorlittledan <littledan@chromium.org>
Fri, 24 Jul 2015 06:21:08 +0000 (23:21 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 24 Jul 2015 06:21:29 +0000 (06:21 +0000)
$toLength is slow, causing a 3.8%-8% regression in the Octane RegExp
benchmark. Reverting this patch brings it back up. To make this change,
we'll need a faster implementation fo $toLength.

BUG=chromium:513160
LOG=Y
R=adamk

Review URL: https://codereview.chromium.org/1243053005

Cr-Commit-Position: refs/heads/master@{#29830}

src/regexp.js
test/mozilla/mozilla.status
test/test262-es6/test262-es6.status
test/test262/test262.status

index 6c6b11c..bf75ca1 100644 (file)
@@ -154,9 +154,9 @@ function RegExpExecJS(string) {
   string = TO_STRING_INLINE(string);
   var lastIndex = this.lastIndex;
 
-  // Conversion is required by the ES6 specification (RegExpBuiltinExec
-  // algorithm, step 4) even if the value is discarded for non-global RegExps.
-  var i = $toLength(lastIndex);
+  // Conversion is required by the ES5 specification (RegExp.prototype.exec
+  // algorithm, step 5) even if the value is discarded for non-global RegExps.
+  var i = TO_INTEGER(lastIndex);
 
   var updateLastIndex = this.global || (harmony_regexps && this.sticky);
   if (updateLastIndex) {
@@ -202,9 +202,9 @@ function RegExpTest(string) {
 
   var lastIndex = this.lastIndex;
 
-  // Conversion is required by the ES6 specification (RegExpBuiltinExec
-  // algorithm, step 4) even if the value is discarded for non-global RegExps.
-  var i = $toLength(lastIndex);
+  // Conversion is required by the ES5 specification (RegExp.prototype.exec
+  // algorithm, step 5) even if the value is discarded for non-global RegExps.
+  var i = TO_INTEGER(lastIndex);
 
   if (this.global || (harmony_regexps && this.sticky)) {
     if (i < 0 || i > string.length) {
index 90c397d..94278e3 100644 (file)
@@ -85,8 +85,6 @@
   'ecma/String/15.5.4.8-1': [FAIL],
   'ecma/String/15.5.4.9-1': [FAIL],
 
-  # ToLength, not ToUint32, is called on RegExps' lastIndex property
-  'ecma_3/RegExp/15.10.6.2-2': [FAIL],
 
   ##################### SKIPPED TESTS #####################
 
index cab3f0d..782ee39 100644 (file)
   # https://code.google.com/p/v8/issues/detail?id=4003
   'built-ins/RegExp/prototype/15.10.6': [FAIL],
 
+  # https://code.google.com/p/v8/issues/detail?id=4244
+  'built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T3': [FAIL],
+
   # https://code.google.com/p/v8/issues/detail?id=4006
   'built-ins/String/prototype/S15.5.4_A1': [FAIL],
   'built-ins/String/prototype/S15.5.4_A2': [FAIL],
index a88982c..feed1a3 100644 (file)
   '15.2.3.13-1-3': [FAIL],
   '15.2.3.13-1-4': [FAIL],
 
-  # ES6 RegExp test calls ToLength, not ToUint32
-  'S15.10.6.2_A5_T3': [FAIL],
-
   ######################## NEEDS INVESTIGATION ###########################
 
   # These test failures are specific to the intl402 suite and need investigation