diff options
author | isaacs <i@izs.me> | 2013-02-08 17:17:45 -0800 |
---|---|---|
committer | isaacs <i@izs.me> | 2013-02-08 17:17:45 -0800 |
commit | 0c2e5ec840e2dc64585ea75f7539d87e5af4269e (patch) | |
tree | 43a452335e0d43a40d02498a687b0a2a61acdee4 /deps/v8/test/mjsunit | |
parent | 8164b2fda77d9f91c6cd83d360967bf55c0bd0f1 (diff) | |
download | node-0c2e5ec840e2dc64585ea75f7539d87e5af4269e.tar.gz |
V8: Upgrade to 3.15.11.15
Diffstat (limited to 'deps/v8/test/mjsunit')
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-2437.js | 81 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-2499.js | 40 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-crbug-170856.js | 33 |
3 files changed, 154 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/regress/regress-2437.js b/deps/v8/test/mjsunit/regress/regress-2437.js index 06b69b23d..c82293ae3 100644 --- a/deps/v8/test/mjsunit/regress/regress-2437.js +++ b/deps/v8/test/mjsunit/regress/regress-2437.js @@ -25,6 +25,14 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Summary of the spec: lastIndex is reset to 0 if +// - a regexp fails to match, regardless of global or non-global. +// - a global regexp is used in a function that returns multiple results, +// such as String.prototype.replace or String.prototype.match, since it +// repeats the regexp until it fails to match. +// Otherwise lastIndex is only set when a global regexp matches, to the index +// after the match. + // Test Regexp.prototype.exec r = /a/; r.lastIndex = 1; @@ -73,3 +81,76 @@ r.lastIndex = 1; "zzzz".replace(r, function() { return ""; }); assertEquals(0, r.lastIndex); +// Regexp functions that returns multiple results: +// A global regexp always resets lastIndex regardless of whether it matches. +r = /a/g; +r.lastIndex = -1; +"0123abcd".replace(r, "x"); +assertEquals(0, r.lastIndex); + +r.lastIndex = -1; +"01234567".replace(r, "x"); +assertEquals(0, r.lastIndex); + +r.lastIndex = -1; +"0123abcd".match(r); +assertEquals(0, r.lastIndex); + +r.lastIndex = -1; +"01234567".match(r); +assertEquals(0, r.lastIndex); + +// A non-global regexp resets lastIndex iff it does not match. +r = /a/; +r.lastIndex = -1; +"0123abcd".replace(r, "x"); +assertEquals(-1, r.lastIndex); + +r.lastIndex = -1; +"01234567".replace(r, "x"); +assertEquals(0, r.lastIndex); + +r.lastIndex = -1; +"0123abcd".match(r); +assertEquals(-1, r.lastIndex); + +r.lastIndex = -1; +"01234567".match(r); +assertEquals(0, r.lastIndex); + +// Also test RegExp.prototype.exec and RegExp.prototype.test +r = /a/g; +r.lastIndex = 1; +r.exec("01234567"); +assertEquals(0, r.lastIndex); + +r.lastIndex = 1; +r.exec("0123abcd"); +assertEquals(5, r.lastIndex); + +r = /a/; +r.lastIndex = 1; +r.exec("01234567"); +assertEquals(0, r.lastIndex); + +r.lastIndex = 1; +r.exec("0123abcd"); +assertEquals(1, r.lastIndex); + +r = /a/g; +r.lastIndex = 1; +r.test("01234567"); +assertEquals(0, r.lastIndex); + +r.lastIndex = 1; +r.test("0123abcd"); +assertEquals(5, r.lastIndex); + +r = /a/; +r.lastIndex = 1; +r.test("01234567"); +assertEquals(0, r.lastIndex); + +r.lastIndex = 1; +r.test("0123abcd"); +assertEquals(1, r.lastIndex); diff --git a/deps/v8/test/mjsunit/regress/regress-2499.js b/deps/v8/test/mjsunit/regress/regress-2499.js new file mode 100644 index 000000000..52aad874d --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-2499.js @@ -0,0 +1,40 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Flags: --allow-natives-syntax + +function foo(word, nBits) { + return (word[1] >>> nBits) | (word[0] << (32 - nBits)); +} + +word = [0x1001, 0]; + +var expected = foo(word, 1); +foo(word, 1); +%OptimizeFunctionOnNextCall(foo); +var optimized = foo(word, 1); +assertEquals(expected, optimized) diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-170856.js b/deps/v8/test/mjsunit/regress/regress-crbug-170856.js new file mode 100644 index 000000000..2e73b12ca --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-crbug-170856.js @@ -0,0 +1,33 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +r = new RegExp("a"); +for (var i = 0; i < 100; i++) { + r["abc" + i] = i; +} +"zzzz".replace(r, ""); +assertEquals(0, r.lastIndex); |