| Index: test/webkit/fast/js/numeric-escapes-in-string-literals.js
|
| diff --git a/test/webkit/dfg-put-by-id-prototype-check.js b/test/webkit/fast/js/numeric-escapes-in-string-literals.js
|
| similarity index 54%
|
| copy from test/webkit/dfg-put-by-id-prototype-check.js
|
| copy to test/webkit/fast/js/numeric-escapes-in-string-literals.js
|
| index a8b61374ef5af987f1741f22c72db35cfa69c872..8ecd70b7f9e218977619f5453f12b9236f3c602c 100644
|
| --- a/test/webkit/dfg-put-by-id-prototype-check.js
|
| +++ b/test/webkit/fast/js/numeric-escapes-in-string-literals.js
|
| @@ -22,31 +22,48 @@
|
| // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| description(
|
| -"Tests that the DFG CFA is not overzealous in removing prototype structure checks for put_by_id transitions."
|
| +"Test numeric escapes in string literals - https://bugs.webkit.org/show_bug.cgi?id=51724"
|
| );
|
|
|
| -function foo(a, b)
|
| +function test(_stringLiteral, _nonStrictResult, _strictResult)
|
| {
|
| - a.f = b;
|
| + stringLiteral = '"' + _stringLiteral + '"';
|
| + nonStrictResult = _nonStrictResult;
|
| + shouldBe("eval(stringLiteral)", "nonStrictResult");
|
| +
|
| + stringLiteral = '"use strict"; ' + stringLiteral;
|
| + if (_strictResult) {
|
| + strictResult = _strictResult;
|
| + shouldBe("eval(stringLiteral)", "strictResult");
|
| + } else
|
| + shouldThrow("eval(stringLiteral)");
|
| }
|
|
|
| -var Empty = "";
|
| +// Tests for single digit octal and decimal escapes.
|
| +// In non-strict mode 0-7 are octal escapes, 8-9 are NonEscapeCharacters.
|
| +// In strict mode only "\0" is permitted.
|
| +test("\\0", "\x00", "\x00");
|
| +test("\\1", "\x01");
|
| +test("\\7", "\x07");
|
| +test("\\8", "8");
|
| +test("\\9", "9");
|
|
|
| -function Foo() {
|
| -}
|
| +// Tests for multi-digit octal values outside strict mode;
|
| +// Octal literals may be 1-3 digits long. In strict more all multi-digit sequences are illegal.
|
| +test("\\00", "\x00");
|
| +test("\\000", "\x00");
|
| +test("\\0000", "\x000");
|
|
|
| -var stuff;
|
| +test("\\01", "\x01");
|
| +test("\\001", "\x01");
|
| +test("\\0001", "\x001");
|
|
|
| -for (var i = 0; i < 1000; ++i) {
|
| - if (i >= 900)
|
| - Foo.prototype.__defineSetter__("f", function(value) { stuff = value; });
|
| +test("\\10", "\x08");
|
| +test("\\100", "\x40");
|
| +test("\\1000", "\x400");
|
|
|
| - var o = new Foo();
|
| - eval(Empty + "foo(o, i)");
|
| - if (i >= 900) {
|
| - shouldBe("stuff", "" + i);
|
| - shouldBe("o.f", "" + (void 0));
|
| - } else
|
| - shouldBe("o.f", "" + i);
|
| -}
|
| +test("\\19", "\x019");
|
| +test("\\109", "\x089");
|
| +test("\\1009", "\x409");
|
|
|
| +test("\\99", "99");
|
|
|