| Index: src/bootstrapper.cc
|
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
|
| index 246428680ef8eee5676376b1d03c49127fb0a833..8cd29b218aa9473f7468038c9ac7cbdbf48cf385 100644
|
| --- a/src/bootstrapper.cc
|
| +++ b/src/bootstrapper.cc
|
| @@ -207,10 +207,6 @@ class Genesis BASE_EMBEDDED {
|
| void CreateRoots();
|
| // Creates the empty function. Used for creating a context from scratch.
|
| Handle<JSFunction> CreateEmptyFunction();
|
| - void CreateThrowTypeErrorCallbacks(
|
| - Handle<FixedArray> callbacks,
|
| - Builtins::Name builtin);
|
| - void CreateThrowTypeError(Handle<JSFunction> empty);
|
| // Creates the global objects using the global and the template passed in
|
| // through the API. We call this regardless of whether we are building a
|
| // context from scratch or using a deserialized one from the partial snapshot
|
| @@ -267,10 +263,6 @@ class Genesis BASE_EMBEDDED {
|
| Handle<DescriptorArray> ComputeFunctionInstanceDescriptor(
|
| PrototypePropertyMode prototypeMode);
|
| void MakeFunctionInstancePrototypeWritable();
|
| - Handle<DescriptorArray> ComputeStrictFunctionDescriptor(
|
| - PrototypePropertyMode propertyMode,
|
| - Handle<FixedArray> arguments,
|
| - Handle<FixedArray> caller);
|
|
|
| static bool CompileBuiltin(int index);
|
| static bool CompileNative(Vector<const char> name, Handle<String> source);
|
| @@ -507,113 +499,6 @@ Handle<JSFunction> Genesis::CreateEmptyFunction() {
|
| }
|
|
|
|
|
| -Handle<DescriptorArray> Genesis::ComputeStrictFunctionDescriptor(
|
| - PrototypePropertyMode prototypeMode,
|
| - Handle<FixedArray> arguments,
|
| - Handle<FixedArray> caller) {
|
| - Handle<DescriptorArray> descriptors =
|
| - Factory::NewDescriptorArray(prototypeMode == DONT_ADD_PROTOTYPE ? 4 : 5);
|
| - PropertyAttributes attributes = static_cast<PropertyAttributes>(
|
| - DONT_ENUM | DONT_DELETE | READ_ONLY);
|
| -
|
| - { // length
|
| - Handle<Proxy> proxy = Factory::NewProxy(&Accessors::FunctionLength);
|
| - CallbacksDescriptor d(*Factory::length_symbol(), *proxy, attributes);
|
| - descriptors->Set(0, &d);
|
| - }
|
| - { // name
|
| - Handle<Proxy> proxy = Factory::NewProxy(&Accessors::FunctionName);
|
| - CallbacksDescriptor d(*Factory::name_symbol(), *proxy, attributes);
|
| - descriptors->Set(1, &d);
|
| - }
|
| - { // arguments
|
| - CallbacksDescriptor d(*Factory::arguments_symbol(), *arguments, attributes);
|
| - descriptors->Set(2, &d);
|
| - }
|
| - { // caller
|
| - CallbacksDescriptor d(*Factory::caller_symbol(), *caller, attributes);
|
| - descriptors->Set(3, &d);
|
| - }
|
| -
|
| - // prototype
|
| - if (prototypeMode != DONT_ADD_PROTOTYPE) {
|
| - if (prototypeMode == ADD_WRITEABLE_PROTOTYPE) {
|
| - attributes = static_cast<PropertyAttributes>(attributes & ~READ_ONLY);
|
| - }
|
| - CallbacksDescriptor d(
|
| - *Factory::prototype_symbol(),
|
| - *Factory::NewProxy(&Accessors::FunctionPrototype),
|
| - attributes);
|
| - descriptors->Set(4, &d);
|
| - }
|
| -
|
| - descriptors->Sort();
|
| - return descriptors;
|
| -}
|
| -
|
| -
|
| -void Genesis::CreateThrowTypeErrorCallbacks(
|
| - Handle<FixedArray> callbacks,
|
| - Builtins::Name builtin) {
|
| - // Create the ThrowTypeError function.
|
| - Handle<String> name = Factory::LookupAsciiSymbol("ThrowTypeError");
|
| - Handle<JSFunction> pill = Factory::NewFunctionWithoutPrototypeStrict(name);
|
| - Handle<Code> code = Handle<Code>(Builtins::builtin(builtin));
|
| - pill->set_map(global_context()->function_map_strict());
|
| - pill->set_code(*code);
|
| - pill->shared()->set_code(*code);
|
| - pill->shared()->DontAdaptArguments();
|
| -
|
| - // Install the poison pills into the calbacks array.
|
| - callbacks->set(0, *pill);
|
| - callbacks->set(1, *pill);
|
| -
|
| - PreventExtensions(pill);
|
| -}
|
| -
|
| -
|
| -// ECMAScript 5th Edition, 13.2.3
|
| -void Genesis::CreateThrowTypeError(Handle<JSFunction> empty) {
|
| - // Create the pill callbacks arrays. The get/set callacks are installed
|
| - // after the maps get created below.
|
| - Handle<FixedArray> arguments = Factory::NewFixedArray(2, TENURED);
|
| - Handle<FixedArray> caller = Factory::NewFixedArray(2, TENURED);
|
| -
|
| - { // Allocate map for the strict mode function instances.
|
| - Handle<Map> map = Factory::NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
|
| - global_context()->set_function_instance_map_strict(*map);
|
| - Handle<DescriptorArray> descriptors = ComputeStrictFunctionDescriptor(
|
| - ADD_WRITEABLE_PROTOTYPE, arguments, caller);
|
| - map->set_instance_descriptors(*descriptors);
|
| - map->set_function_with_prototype(true);
|
| - map->set_prototype(*empty);
|
| - }
|
| -
|
| - { // Allocate map for the prototype-less strict mode instances.
|
| - Handle<Map> map = Factory::NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
|
| - global_context()->set_function_without_prototype_map_strict(*map);
|
| - Handle<DescriptorArray> descriptors = ComputeStrictFunctionDescriptor(
|
| - DONT_ADD_PROTOTYPE, arguments, caller);
|
| - map->set_instance_descriptors(*descriptors);
|
| - map->set_function_with_prototype(false);
|
| - map->set_prototype(*empty);
|
| - }
|
| -
|
| - { // Allocate map for the strict mode functions.
|
| - Handle<Map> map = Factory::NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
|
| - global_context()->set_function_map_strict(*map);
|
| - Handle<DescriptorArray> descriptors = ComputeStrictFunctionDescriptor(
|
| - ADD_READONLY_PROTOTYPE, arguments, caller);
|
| - map->set_instance_descriptors(*descriptors);
|
| - map->set_function_with_prototype(true);
|
| - map->set_prototype(*empty);
|
| - }
|
| -
|
| - CreateThrowTypeErrorCallbacks(arguments, Builtins::StrictFunctionArguments);
|
| - CreateThrowTypeErrorCallbacks(caller, Builtins::StrictFunctionCaller);
|
| -}
|
| -
|
| -
|
| static void AddToWeakGlobalContextList(Context* context) {
|
| ASSERT(context->IsGlobalContext());
|
| #ifdef DEBUG
|
| @@ -1973,7 +1858,6 @@ Genesis::Genesis(Handle<Object> global_object,
|
| // We get here if there was no context snapshot.
|
| CreateRoots();
|
| Handle<JSFunction> empty_function = CreateEmptyFunction();
|
| - CreateThrowTypeError(empty_function);
|
| Handle<GlobalObject> inner_global;
|
| Handle<JSGlobalProxy> global_proxy =
|
| CreateNewGlobals(global_template, global_object, &inner_global);
|
|
|