Reviewers: Michael Starzinger,

Description:
Regexp.rightContext was still not quite right.  Fixed and
added more tests.

Please review this at https://chromiumcodereview.appspot.com/10008104/

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/regexp.js
  M     test/mjsunit/regexp-capture-3.js


Index: src/regexp.js
===================================================================
--- src/regexp.js       (revision 11299)
+++ src/regexp.js       (working copy)
@@ -350,8 +350,8 @@
   } else {
     var override = lastMatchInfoOverride;
     subject = override[override.length - 1];
-    var pattern = override[override.length - 3];
-    start_index = override[override.length - 2] + pattern.length;
+    var match = override[0];
+    start_index = override[override.length - 2] + match.length;
   }
   return SubString(subject, start_index, subject.length);
 }
Index: test/mjsunit/regexp-capture-3.js
===================================================================
--- test/mjsunit/regexp-capture-3.js    (revision 11299)
+++ test/mjsunit/regexp-capture-3.js    (working copy)
@@ -25,6 +25,64 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-"abcd".replace(/b/g, function() { });
+function oneMatch(re) {
+  "abcd".replace(re, function() { });
+  assertEquals("abcd", RegExp.input);
+  assertEquals("a", RegExp.leftContext);
+  assertEquals("b", RegExp.lastMatch);
+  assertEquals("", RegExp.lastParen);
+  assertEquals(undefined, RegExp.lastIndex);
+  assertEquals(undefined, RegExp.index);
+  assertEquals("cd", RegExp.rightContext);
+  for (var i = 1; i < 10; i++) {
+    assertEquals("", RegExp['$' + i]);
+  }
+}

+oneMatch(/b/);
+oneMatch(/b/g);
+
+"abcdabcd".replace(/b/g, function() { });
+assertEquals("abcdabcd", RegExp.input);
+assertEquals("abcda", RegExp.leftContext);
+assertEquals("b", RegExp.lastMatch);
+assertEquals("", RegExp.lastParen);
+assertEquals(undefined, RegExp.lastIndex);
+assertEquals(undefined, RegExp.index);
 assertEquals("cd", RegExp.rightContext);
+for (var i = 1; i < 10; i++) {
+  assertEquals("", RegExp['$' + i]);
+}
+
+function captureMatch(re) {
+  "abcd".replace(re, function() { });
+  assertEquals("abcd", RegExp.input);
+  assertEquals("a", RegExp.leftContext);
+  assertEquals("bc", RegExp.lastMatch);
+  assertEquals("c", RegExp.lastParen);
+  assertEquals(undefined, RegExp.lastIndex);
+  assertEquals(undefined, RegExp.index);
+  assertEquals("d", RegExp.rightContext);
+  assertEquals('b', RegExp.$1);
+  assertEquals('c', RegExp.$2);
+  for (var i = 3; i < 10; i++) {
+    assertEquals("", RegExp['$' + i]);
+  }
+}
+
+captureMatch(/(b)(c)/);
+captureMatch(/(b)(c)/g);
+
+"abcdabcd".replace(/(b)(c)/g, function() { });
+assertEquals("abcdabcd", RegExp.input);
+assertEquals("abcda", RegExp.leftContext);
+assertEquals("bc", RegExp.lastMatch);
+assertEquals("c", RegExp.lastParen);
+assertEquals(undefined, RegExp.lastIndex);
+assertEquals(undefined, RegExp.index);
+assertEquals("d", RegExp.rightContext);
+assertEquals('b', RegExp.$1);
+assertEquals('c', RegExp.$2);
+for (var i = 3; i < 10; i++) {
+  assertEquals("", RegExp['$' + i]);
+}


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to