128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// Redistribution and use in source and binary forms, with or without 328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// modification, are permitted provided that the following conditions are 428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// met: 528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// 628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// * Redistributions of source code must retain the above copyright 728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// notice, this list of conditions and the following disclaimer. 828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// * Redistributions in binary form must reproduce the above 928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// copyright notice, this list of conditions and the following 1028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// disclaimer in the documentation and/or other materials provided 1128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// with the distribution. 1228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// * Neither the name of Google Inc. nor the names of its 1328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// contributors may be used to endorse or promote products derived 1428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// from this software without specific prior written permission. 1528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// 1628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 28ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comfunction oneMatch(re) { 29ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com "abcd".replace(re, function() { }); 30ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("abcd", RegExp.input); 31ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("a", RegExp.leftContext); 32ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("b", RegExp.lastMatch); 33ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("", RegExp.lastParen); 34ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals(undefined, RegExp.lastIndex); 35ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals(undefined, RegExp.index); 36ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("cd", RegExp.rightContext); 37ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com for (var i = 1; i < 10; i++) { 38ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("", RegExp['$' + i]); 39ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com } 40ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com} 4128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 42ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comoneMatch(/b/); 43ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comoneMatch(/b/g); 44ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 45ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com"abcdabcd".replace(/b/g, function() { }); 46ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("abcdabcd", RegExp.input); 47ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("abcda", RegExp.leftContext); 48ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("b", RegExp.lastMatch); 49ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("", RegExp.lastParen); 50ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals(undefined, RegExp.lastIndex); 51ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals(undefined, RegExp.index); 5228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.orgassertEquals("cd", RegExp.rightContext); 53ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comfor (var i = 1; i < 10; i++) { 54ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("", RegExp['$' + i]); 55ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com} 56ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 57ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comfunction captureMatch(re) { 58ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com "abcd".replace(re, function() { }); 59ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("abcd", RegExp.input); 60ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("a", RegExp.leftContext); 61ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("bc", RegExp.lastMatch); 62ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("c", RegExp.lastParen); 63ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals(undefined, RegExp.lastIndex); 64ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals(undefined, RegExp.index); 65ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("d", RegExp.rightContext); 66ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals('b', RegExp.$1); 67ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals('c', RegExp.$2); 68ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com for (var i = 3; i < 10; i++) { 69ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("", RegExp['$' + i]); 70ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com } 71ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com} 72ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 73ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comcaptureMatch(/(b)(c)/); 74ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comcaptureMatch(/(b)(c)/g); 75ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 76ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com"abcdabcd".replace(/(b)(c)/g, function() { }); 77ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("abcdabcd", RegExp.input); 78ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("abcda", RegExp.leftContext); 79ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("bc", RegExp.lastMatch); 80ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("c", RegExp.lastParen); 81ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals(undefined, RegExp.lastIndex); 82ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals(undefined, RegExp.index); 83ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals("d", RegExp.rightContext); 84ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals('b', RegExp.$1); 85ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertEquals('c', RegExp.$2); 86ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comfor (var i = 3; i < 10; i++) { 87ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com assertEquals("", RegExp['$' + i]); 88ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com} 89efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 90efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 91efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgfunction Override() { 92efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org // Set the internal lastMatchInfoOverride. After calling this we do a normal 93efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org // match and verify the override was cleared and that we record the new 94efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org // captures. 95efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org "abcdabcd".replace(/(b)(c)/g, function() { }); 96efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 97efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 98efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 99efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgfunction TestOverride(input, expect, property, re_src) { 100efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org var re = new RegExp(re_src); 101efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org var re_g = new RegExp(re_src, "g"); 102efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 103efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org function OverrideCase(fn) { 104efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org Override(); 105efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org fn(); 106efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org assertEquals(expect, RegExp[property]); 107efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org } 108efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 109efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return input.replace(re, "x"); }); 110efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return input.replace(re_g, "x"); }); 111efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return input.replace(re, ""); }); 112efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return input.replace(re_g, ""); }); 113efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return input.match(re); }); 114efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return input.match(re_g); }); 115efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return re.test(input); }); 116efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org OverrideCase(function() { return re_g.test(input); }); 117efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 118efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 119efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvar input = "bar.foo baz......"; 120efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvar re_str = "(ba.).*?f"; 121efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgTestOverride(input, "bar", "$1", re_str); 122efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 123efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orginput = "foo bar baz"; 124efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvar re_str = "bar"; 125efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgTestOverride(input, "bar", "$&", re_str); 126efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 127efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 128efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgfunction no_last_match(fn) { 129efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org fn(); 130efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org assertEquals("hestfisk", RegExp.$1); 131efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 132efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 133efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org/(hestfisk)/.test("There's no such thing as a hestfisk!"); 134efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 135efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgno_last_match(function() { "foo".replace("f", ""); }); 136efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgno_last_match(function() { "foo".replace("f", "f"); }); 137efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgno_last_match(function() { "foo".split("o"); }); 138efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 139efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvar base = "In the music. In the music. "; 140efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvar cons = base + base + base + base; 141efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgno_last_match(function() { cons.replace("x", "y"); }); 142efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgno_last_match(function() { cons.replace("e", "E"); }); 143efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 144efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 145efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org// Here's one that matches once, then tries to match again, but fails. 146efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org// Verify that the last match info is from the last match, not from the 147efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org// failure that came after. 148efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org"bar.foo baz......".replace(/(ba.).*?f/g, function() { return "x";}); 149efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgassertEquals("bar", RegExp.$1); 150efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 151efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 152efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org// A test that initially does a zero width match, but later does a non-zero 153efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org// width match. 154efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvar a = "foo bar baz".replace(/^|bar/g, ""); 155efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgassertEquals("foo baz", a); 156efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 157efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orga = "foo bar baz".replace(/^|bar/g, "*"); 158efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgassertEquals("*foo * baz", a); 1591044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 1601044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// We test FilterASCII using regexps that will backtrack forever. Since 1611044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// a regexp with a non-ASCII character in it can never match an ASCII 1621044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// string we can test that the relevant node is removed by verifying that 1631044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// there is no hang. 1641044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.orgfunction NoHang(re) { 1651044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org "This is an ASCII string that could take forever".match(re); 1661044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org} 1671044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 16859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(((.*)*)*x)Ā/); // Continuation after loop is filtered, so is loop. 16959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(((.*)*)*Ā)foo/); // Body of loop filtered. 17059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/Ā(((.*)*)*x)/); // Everything after a filtered character is filtered. 17159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(((.*)*)*x)Ā/); // Everything before a filtered character is filtered. 17259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/[ćăĀ](((.*)*)*x)/); // Everything after a filtered class is filtered. 17359297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(((.*)*)*x)[ćăĀ]/); // Everything before a filtered class is filtered. 17459297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/[^\x00-\xff](((.*)*)*x)/); // After negated class. 17559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(((.*)*)*x)[^\x00-\xff]/); // Before negated class. 17659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(?!(((.*)*)*x)Ā)foo/); // Negative lookahead is filtered. 17759297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(?!(((.*)*)*x))Ā/); // Continuation branch of negative lookahead. 17859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(?=(((.*)*)*x)Ā)foo/); // Positive lookahead is filtered. 17959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(?=(((.*)*)*x))Ā/); // Continuation branch of positive lookahead. 18059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(?=Ā)(((.*)*)*x)/); // Positive lookahead also prunes continuation. 18159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(æ|ø|Ā)(((.*)*)*x)/); // All branches of alternation are filtered. 18259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(a|b|(((.*)*)*x))Ā/); // 1 out of 3 branches pruned. 18359297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgNoHang(/(a|(((.*)*)*x)ă|(((.*)*)*x)Ā)/); // 2 out of 3 branches pruned. 1841044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 1851044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.orgvar s = "Don't prune based on a repetition of length 0"; 1861044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.orgassertEquals(null, s.match(/å{1,1}prune/)); 1871044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.orgassertEquals("prune", (s.match(/å{0,0}prune/)[0])); 1882c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 1892c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org// Some very deep regexps where FilterASCII gives up in order not to make the 1902c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org// stack overflow. 1912c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgvar regex6 = /a*\u0100*\w/; 1922c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgvar input0 = "a"; 1932c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgregex6.exec(input0); 1942c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 1952c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgvar re = "\u0100*\\w"; 1962c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 1972c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgfor (var i = 0; i < 200; i++) re = "a*" + re; 1982c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 1992c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgvar regex7 = new RegExp(re); 2002c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgregex7.exec(input0); 2012c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 2022c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgvar regex8 = new RegExp(re, "i"); 2032c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgregex8.exec(input0); 2042c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 2052c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgre = "[\u0100]*\\w"; 2062c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgfor (var i = 0; i < 200; i++) re = "a*" + re; 2072c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 2082c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgvar regex9 = new RegExp(re); 2092c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgregex9.exec(input0); 2102c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.org 2112c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgvar regex10 = new RegExp(re, "i"); 2122c26cb18967944507a81a07ac6f1c921ebb4ab75danno@chromium.orgregex10.exec(input0); 213b10deab7527ad052fa030882ebc5e0eb47236e4cdanno@chromium.org 214b10deab7527ad052fa030882ebc5e0eb47236e4cdanno@chromium.orgvar regex11 = /^(?:[^\u0000-\u0080]|[0-9a-z?,.!&\s#()])+$/i; 215b10deab7527ad052fa030882ebc5e0eb47236e4cdanno@chromium.orgregex11.exec(input0); 216b10deab7527ad052fa030882ebc5e0eb47236e4cdanno@chromium.org 21737141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.orgvar regex12 = /u(\xf0{8}?\D*?|( ? !)$h??(|)*?(||)+?\6((?:\W\B|--\d-*-|)?$){0, }?|^Y( ? !1)\d+)+a/; 21837141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.orgregex12.exec(""); 219