v8/test/mjsunit/regexp-lastIndex.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

23 lines
805 B
JavaScript
Raw Normal View History

Reland of Put RegExp js code in strict mode (patchset #2 id:20001 of https://codereview.chromium.or… (patchset #2 id:20001 of https://codereview.chromium.org/2112713003/ ) Reason for revert: With fixes for frozen RegExps in https://codereview.chromium.org/2339443002 , it should be web-compatible to put RegExps in strict mode again, per spec. Original issue's description: > Revert of Put RegExp js code in strict mode (patchset #2 id:20001 of https://codereview.chromium.org/1776883005/ ) > > Reason for revert: > Found to break SAP Web IDE, and these semantics are not shipped in any other browser. > Revert to legacy semantics while assessing web compatibility. > > BUG=chromium:624318 > > Original issue's description: > > Put RegExp js code in strict mode > > > > src/js/regexp.js was one of the few files that was left in sloppy > > mode. The ES2017 draft specification requires that writes to > > lastIndex throw when the property is non-writable, and test262 > > tests enforce this behavior. This patch puts that file in strict > > mode. > > > > BUG=v8:4504 > > R=yangguo@chromium.org > > LOG=Y > > > > Committed: https://crrev.com/80b1b2a45bbd9bf3d08e4e6516acfaaa8f438213 > > Cr-Commit-Position: refs/heads/master@{#34801} > > TBR=yangguo@chromium.org,adamk@chromium.org > > Committed: https://crrev.com/34880eb3dcf7492d44c0a3b45b6c888189f2c3c3 > Cr-Commit-Position: refs/heads/master@{#37449} TBR=adamk@chromium.org,yangguo@chromium.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=chromium:624318 Review-Url: https://codereview.chromium.org/2344773002 Cr-Commit-Position: refs/heads/master@{#39456}
2016-09-15 19:20:17 +00:00
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// lastIndex is set only for global or sticky RegExps. On failure to find
// a match, it is set to 0. If a set fails, then it acts as if in strict mode
// and throws.
var re = /x/g;
Object.defineProperty(re, 'lastIndex', {writable: false});
assertThrows(() => re.exec(""), TypeError);
assertThrows(() => re.exec("x"), TypeError);
var re = /x/y;
Object.defineProperty(re, 'lastIndex', {writable: false});
assertThrows(() => re.exec(""), TypeError);
assertThrows(() => re.exec("x"), TypeError);
var re = /x/;
Object.defineProperty(re, 'lastIndex', {writable: false});
assertEquals(null, re.exec(""));
assertEquals(["x"], re.exec("x"));