| Index: src/bootstrapper.cc
|
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
|
| index b0d3a5e50eedb2d662139642b2af315e3152be94..dd77c14e3f9239ca678ca0b2282033f09ee5a312 100644
|
| --- a/src/bootstrapper.cc
|
| +++ b/src/bootstrapper.cc
|
| @@ -281,12 +281,12 @@ class Genesis BASE_EMBEDDED {
|
| Handle<Context> result_;
|
| Handle<Context> native_context_;
|
|
|
| - // Function instance maps. Function literal maps are created initially with
|
| - // a read only prototype for the processing of JS builtins. Later the function
|
| - // instance maps are replaced in order to make prototype writable.
|
| - // These are the final, writable prototype, maps.
|
| - Handle<Map> function_instance_map_writable_prototype_;
|
| - Handle<Map> strict_mode_function_instance_map_writable_prototype_;
|
| + // Function maps. Function maps are created initially with a read only
|
| + // prototype for the processing of JS builtins. Later the function maps are
|
| + // replaced in order to make prototype writable. These are the final, writable
|
| + // prototype, maps.
|
| + Handle<Map> function_map_writable_prototype_;
|
| + Handle<Map> strict_mode_function_map_writable_prototype_;
|
| Handle<JSFunction> throw_type_error_function;
|
|
|
| BootstrapperActive active_;
|
| @@ -437,12 +437,6 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
|
| // Allocate the map for function instances. Maps are allocated first and their
|
| // prototypes patched later, once empty function is created.
|
|
|
| - // Please note that the prototype property for function instances must be
|
| - // writable.
|
| - Handle<Map> function_instance_map =
|
| - CreateFunctionMap(ADD_WRITEABLE_PROTOTYPE);
|
| - native_context()->set_function_instance_map(*function_instance_map);
|
| -
|
| // Functions with this map will not have a 'prototype' property, and
|
| // can not be used as constructors.
|
| Handle<Map> function_without_prototype_map =
|
| @@ -458,8 +452,7 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
|
|
|
| // The final map for functions. Writeable prototype.
|
| // This map is installed in MakeFunctionInstancePrototypeWritable.
|
| - function_instance_map_writable_prototype_ =
|
| - CreateFunctionMap(ADD_WRITEABLE_PROTOTYPE);
|
| + function_map_writable_prototype_ = CreateFunctionMap(ADD_WRITEABLE_PROTOTYPE);
|
|
|
| Factory* factory = isolate->factory();
|
| Heap* heap = isolate->heap();
|
| @@ -509,10 +502,9 @@ Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) {
|
|
|
| // Set prototypes for the function maps.
|
| native_context()->function_map()->set_prototype(*empty_function);
|
| - native_context()->function_instance_map()->set_prototype(*empty_function);
|
| native_context()->function_without_prototype_map()->
|
| set_prototype(*empty_function);
|
| - function_instance_map_writable_prototype_->set_prototype(*empty_function);
|
| + function_map_writable_prototype_->set_prototype(*empty_function);
|
|
|
| // Allocate the function map first and then patch the prototype later
|
| Handle<Map> empty_function_map = CreateFunctionMap(DONT_ADD_PROTOTYPE);
|
| @@ -601,12 +593,6 @@ Handle<Map> Genesis::CreateStrictModeFunctionMap(
|
|
|
|
|
| void Genesis::CreateStrictModeFunctionMaps(Handle<JSFunction> empty) {
|
| - // Allocate map for the strict mode function instances.
|
| - Handle<Map> strict_mode_function_instance_map =
|
| - CreateStrictModeFunctionMap(ADD_WRITEABLE_PROTOTYPE, empty);
|
| - native_context()->set_strict_mode_function_instance_map(
|
| - *strict_mode_function_instance_map);
|
| -
|
| // Allocate map for the prototype-less strict mode instances.
|
| Handle<Map> strict_mode_function_without_prototype_map =
|
| CreateStrictModeFunctionMap(DONT_ADD_PROTOTYPE, empty);
|
| @@ -623,15 +609,13 @@ void Genesis::CreateStrictModeFunctionMaps(Handle<JSFunction> empty) {
|
|
|
| // The final map for the strict mode functions. Writeable prototype.
|
| // This map is installed in MakeFunctionInstancePrototypeWritable.
|
| - strict_mode_function_instance_map_writable_prototype_ =
|
| + strict_mode_function_map_writable_prototype_ =
|
| CreateStrictModeFunctionMap(ADD_WRITEABLE_PROTOTYPE, empty);
|
|
|
| // Complete the callbacks.
|
| - PoisonArgumentsAndCaller(strict_mode_function_instance_map);
|
| PoisonArgumentsAndCaller(strict_mode_function_without_prototype_map);
|
| PoisonArgumentsAndCaller(strict_mode_function_map);
|
| - PoisonArgumentsAndCaller(
|
| - strict_mode_function_instance_map_writable_prototype_);
|
| + PoisonArgumentsAndCaller(strict_mode_function_map_writable_prototype_);
|
| }
|
|
|
|
|
| @@ -2522,14 +2506,13 @@ void Genesis::MakeFunctionInstancePrototypeWritable() {
|
| // The maps with writable prototype are created in CreateEmptyFunction
|
| // and CreateStrictModeFunctionMaps respectively. Initially the maps are
|
| // created with read-only prototype for JS builtins processing.
|
| - ASSERT(!function_instance_map_writable_prototype_.is_null());
|
| - ASSERT(!strict_mode_function_instance_map_writable_prototype_.is_null());
|
| + ASSERT(!function_map_writable_prototype_.is_null());
|
| + ASSERT(!strict_mode_function_map_writable_prototype_.is_null());
|
|
|
| // Replace function instance maps to make prototype writable.
|
| - native_context()->set_function_map(
|
| - *function_instance_map_writable_prototype_);
|
| + native_context()->set_function_map(*function_map_writable_prototype_);
|
| native_context()->set_strict_mode_function_map(
|
| - *strict_mode_function_instance_map_writable_prototype_);
|
| + *strict_mode_function_map_writable_prototype_);
|
| }
|
|
|
|
|
|
|