OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/bootstrapper.h" | 5 #include "src/bootstrapper.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api-natives.h" | 8 #include "src/api-natives.h" |
9 #include "src/base/ieee754.h" | 9 #include "src/base/ieee754.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 void ConfigureUtilsObject(GlobalContextType context_type); | 209 void ConfigureUtilsObject(GlobalContextType context_type); |
210 | 210 |
211 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \ | 211 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \ |
212 void InitializeGlobal_##id(); | 212 void InitializeGlobal_##id(); |
213 | 213 |
214 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) | 214 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) |
215 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) | 215 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) |
216 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) | 216 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) |
217 #undef DECLARE_FEATURE_INITIALIZATION | 217 #undef DECLARE_FEATURE_INITIALIZATION |
218 | 218 |
| 219 void InstallOneBuiltinFunction(const char* object, const char* method, |
| 220 Builtins::Name name); |
219 void InitializeGlobal_enable_fast_array_builtins(); | 221 void InitializeGlobal_enable_fast_array_builtins(); |
220 | 222 |
221 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, | 223 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, |
222 const char* name, Builtins::Name call, | 224 const char* name, Builtins::Name call, |
223 BuiltinFunctionId id, bool is_shared); | 225 BuiltinFunctionId id, bool is_shared); |
224 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, | 226 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, |
225 const char* name, | 227 const char* name, |
226 ElementsKind elements_kind); | 228 ElementsKind elements_kind); |
227 bool InstallNatives(GlobalContextType context_type); | 229 bool InstallNatives(GlobalContextType context_type); |
228 | 230 |
(...skipping 3428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3657 JSGlobalObject::cast(native_context->global_object())); | 3659 JSGlobalObject::cast(native_context->global_object())); |
3658 Handle<String> symbol_string = factory->InternalizeUtf8String("Symbol"); | 3660 Handle<String> symbol_string = factory->InternalizeUtf8String("Symbol"); |
3659 Handle<JSObject> symbol = Handle<JSObject>::cast( | 3661 Handle<JSObject> symbol = Handle<JSObject>::cast( |
3660 JSObject::GetProperty(global, symbol_string).ToHandleChecked()); | 3662 JSObject::GetProperty(global, symbol_string).ToHandleChecked()); |
3661 Handle<String> name_string = factory->InternalizeUtf8String(name); | 3663 Handle<String> name_string = factory->InternalizeUtf8String(name); |
3662 PropertyAttributes attributes = | 3664 PropertyAttributes attributes = |
3663 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); | 3665 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); |
3664 JSObject::AddProperty(symbol, name_string, value, attributes); | 3666 JSObject::AddProperty(symbol, name_string, value, attributes); |
3665 } | 3667 } |
3666 | 3668 |
| 3669 void Genesis::InstallOneBuiltinFunction(const char* object_name, |
| 3670 const char* method_name, |
| 3671 Builtins::Name builtin_name) { |
| 3672 Handle<JSGlobalObject> global(native_context()->global_object()); |
| 3673 Isolate* isolate = global->GetIsolate(); |
| 3674 Factory* factory = isolate->factory(); |
| 3675 |
| 3676 LookupIterator it1(global, factory->NewStringFromAsciiChecked(object_name), |
| 3677 LookupIterator::OWN_SKIP_INTERCEPTOR); |
| 3678 Handle<Object> object = Object::GetProperty(&it1).ToHandleChecked(); |
| 3679 LookupIterator it2(object, factory->NewStringFromAsciiChecked("prototype"), |
| 3680 LookupIterator::OWN_SKIP_INTERCEPTOR); |
| 3681 Handle<Object> prototype = Object::GetProperty(&it2).ToHandleChecked(); |
| 3682 |
| 3683 LookupIterator it3(prototype, factory->NewStringFromAsciiChecked(method_name), |
| 3684 LookupIterator::OWN_SKIP_INTERCEPTOR); |
| 3685 Handle<Object> function = Object::GetProperty(&it3).ToHandleChecked(); |
| 3686 Handle<JSFunction>::cast(function)->set_code( |
| 3687 isolate->builtins()->builtin(builtin_name)); |
| 3688 Handle<JSFunction>::cast(function)->shared()->set_code( |
| 3689 isolate->builtins()->builtin(builtin_name)); |
| 3690 } |
| 3691 |
3667 void Genesis::InitializeGlobal_enable_fast_array_builtins() { | 3692 void Genesis::InitializeGlobal_enable_fast_array_builtins() { |
3668 if (!FLAG_enable_fast_array_builtins) return; | 3693 if (!FLAG_enable_fast_array_builtins) return; |
3669 | 3694 |
3670 Handle<JSGlobalObject> global(native_context()->global_object()); | 3695 InstallOneBuiltinFunction("Array", "forEach", Builtins::kArrayForEach); |
3671 Isolate* isolate = global->GetIsolate(); | 3696 InstallOneBuiltinFunction("Array", "every", Builtins::kArrayEvery); |
3672 Factory* factory = isolate->factory(); | 3697 InstallOneBuiltinFunction("Array", "some", Builtins::kArraySome); |
3673 | 3698 InstallOneBuiltinFunction("Array", "reduce", Builtins::kArrayReduce); |
3674 LookupIterator it1(global, factory->NewStringFromAsciiChecked("Array"), | |
3675 LookupIterator::OWN_SKIP_INTERCEPTOR); | |
3676 Handle<Object> array_object = Object::GetProperty(&it1).ToHandleChecked(); | |
3677 LookupIterator it2(array_object, | |
3678 factory->NewStringFromAsciiChecked("prototype"), | |
3679 LookupIterator::OWN_SKIP_INTERCEPTOR); | |
3680 Handle<Object> array_prototype = Object::GetProperty(&it2).ToHandleChecked(); | |
3681 | |
3682 LookupIterator it3(array_prototype, | |
3683 factory->NewStringFromAsciiChecked("forEach"), | |
3684 LookupIterator::OWN_SKIP_INTERCEPTOR); | |
3685 Handle<Object> for_each_function = | |
3686 Object::GetProperty(&it3).ToHandleChecked(); | |
3687 Handle<JSFunction>::cast(for_each_function) | |
3688 ->set_code(isolate->builtins()->builtin(Builtins::kArrayForEach)); | |
3689 Handle<JSFunction>::cast(for_each_function) | |
3690 ->shared() | |
3691 ->set_code(isolate->builtins()->builtin(Builtins::kArrayForEach)); | |
3692 | |
3693 LookupIterator it4(array_prototype, | |
3694 factory->NewStringFromAsciiChecked("every"), | |
3695 LookupIterator::OWN_SKIP_INTERCEPTOR); | |
3696 Handle<Object> every_function = Object::GetProperty(&it4).ToHandleChecked(); | |
3697 Handle<JSFunction>::cast(every_function) | |
3698 ->set_code(isolate->builtins()->builtin(Builtins::kArrayEvery)); | |
3699 Handle<JSFunction>::cast(every_function) | |
3700 ->shared() | |
3701 ->set_code(isolate->builtins()->builtin(Builtins::kArrayEvery)); | |
3702 | |
3703 LookupIterator it5(array_prototype, | |
3704 factory->NewStringFromAsciiChecked("some"), | |
3705 LookupIterator::OWN_SKIP_INTERCEPTOR); | |
3706 Handle<Object> some_function = Object::GetProperty(&it5).ToHandleChecked(); | |
3707 Handle<JSFunction>::cast(some_function) | |
3708 ->set_code(isolate->builtins()->builtin(Builtins::kArraySome)); | |
3709 Handle<JSFunction>::cast(some_function) | |
3710 ->shared() | |
3711 ->set_code(isolate->builtins()->builtin(Builtins::kArraySome)); | |
3712 | 3699 |
3713 if (FLAG_experimental_array_builtins) { | 3700 if (FLAG_experimental_array_builtins) { |
3714 LookupIterator it6(array_prototype, | 3701 InstallOneBuiltinFunction("Array", "filter", Builtins::kArrayFilter); |
3715 factory->NewStringFromAsciiChecked("filter"), | |
3716 LookupIterator::OWN_SKIP_INTERCEPTOR); | |
3717 Handle<Object> filter_function = | |
3718 Object::GetProperty(&it6).ToHandleChecked(); | |
3719 Handle<JSFunction>::cast(filter_function) | |
3720 ->set_code(isolate->builtins()->builtin(Builtins::kArrayFilter)); | |
3721 Handle<JSFunction>::cast(filter_function) | |
3722 ->shared() | |
3723 ->set_code(isolate->builtins()->builtin(Builtins::kArrayFilter)); | |
3724 } | 3702 } |
3725 } | 3703 } |
3726 | 3704 |
3727 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { | 3705 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { |
3728 if (!FLAG_harmony_sharedarraybuffer) return; | 3706 if (!FLAG_harmony_sharedarraybuffer) return; |
3729 | 3707 |
3730 Handle<JSGlobalObject> global(native_context()->global_object()); | 3708 Handle<JSGlobalObject> global(native_context()->global_object()); |
3731 Isolate* isolate = global->GetIsolate(); | 3709 Isolate* isolate = global->GetIsolate(); |
3732 Factory* factory = isolate->factory(); | 3710 Factory* factory = isolate->factory(); |
3733 | 3711 |
(...skipping 1345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5079 } | 5057 } |
5080 | 5058 |
5081 | 5059 |
5082 // Called when the top-level V8 mutex is destroyed. | 5060 // Called when the top-level V8 mutex is destroyed. |
5083 void Bootstrapper::FreeThreadResources() { | 5061 void Bootstrapper::FreeThreadResources() { |
5084 DCHECK(!IsActive()); | 5062 DCHECK(!IsActive()); |
5085 } | 5063 } |
5086 | 5064 |
5087 } // namespace internal | 5065 } // namespace internal |
5088 } // namespace v8 | 5066 } // namespace v8 |
OLD | NEW |