81e7e2f437
This CL implements the upcoming spec change: https://github.com/tc39/proposal-regexp-match-indices/pull/49 A new JSRegExpResultWithIndices subclass is introduced with a separate map and an extra slot for storing the indices. If /d is passed, exec() constructs a JSRegExpResultWithIndices and eagerly builds indices. The existing re-execution logic is removed. Bug: v8:9548 Change-Id: Ic11853e7521017af5e8bd583c7b82bb672821132 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2616873 Commit-Queue: Shu-yu Guo <syg@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#72306}
25 lines
907 B
JavaScript
25 lines
907 B
JavaScript
// Copyright 2020 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.
|
|
|
|
// Flags: --allow-natives-syntax
|
|
// Flags: --no-enable-experimental-regexp-engine
|
|
|
|
// We shouldn't recognize the 'l' flag.
|
|
assertThrows(() => new RegExp("asdf", "l"), SyntaxError)
|
|
assertThrows(() => new RegExp("123|xyz", "l"), SyntaxError)
|
|
assertThrows(() => new RegExp("((a*)*)*", "yls"), SyntaxError)
|
|
assertThrows(() => new RegExp("((a*)*)*\1", "l"), SyntaxError)
|
|
|
|
// RegExps shouldn't have a 'linear' property.
|
|
assertFalse(RegExp.prototype.hasOwnProperty('linear'));
|
|
assertFalse(/123/.hasOwnProperty('linear'));
|
|
|
|
// Redefined .linear shouldn't reflect in flags without
|
|
// --enable-experimental-regexp-engine.
|
|
{
|
|
let re = /./;
|
|
Object.defineProperty(re, "linear", { get: function() { return true; } });
|
|
assertEquals("", re.flags);
|
|
}
|