Reviewers: rossberg,
Message:
This relands r21492 unchanged, I will wait patiently with landing until the
layout test expectation has been rolled into Chrome.
Description:
Reland "Make 'name' property on functions configurable."
[email protected]
BUG=v8:3333
LOG=N
Please review this at https://codereview.chromium.org/303463006/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+25, -19 lines):
M src/bootstrapper.cc
M test/mjsunit/es7/object-observe.js
M test/mjsunit/regress/regress-1530.js
M test/mjsunit/regress/regress-270142.js
Index: src/bootstrapper.cc
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
index
2f27b05a7b3999863e5a849474b18f734acd1806..60c19b1d9eb18f0106a5c59932af0eed9bfcdcda
100644
--- a/src/bootstrapper.cc
+++ b/src/bootstrapper.cc
@@ -386,45 +386,47 @@ void Genesis::SetFunctionInstanceDescriptor(
int size = (prototypeMode == DONT_ADD_PROTOTYPE) ? 4 : 5;
Map::EnsureDescriptorSlack(map, size);
- PropertyAttributes attribs = static_cast<PropertyAttributes>(
- DONT_ENUM | DONT_DELETE | READ_ONLY);
+ PropertyAttributes ro_attribs =
+ static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
+ PropertyAttributes roc_attribs =
+ static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
Handle<AccessorInfo> length =
- Accessors::FunctionLengthInfo(isolate(), attribs);
+ Accessors::FunctionLengthInfo(isolate(), ro_attribs);
{ // Add length.
CallbacksDescriptor d(Handle<Name>(Name::cast(length->name())),
- length, attribs);
+ length, ro_attribs);
map->AppendDescriptor(&d);
}
Handle<AccessorInfo> name =
- Accessors::FunctionNameInfo(isolate(), attribs);
+ Accessors::FunctionNameInfo(isolate(), roc_attribs);
{ // Add name.
CallbacksDescriptor d(Handle<Name>(Name::cast(name->name())),
- name, attribs);
+ name, roc_attribs);
map->AppendDescriptor(&d);
}
Handle<AccessorInfo> args =
- Accessors::FunctionArgumentsInfo(isolate(), attribs);
+ Accessors::FunctionArgumentsInfo(isolate(), ro_attribs);
{ // Add arguments.
CallbacksDescriptor d(Handle<Name>(Name::cast(args->name())),
- args, attribs);
+ args, ro_attribs);
map->AppendDescriptor(&d);
}
Handle<AccessorInfo> caller =
- Accessors::FunctionCallerInfo(isolate(), attribs);
+ Accessors::FunctionCallerInfo(isolate(), ro_attribs);
{ // Add caller.
CallbacksDescriptor d(Handle<Name>(Name::cast(caller->name())),
- caller, attribs);
+ caller, ro_attribs);
map->AppendDescriptor(&d);
}
if (prototypeMode != DONT_ADD_PROTOTYPE) {
if (prototypeMode == ADD_WRITEABLE_PROTOTYPE) {
- attribs = static_cast<PropertyAttributes>(attribs & ~READ_ONLY);
+ ro_attribs = static_cast<PropertyAttributes>(ro_attribs &
~READ_ONLY);
}
Handle<AccessorInfo> prototype =
- Accessors::FunctionPrototypeInfo(isolate(), attribs);
+ Accessors::FunctionPrototypeInfo(isolate(), ro_attribs);
CallbacksDescriptor d(Handle<Name>(Name::cast(prototype->name())),
- prototype, attribs);
+ prototype, ro_attribs);
map->AppendDescriptor(&d);
}
}
@@ -533,6 +535,8 @@ void Genesis::SetStrictFunctionInstanceDescriptor(
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE);
PropertyAttributes ro_attribs =
static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
+ PropertyAttributes roc_attribs =
+ static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
Handle<AccessorInfo> length =
Accessors::FunctionLengthInfo(isolate(), ro_attribs);
@@ -542,10 +546,10 @@ void Genesis::SetStrictFunctionInstanceDescriptor(
map->AppendDescriptor(&d);
}
Handle<AccessorInfo> name =
- Accessors::FunctionNameInfo(isolate(), ro_attribs);
+ Accessors::FunctionNameInfo(isolate(), roc_attribs);
{ // Add name.
CallbacksDescriptor d(Handle<Name>(Name::cast(name->name())),
- name, ro_attribs);
+ name, roc_attribs);
map->AppendDescriptor(&d);
}
{ // Add arguments.
Index: test/mjsunit/es7/object-observe.js
diff --git a/test/mjsunit/es7/object-observe.js
b/test/mjsunit/es7/object-observe.js
index
7bb579f0c1462b6b33ff1bc6c3229067317f2845..20a2d160514ee554a9a091512d309a43a9ccd32a
100644
--- a/test/mjsunit/es7/object-observe.js
+++ b/test/mjsunit/es7/object-observe.js
@@ -1142,7 +1142,8 @@ var properties = ["a", "1",
1, "length", "setPrototype", "name", "caller"];
function blacklisted(obj, prop) {
return (obj instanceof Int32Array && prop == 1) ||
(obj instanceof Int32Array && prop === "length") ||
- (obj instanceof ArrayBuffer && prop == 1)
+ (obj instanceof ArrayBuffer && prop == 1) ||
+ (obj instanceof Function && prop === "name")
}
for (var i in objects) for (var j in properties) {
Index: test/mjsunit/regress/regress-1530.js
diff --git a/test/mjsunit/regress/regress-1530.js
b/test/mjsunit/regress/regress-1530.js
index
db2114450e4133371bc9045e0c409f5154333d01..3d4017782032922689862551a7eb819f66fc4521
100644
--- a/test/mjsunit/regress/regress-1530.js
+++ b/test/mjsunit/regress/regress-1530.js
@@ -62,8 +62,9 @@ assertSame(new f().foo, 'other');
assertSame(Object.getPrototypeOf(new f()), z);
assertSame(Object.getOwnPropertyDescriptor(f, 'prototype').value, z);
-// Verify that non-writability of other properties is respected.
-assertThrows("Object.defineProperty(f, 'name', { value: {} })");
+// Verify that non-configurability of other properties is respected, but
+// non-writability is ignored by Object.defineProperty().
+assertDoesNotThrow("Object.defineProperty(f, 'name', { value: {} })");
assertThrows("Object.defineProperty(f, 'length', { value: {} })");
assertThrows("Object.defineProperty(f, 'caller', { value: {} })");
assertThrows("Object.defineProperty(f, 'arguments', { value: {} })");
Index: test/mjsunit/regress/regress-270142.js
diff --git a/test/mjsunit/regress/regress-270142.js
b/test/mjsunit/regress/regress-270142.js
index
6e0865c4f846407228549ef8cce7aff5db6da89d..63f4d1414ead55029eb509a2f971aeea3e4bd722
100644
--- a/test/mjsunit/regress/regress-270142.js
+++ b/test/mjsunit/regress/regress-270142.js
@@ -39,7 +39,7 @@ function g(x) {
function checkNameDescriptor(f) {
var descriptor = Object.getOwnPropertyDescriptor(f, "name");
- assertFalse(descriptor.configurable);
+ assertTrue(descriptor.configurable);
assertFalse(descriptor.enumerable);
assertFalse(descriptor.writable);
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.