Reviewers: Toon Verwaest,
Description:
Fix performance regression introduced in r29558
where bound functions started overriding the "name" accessor property with a
data property. The bootstrapper must be kept in sync to avoid polymorphism.
BUG=chromium:509983
LOG=n
[email protected]
Please review this at https://codereview.chromium.org/1238903002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+24, -16 lines):
M src/bootstrapper.cc
Index: src/bootstrapper.cc
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
index
5ab578a1717866e279ca1db509728f1037013074..2df9afc8b5e4e23a9d16ce064e336bba6acd25d7
100644
--- a/src/bootstrapper.cc
+++ b/src/bootstrapper.cc
@@ -625,27 +625,35 @@ void
Genesis::SetStrictFunctionInstanceDescriptor(Handle<Map> map,
PropertyAttributes roc_attribs =
static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
- // Add length.
if (function_mode == BOUND_FUNCTION) {
- Handle<String> length_string = isolate()->factory()->length_string();
- DataDescriptor d(length_string, 0, roc_attribs,
Representation::Tagged());
- map->AppendDescriptor(&d);
+ { // Add length.
+ Handle<String> length_string = isolate()->factory()->length_string();
+ DataDescriptor d(length_string, 0, roc_attribs,
Representation::Tagged());
+ map->AppendDescriptor(&d);
+ }
+ { // Add name.
+ Handle<String> name_string = isolate()->factory()->name_string();
+ DataDescriptor d(name_string, 1, roc_attribs,
Representation::Tagged());
+ map->AppendDescriptor(&d);
+ }
} else {
DCHECK(function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ||
function_mode == FUNCTION_WITH_READONLY_PROTOTYPE ||
function_mode == FUNCTION_WITHOUT_PROTOTYPE);
- Handle<AccessorInfo> length =
- Accessors::FunctionLengthInfo(isolate(), roc_attribs);
- AccessorConstantDescriptor d(Handle<Name>(Name::cast(length->name())),
- length, roc_attribs);
- map->AppendDescriptor(&d);
- }
- Handle<AccessorInfo> name =
- Accessors::FunctionNameInfo(isolate(), roc_attribs);
- { // Add name.
- AccessorConstantDescriptor d(Handle<Name>(Name::cast(name->name())),
name,
- roc_attribs);
- map->AppendDescriptor(&d);
+ { // Add length.
+ Handle<AccessorInfo> length =
+ Accessors::FunctionLengthInfo(isolate(), roc_attribs);
+ AccessorConstantDescriptor
d(Handle<Name>(Name::cast(length->name())),
+ length, roc_attribs);
+ map->AppendDescriptor(&d);
+ }
+ { // Add name.
+ Handle<AccessorInfo> name =
+ Accessors::FunctionNameInfo(isolate(), roc_attribs);
+ AccessorConstantDescriptor d(Handle<Name>(Name::cast(name->name())),
name,
+ roc_attribs);
+ map->AppendDescriptor(&d);
+ }
}
if (IsFunctionModeWithPrototype(function_mode)) {
// Add prototype.
--
--
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.