From b24f04d4c387b570529acdbb1312a2493481117d Mon Sep 17 00:00:00 2001 From: mathiasb Date: Sat, 13 Dec 2014 14:36:21 -0800 Subject: [PATCH] Make `RegExp.prototype.flags` getter configurable TEST=mjsunit/harmony BUG=v8:3751 LOG=N Review URL: https://codereview.chromium.org/788053003 Cr-Commit-Position: refs/heads/master@{#25809} --- src/harmony-regexp.js | 2 +- test/mjsunit/harmony/regexp-flags.js | 25 +++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/harmony-regexp.js b/src/harmony-regexp.js index a2b1729..a1b32ab 100644 --- a/src/harmony-regexp.js +++ b/src/harmony-regexp.js @@ -28,7 +28,7 @@ function ExtendRegExpPrototype() { %CheckIsBootstrapping(); %DefineAccessorPropertyUnchecked($RegExp.prototype, 'flags', RegExpGetFlags, - null, DONT_ENUM | DONT_DELETE); + null, DONT_ENUM); %SetNativeFlag(RegExpGetFlags); } diff --git a/test/mjsunit/harmony/regexp-flags.js b/test/mjsunit/harmony/regexp-flags.js index b200443..475fda4 100644 --- a/test/mjsunit/harmony/regexp-flags.js +++ b/test/mjsunit/harmony/regexp-flags.js @@ -4,7 +4,6 @@ // Flags: --harmony-regexps -delete RegExp.prototype.flags; RegExp.prototype.flags = 'setter should be undefined'; assertEquals('', RegExp('').flags); @@ -18,7 +17,7 @@ assertEquals('gimy', /foo/ymig.flags); assertThrows(function() { RegExp('', 'yumig').flags; }, SyntaxError); var descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags'); -assertFalse(descriptor.configurable); +assertTrue(descriptor.configurable); assertFalse(descriptor.enumerable); assertInstanceof(descriptor.get, Function); assertEquals(undefined, descriptor.set); @@ -38,3 +37,25 @@ assertThrows(function() { testGenericFlags(true); }, TypeError); assertThrows(function() { testGenericFlags(false); }, TypeError); assertThrows(function() { testGenericFlags(''); }, TypeError); assertThrows(function() { testGenericFlags(42); }, TypeError); + +var counter = 0; +var map = {}; +var object = { + get global() { + map.g = counter++; + }, + get ignoreCase() { + map.i = counter++; + }, + get multiline() { + map.m = counter++; + }, + get unicode() { + map.u = counter++; + }, + get sticky() { + map.y = counter++; + } +}; +testGenericFlags(object); +assertEquals({ g: 0, i: 1, m: 2, u: 3, y: 4 }, map); -- 2.7.4