From 4c082b570da7f53f8f650764b513705f08c62093 Mon Sep 17 00:00:00 2001 From: rossberg Date: Thu, 19 Feb 2015 03:30:25 -0800 Subject: [PATCH] Make generator constructors configurable R=mstarzinger@chromium.org BUG=v8:3902 LOG=Y Review URL: https://codereview.chromium.org/939953002 Cr-Commit-Position: refs/heads/master@{#26744} --- src/generator.js | 4 ++-- test/mjsunit/es6/regress/regress-3902.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 test/mjsunit/es6/regress/regress-3902.js diff --git a/src/generator.js b/src/generator.js index 8e9ed8f..9ab7dcb 100644 --- a/src/generator.js +++ b/src/generator.js @@ -97,7 +97,7 @@ function SetUpGenerators() { %AddNamedProperty(GeneratorObjectPrototype, symbolIterator, GeneratorObjectIterator, DONT_ENUM | DONT_DELETE | READ_ONLY); %AddNamedProperty(GeneratorObjectPrototype, "constructor", - GeneratorFunctionPrototype, DONT_ENUM | DONT_DELETE | READ_ONLY); + GeneratorFunctionPrototype, DONT_ENUM | READ_ONLY); %AddNamedProperty(GeneratorObjectPrototype, symbolToStringTag, "Generator", DONT_ENUM | READ_ONLY); %InternalSetPrototype(GeneratorFunctionPrototype, $Function.prototype); @@ -105,7 +105,7 @@ function SetUpGenerators() { symbolToStringTag, "GeneratorFunction", DONT_ENUM | READ_ONLY); %SetCode(GeneratorFunctionPrototype, GeneratorFunctionPrototypeConstructor); %AddNamedProperty(GeneratorFunctionPrototype, "constructor", - GeneratorFunction, DONT_ENUM | DONT_DELETE | READ_ONLY); + GeneratorFunction, DONT_ENUM | READ_ONLY); %InternalSetPrototype(GeneratorFunction, $Function); %SetCode(GeneratorFunction, GeneratorFunctionConstructor); } diff --git a/test/mjsunit/es6/regress/regress-3902.js b/test/mjsunit/es6/regress/regress-3902.js new file mode 100644 index 0000000..768a4a1 --- /dev/null +++ b/test/mjsunit/es6/regress/regress-3902.js @@ -0,0 +1,15 @@ +// Copyright 2015 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. + +function* g() {} +assertTrue(Object.getOwnPropertyDescriptor(g.__proto__, "constructor").configurable); +assertTrue(Object.getOwnPropertyDescriptor(g.prototype.__proto__, "constructor").configurable); + +function FakeGeneratorFunctionConstructor() {} +Object.defineProperty(g.__proto__, "constructor", {value: FakeGeneratorFunctionConstructor}); +assertSame(g.__proto__.constructor, FakeGeneratorFunctionConstructor); + +function FakeGeneratorObjectConstructor() {} +Object.defineProperty(g.prototype.__proto__, "constructor", {value: FakeGeneratorObjectConstructor}); +assertSame(g.prototype.__proto__.constructor, FakeGeneratorObjectConstructor); -- 2.7.4