| Index: src/factory.cc
|
| diff --git a/src/factory.cc b/src/factory.cc
|
| index cdbc6fe04dbf8f4fcbe5cee231017e8c56245046..23db67454207f1e1ed687368818eadb588c9668c 100644
|
| --- a/src/factory.cc
|
| +++ b/src/factory.cc
|
| @@ -2654,6 +2654,42 @@ void Factory::SetStrictFunctionInstanceDescriptor(Handle<Map> map,
|
| }
|
| }
|
|
|
| +Handle<Map> Factory::CreateClassFunctionMap(Handle<JSFunction> empty_function) {
|
| + Handle<Map> map = NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
|
| + SetClassFunctionInstanceDescriptor(map);
|
| + map->set_is_constructor(true);
|
| + map->set_is_callable();
|
| + Map::SetPrototype(map, empty_function);
|
| + return map;
|
| +}
|
| +
|
| +void Factory::SetClassFunctionInstanceDescriptor(Handle<Map> map) {
|
| + Map::EnsureDescriptorSlack(map, 2);
|
| +
|
| + PropertyAttributes rw_attribs =
|
| + static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE);
|
| + PropertyAttributes roc_attribs =
|
| + static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
|
| +
|
| + STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0);
|
| + { // Add length.
|
| + Handle<AccessorInfo> length =
|
| + Accessors::FunctionLengthInfo(isolate(), roc_attribs);
|
| + AccessorConstantDescriptor d(handle(Name::cast(length->name())), length,
|
| + roc_attribs);
|
| + map->AppendDescriptor(&d);
|
| + }
|
| +
|
| + {
|
| + // Add prototype.
|
| + Handle<AccessorInfo> prototype =
|
| + Accessors::FunctionPrototypeInfo(isolate(), rw_attribs);
|
| + AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())),
|
| + prototype, rw_attribs);
|
| + map->AppendDescriptor(&d);
|
| + }
|
| +}
|
| +
|
| Handle<JSFixedArrayIterator> Factory::NewJSFixedArrayIterator(
|
| Handle<FixedArray> array) {
|
| // Create the "next" function (must be unique per iterator object).
|
|
|