| Index: src/factory.cc
 | 
| diff --git a/src/factory.cc b/src/factory.cc
 | 
| index 3c0c7578760f4a0adb226d0ed5221c8e7231f9cd..9126334fdcdf620be4d437c826211125855fe745 100644
 | 
| --- a/src/factory.cc
 | 
| +++ b/src/factory.cc
 | 
| @@ -2604,5 +2604,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) {
 | 
| +  int size = 3;  // with prototype
 | 
| +  Map::EnsureDescriptorSlack(map, size);
 | 
| +
 | 
| +  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);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  }  // namespace internal
 | 
|  }  // namespace v8
 | 
| 
 |