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/utils/random-number-generator.h" | 9 #include "src/base/utils/random-number-generator.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 // The native context has a ScriptContextTable that store declarative bindings | 207 // The native context has a ScriptContextTable that store declarative bindings |
208 // made in script scopes. Add a "this" binding to that table pointing to the | 208 // made in script scopes. Add a "this" binding to that table pointing to the |
209 // global proxy. | 209 // global proxy. |
210 void InstallGlobalThisBinding(); | 210 void InstallGlobalThisBinding(); |
211 void HookUpGlobalThisBinding(Handle<FixedArray> outdated_contexts); | 211 void HookUpGlobalThisBinding(Handle<FixedArray> outdated_contexts); |
212 // New context initialization. Used for creating a context from scratch. | 212 // New context initialization. Used for creating a context from scratch. |
213 void InitializeGlobal(Handle<GlobalObject> global_object, | 213 void InitializeGlobal(Handle<GlobalObject> global_object, |
214 Handle<JSFunction> empty_function, | 214 Handle<JSFunction> empty_function, |
215 ContextType context_type); | 215 ContextType context_type); |
216 void InitializeExperimentalGlobal(); | 216 void InitializeExperimentalGlobal(); |
217 // Installs the contents of the native .js files on the global objects. | |
218 // Used for creating a context from scratch. | |
219 void InstallNativeFunctions(); | |
220 void InstallExperimentalNativeFunctions(); | |
221 // Typed arrays are not serializable and have to initialized afterwards. | 217 // Typed arrays are not serializable and have to initialized afterwards. |
222 void InitializeBuiltinTypedArrays(); | 218 void InitializeBuiltinTypedArrays(); |
223 | 219 |
224 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \ | 220 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \ |
225 void InstallNativeFunctions_##id(); \ | |
226 void InitializeGlobal_##id(); | 221 void InitializeGlobal_##id(); |
227 | 222 |
228 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) | 223 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) |
229 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) | 224 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) |
230 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) | 225 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) |
231 #undef DECLARE_FEATURE_INITIALIZATION | 226 #undef DECLARE_FEATURE_INITIALIZATION |
232 | 227 |
233 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, | 228 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, |
234 const char* name, | 229 const char* name, |
235 ElementsKind elements_kind); | 230 ElementsKind elements_kind); |
(...skipping 1458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1694 return Handle<JSObject>(JSObject::cast(function->prototype())); | 1689 return Handle<JSObject>(JSObject::cast(function->prototype())); |
1695 } | 1690 } |
1696 Handle<String> inner_string = factory->InternalizeUtf8String(inner); | 1691 Handle<String> inner_string = factory->InternalizeUtf8String(inner); |
1697 DCHECK(!inner_string.is_null()); | 1692 DCHECK(!inner_string.is_null()); |
1698 Handle<Object> value = | 1693 Handle<Object> value = |
1699 Object::GetProperty(object, inner_string).ToHandleChecked(); | 1694 Object::GetProperty(object, inner_string).ToHandleChecked(); |
1700 return Handle<JSObject>::cast(value); | 1695 return Handle<JSObject>::cast(value); |
1701 } | 1696 } |
1702 | 1697 |
1703 | 1698 |
1704 #define INSTALL_NATIVE(Type, name, var) \ | |
1705 Handle<String> var##_name = \ | |
1706 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR(name)); \ | |
1707 Handle<Object> var##_native = \ | |
1708 Object::GetProperty(handle(native_context()->builtins()), var##_name) \ | |
1709 .ToHandleChecked(); \ | |
1710 native_context()->set_##var(Type::cast(*var##_native)); | |
1711 | |
1712 | |
1713 void Genesis::InstallNativeFunctions() { | |
1714 HandleScope scope(isolate()); | |
1715 INSTALL_NATIVE(JSFunction, "$createDate", create_date_fun); | |
1716 | |
1717 INSTALL_NATIVE(JSFunction, "$toNumber", to_number_fun); | |
1718 INSTALL_NATIVE(JSFunction, "$toString", to_string_fun); | |
1719 INSTALL_NATIVE(JSFunction, "$toDetailString", to_detail_string_fun); | |
1720 INSTALL_NATIVE(JSFunction, "$toInteger", to_integer_fun); | |
1721 INSTALL_NATIVE(JSFunction, "$toLength", to_length_fun); | |
1722 | |
1723 INSTALL_NATIVE(JSFunction, "$globalEval", global_eval_fun); | |
1724 INSTALL_NATIVE(JSFunction, "$getStackTraceLine", get_stack_trace_line_fun); | |
1725 INSTALL_NATIVE(JSFunction, "$toCompletePropertyDescriptor", | |
1726 to_complete_property_descriptor); | |
1727 | |
1728 INSTALL_NATIVE(Symbol, "$promiseStatus", promise_status); | |
1729 INSTALL_NATIVE(Symbol, "$promiseValue", promise_value); | |
1730 INSTALL_NATIVE(JSFunction, "$promiseCreate", promise_create); | |
1731 INSTALL_NATIVE(JSFunction, "$promiseResolve", promise_resolve); | |
1732 INSTALL_NATIVE(JSFunction, "$promiseReject", promise_reject); | |
1733 INSTALL_NATIVE(JSFunction, "$promiseChain", promise_chain); | |
1734 INSTALL_NATIVE(JSFunction, "$promiseCatch", promise_catch); | |
1735 INSTALL_NATIVE(JSFunction, "$promiseThen", promise_then); | |
1736 | |
1737 INSTALL_NATIVE(JSFunction, "$observeNotifyChange", observers_notify_change); | |
1738 INSTALL_NATIVE(JSFunction, "$observeEnqueueSpliceRecord", | |
1739 observers_enqueue_splice); | |
1740 INSTALL_NATIVE(JSFunction, "$observeBeginPerformSplice", | |
1741 observers_begin_perform_splice); | |
1742 INSTALL_NATIVE(JSFunction, "$observeEndPerformSplice", | |
1743 observers_end_perform_splice); | |
1744 INSTALL_NATIVE(JSFunction, "$observeNativeObjectObserve", | |
1745 native_object_observe); | |
1746 INSTALL_NATIVE(JSFunction, "$observeNativeObjectGetNotifier", | |
1747 native_object_get_notifier); | |
1748 INSTALL_NATIVE(JSFunction, "$observeNativeObjectNotifierPerformChange", | |
1749 native_object_notifier_perform_change); | |
1750 INSTALL_NATIVE(JSFunction, "$arrayValues", array_values_iterator); | |
1751 INSTALL_NATIVE(JSFunction, "$mapGet", map_get); | |
1752 INSTALL_NATIVE(JSFunction, "$mapSet", map_set); | |
1753 INSTALL_NATIVE(JSFunction, "$mapHas", map_has); | |
1754 INSTALL_NATIVE(JSFunction, "$mapDelete", map_delete); | |
1755 INSTALL_NATIVE(JSFunction, "$setAdd", set_add); | |
1756 INSTALL_NATIVE(JSFunction, "$setHas", set_has); | |
1757 INSTALL_NATIVE(JSFunction, "$setDelete", set_delete); | |
1758 INSTALL_NATIVE(JSFunction, "$mapFromArray", map_from_array); | |
1759 INSTALL_NATIVE(JSFunction, "$setFromArray", set_from_array); | |
1760 } | |
1761 | |
1762 | |
1763 void Genesis::InstallExperimentalNativeFunctions() { | |
1764 if (FLAG_harmony_proxies) { | |
1765 INSTALL_NATIVE(JSFunction, "$proxyDerivedHasTrap", derived_has_trap); | |
1766 INSTALL_NATIVE(JSFunction, "$proxyDerivedGetTrap", derived_get_trap); | |
1767 INSTALL_NATIVE(JSFunction, "$proxyDerivedSetTrap", derived_set_trap); | |
1768 INSTALL_NATIVE(JSFunction, "$proxyEnumerate", proxy_enumerate); | |
1769 } | |
1770 | |
1771 #define INSTALL_NATIVE_FUNCTIONS_FOR(id, descr) InstallNativeFunctions_##id(); | |
1772 HARMONY_INPROGRESS(INSTALL_NATIVE_FUNCTIONS_FOR) | |
1773 HARMONY_STAGED(INSTALL_NATIVE_FUNCTIONS_FOR) | |
1774 HARMONY_SHIPPING(INSTALL_NATIVE_FUNCTIONS_FOR) | |
1775 #undef INSTALL_NATIVE_FUNCTIONS_FOR | |
1776 } | |
1777 | |
1778 | |
1779 template <typename Data> | 1699 template <typename Data> |
1780 Data* SetBuiltinTypedArray(Isolate* isolate, Handle<JSBuiltinsObject> builtins, | 1700 Data* SetBuiltinTypedArray(Isolate* isolate, Handle<JSBuiltinsObject> builtins, |
1781 ExternalArrayType type, Data* data, | 1701 ExternalArrayType type, Data* data, |
1782 size_t num_elements, const char* name) { | 1702 size_t num_elements, const char* name) { |
1783 size_t byte_length = num_elements * sizeof(*data); | 1703 size_t byte_length = num_elements * sizeof(*data); |
1784 Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer(); | 1704 Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer(); |
1785 bool is_external = data != nullptr; | 1705 bool is_external = data != nullptr; |
1786 if (!is_external) { | 1706 if (!is_external) { |
1787 data = reinterpret_cast<Data*>( | 1707 data = reinterpret_cast<Data*>( |
1788 isolate->array_buffer_allocator()->Allocate(byte_length)); | 1708 isolate->array_buffer_allocator()->Allocate(byte_length)); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1825 { // Initialize a result array for rempio2 calculation | 1745 { // Initialize a result array for rempio2 calculation |
1826 const size_t num_elements = 2; | 1746 const size_t num_elements = 2; |
1827 double* data = | 1747 double* data = |
1828 SetBuiltinTypedArray<double>(isolate(), builtins, kExternalFloat64Array, | 1748 SetBuiltinTypedArray<double>(isolate(), builtins, kExternalFloat64Array, |
1829 NULL, num_elements, "rempio2result"); | 1749 NULL, num_elements, "rempio2result"); |
1830 for (size_t i = 0; i < num_elements; i++) data[i] = 0; | 1750 for (size_t i = 0; i < num_elements; i++) data[i] = 0; |
1831 } | 1751 } |
1832 } | 1752 } |
1833 | 1753 |
1834 | 1754 |
1835 #define EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(id) \ | 1755 #define INSTALL_NATIVE(Type, name, var) \ |
1836 void Genesis::InstallNativeFunctions_##id() {} | 1756 Handle<Object> var##_native = \ |
| 1757 Object::GetProperty(isolate, container, name, STRICT).ToHandleChecked(); \ |
| 1758 DCHECK(var##_native->Is##Type()); \ |
| 1759 native_context->set_##var(Type::cast(*var##_native)); |
| 1760 |
| 1761 |
| 1762 void Bootstrapper::ImportNatives(Isolate* isolate, Handle<JSObject> container) { |
| 1763 HandleScope scope(isolate); |
| 1764 Handle<Context> native_context = isolate->native_context(); |
| 1765 INSTALL_NATIVE(JSFunction, "CreateDate", create_date_fun); |
| 1766 INSTALL_NATIVE(JSFunction, "ToNumber", to_number_fun); |
| 1767 INSTALL_NATIVE(JSFunction, "ToString", to_string_fun); |
| 1768 INSTALL_NATIVE(JSFunction, "ToDetailString", to_detail_string_fun); |
| 1769 INSTALL_NATIVE(JSFunction, "ToInteger", to_integer_fun); |
| 1770 INSTALL_NATIVE(JSFunction, "ToLength", to_length_fun); |
| 1771 |
| 1772 INSTALL_NATIVE(JSFunction, "GlobalEval", global_eval_fun); |
| 1773 INSTALL_NATIVE(JSFunction, "GetStackTraceLine", get_stack_trace_line_fun); |
| 1774 INSTALL_NATIVE(JSFunction, "ToCompletePropertyDescriptor", |
| 1775 to_complete_property_descriptor); |
| 1776 |
| 1777 INSTALL_NATIVE(Symbol, "promiseStatus", promise_status); |
| 1778 INSTALL_NATIVE(Symbol, "promiseValue", promise_value); |
| 1779 INSTALL_NATIVE(JSFunction, "PromiseCreate", promise_create); |
| 1780 INSTALL_NATIVE(JSFunction, "PromiseResolve", promise_resolve); |
| 1781 INSTALL_NATIVE(JSFunction, "PromiseReject", promise_reject); |
| 1782 INSTALL_NATIVE(JSFunction, "PromiseChain", promise_chain); |
| 1783 INSTALL_NATIVE(JSFunction, "PromiseCatch", promise_catch); |
| 1784 INSTALL_NATIVE(JSFunction, "PromiseThen", promise_then); |
| 1785 |
| 1786 INSTALL_NATIVE(JSFunction, "ObserveNotifyChange", observers_notify_change); |
| 1787 INSTALL_NATIVE(JSFunction, "ObserveEnqueueSpliceRecord", |
| 1788 observers_enqueue_splice); |
| 1789 INSTALL_NATIVE(JSFunction, "ObserveBeginPerformSplice", |
| 1790 observers_begin_perform_splice); |
| 1791 INSTALL_NATIVE(JSFunction, "ObserveEndPerformSplice", |
| 1792 observers_end_perform_splice); |
| 1793 INSTALL_NATIVE(JSFunction, "ObserveNativeObjectObserve", |
| 1794 native_object_observe); |
| 1795 INSTALL_NATIVE(JSFunction, "ObserveNativeObjectGetNotifier", |
| 1796 native_object_get_notifier); |
| 1797 INSTALL_NATIVE(JSFunction, "ObserveNativeObjectNotifierPerformChange", |
| 1798 native_object_notifier_perform_change); |
| 1799 |
| 1800 INSTALL_NATIVE(JSFunction, "ArrayValues", array_values_iterator); |
| 1801 INSTALL_NATIVE(JSFunction, "MapGet", map_get); |
| 1802 INSTALL_NATIVE(JSFunction, "MapSet", map_set); |
| 1803 INSTALL_NATIVE(JSFunction, "MapHas", map_has); |
| 1804 INSTALL_NATIVE(JSFunction, "MapDelete", map_delete); |
| 1805 INSTALL_NATIVE(JSFunction, "SetAdd", set_add); |
| 1806 INSTALL_NATIVE(JSFunction, "SetHas", set_has); |
| 1807 INSTALL_NATIVE(JSFunction, "SetDelete", set_delete); |
| 1808 INSTALL_NATIVE(JSFunction, "MapFromArray", map_from_array); |
| 1809 INSTALL_NATIVE(JSFunction, "SetFromArray", set_from_array); |
| 1810 } |
| 1811 |
| 1812 |
| 1813 #define EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(id) \ |
| 1814 static void InstallExperimentalNatives_##id(Isolate* isolate, \ |
| 1815 Handle<Context> native_context, \ |
| 1816 Handle<JSObject> container) {} |
1837 | 1817 |
1838 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_modules) | 1818 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_modules) |
1839 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_array_includes) | 1819 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_array_includes) |
1840 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_regexps) | 1820 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_regexps) |
1841 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_arrow_functions) | 1821 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_arrow_functions) |
1842 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_tostring) | 1822 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_tostring) |
1843 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy) | 1823 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy) |
1844 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy_function) | 1824 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy_function) |
1845 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy_let) | 1825 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy_let) |
1846 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_unicode_regexps) | 1826 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_unicode_regexps) |
1847 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_rest_parameters) | 1827 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_rest_parameters) |
1848 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_reflect) | 1828 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_reflect) |
1849 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_spreadcalls) | 1829 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_spreadcalls) |
1850 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_destructuring) | 1830 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_destructuring) |
1851 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_object) | 1831 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_object) |
1852 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_object_observe) | 1832 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_object_observe) |
1853 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_spread_arrays) | 1833 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_spread_arrays) |
1854 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sharedarraybuffer) | 1834 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sharedarraybuffer) |
1855 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_atomics) | 1835 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_atomics) |
1856 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_new_target) | 1836 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_new_target) |
1857 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_concat_spreadable) | 1837 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_concat_spreadable) |
1858 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_simd) | 1838 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_simd) |
1859 | 1839 |
1860 | 1840 |
1861 void Genesis::InstallNativeFunctions_harmony_proxies() { | 1841 static void InstallExperimentalNatives_harmony_proxies( |
| 1842 Isolate* isolate, Handle<Context> native_context, |
| 1843 Handle<JSObject> container) { |
1862 if (FLAG_harmony_proxies) { | 1844 if (FLAG_harmony_proxies) { |
1863 INSTALL_NATIVE(JSFunction, "$proxyDerivedHasTrap", derived_has_trap); | 1845 INSTALL_NATIVE(JSFunction, "ProxyDerivedGetTrap", derived_get_trap); |
1864 INSTALL_NATIVE(JSFunction, "$proxyDerivedGetTrap", derived_get_trap); | 1846 INSTALL_NATIVE(JSFunction, "ProxyDerivedHasTrap", derived_has_trap); |
1865 INSTALL_NATIVE(JSFunction, "$proxyDerivedSetTrap", derived_set_trap); | 1847 INSTALL_NATIVE(JSFunction, "ProxyDerivedSetTrap", derived_set_trap); |
1866 INSTALL_NATIVE(JSFunction, "$proxyEnumerate", proxy_enumerate); | 1848 INSTALL_NATIVE(JSFunction, "ProxyEnumerate", proxy_enumerate); |
1867 } | 1849 } |
1868 } | 1850 } |
1869 | 1851 |
1870 | 1852 |
| 1853 void Bootstrapper::ImportExperimentalNatives(Isolate* isolate, |
| 1854 Handle<JSObject> container) { |
| 1855 HandleScope scope(isolate); |
| 1856 Handle<Context> native_context = isolate->native_context(); |
| 1857 #define INSTALL_NATIVE_FUNCTIONS_FOR(id, descr) \ |
| 1858 InstallExperimentalNatives_##id(isolate, native_context, container); |
| 1859 |
| 1860 HARMONY_INPROGRESS(INSTALL_NATIVE_FUNCTIONS_FOR) |
| 1861 HARMONY_STAGED(INSTALL_NATIVE_FUNCTIONS_FOR) |
| 1862 HARMONY_SHIPPING(INSTALL_NATIVE_FUNCTIONS_FOR) |
| 1863 #undef INSTALL_NATIVE_FUNCTIONS_FOR |
| 1864 } |
| 1865 |
1871 #undef INSTALL_NATIVE | 1866 #undef INSTALL_NATIVE |
1872 | 1867 |
1873 #define EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(id) \ | 1868 #define EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(id) \ |
1874 void Genesis::InitializeGlobal_##id() {} | 1869 void Genesis::InitializeGlobal_##id() {} |
1875 | 1870 |
1876 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_modules) | 1871 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_modules) |
1877 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_array_includes) | 1872 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_array_includes) |
1878 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_arrow_functions) | 1873 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_arrow_functions) |
1879 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_proxies) | 1874 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_proxies) |
1880 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy) | 1875 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy) |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2395 if (!Bootstrapper::CompileBuiltin(isolate(), i)) return false; | 2390 if (!Bootstrapper::CompileBuiltin(isolate(), i)) return false; |
2396 | 2391 |
2397 if (!InstallJSBuiltins(builtins)) return false; | 2392 if (!InstallJSBuiltins(builtins)) return false; |
2398 | 2393 |
2399 for (++i; i < Natives::GetBuiltinsCount(); ++i) { | 2394 for (++i; i < Natives::GetBuiltinsCount(); ++i) { |
2400 if (!Bootstrapper::CompileBuiltin(isolate(), i)) return false; | 2395 if (!Bootstrapper::CompileBuiltin(isolate(), i)) return false; |
2401 } | 2396 } |
2402 | 2397 |
2403 if (!CallUtilsFunction(isolate(), "PostNatives")) return false; | 2398 if (!CallUtilsFunction(isolate(), "PostNatives")) return false; |
2404 | 2399 |
2405 InstallNativeFunctions(); | |
2406 | |
2407 auto function_cache = | 2400 auto function_cache = |
2408 ObjectHashTable::New(isolate(), ApiNatives::kInitialFunctionCacheSize, | 2401 ObjectHashTable::New(isolate(), ApiNatives::kInitialFunctionCacheSize, |
2409 USE_CUSTOM_MINIMUM_CAPACITY); | 2402 USE_CUSTOM_MINIMUM_CAPACITY); |
2410 native_context()->set_function_cache(*function_cache); | 2403 native_context()->set_function_cache(*function_cache); |
2411 | 2404 |
2412 // Store the map for the string prototype after the natives has been compiled | 2405 // Store the map for the string prototype after the natives has been compiled |
2413 // and the String function has been set up. | 2406 // and the String function has been set up. |
2414 Handle<JSFunction> string_function(native_context()->string_function()); | 2407 Handle<JSFunction> string_function(native_context()->string_function()); |
2415 DCHECK(JSObject::cast( | 2408 DCHECK(JSObject::cast( |
2416 string_function->initial_map()->prototype())->HasFastProperties()); | 2409 string_function->initial_map()->prototype())->HasFastProperties()); |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2600 } \ | 2593 } \ |
2601 } | 2594 } |
2602 HARMONY_INPROGRESS(INSTALL_EXPERIMENTAL_NATIVES); | 2595 HARMONY_INPROGRESS(INSTALL_EXPERIMENTAL_NATIVES); |
2603 HARMONY_STAGED(INSTALL_EXPERIMENTAL_NATIVES); | 2596 HARMONY_STAGED(INSTALL_EXPERIMENTAL_NATIVES); |
2604 HARMONY_SHIPPING(INSTALL_EXPERIMENTAL_NATIVES); | 2597 HARMONY_SHIPPING(INSTALL_EXPERIMENTAL_NATIVES); |
2605 #undef INSTALL_EXPERIMENTAL_NATIVES | 2598 #undef INSTALL_EXPERIMENTAL_NATIVES |
2606 } | 2599 } |
2607 | 2600 |
2608 if (!CallUtilsFunction(isolate(), "PostExperimentals")) return false; | 2601 if (!CallUtilsFunction(isolate(), "PostExperimentals")) return false; |
2609 | 2602 |
2610 InstallExperimentalNativeFunctions(); | |
2611 InstallExperimentalBuiltinFunctionIds(); | 2603 InstallExperimentalBuiltinFunctionIds(); |
2612 return true; | 2604 return true; |
2613 } | 2605 } |
2614 | 2606 |
2615 | 2607 |
2616 bool Genesis::InstallExtraNatives() { | 2608 bool Genesis::InstallExtraNatives() { |
2617 for (int i = ExtraNatives::GetDebuggerCount(); | 2609 for (int i = ExtraNatives::GetDebuggerCount(); |
2618 i < ExtraNatives::GetBuiltinsCount(); i++) { | 2610 i < ExtraNatives::GetBuiltinsCount(); i++) { |
2619 if (!Bootstrapper::CompileExtraBuiltin(isolate(), i)) return false; | 2611 if (!Bootstrapper::CompileExtraBuiltin(isolate(), i)) return false; |
2620 } | 2612 } |
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3276 } | 3268 } |
3277 | 3269 |
3278 | 3270 |
3279 // Called when the top-level V8 mutex is destroyed. | 3271 // Called when the top-level V8 mutex is destroyed. |
3280 void Bootstrapper::FreeThreadResources() { | 3272 void Bootstrapper::FreeThreadResources() { |
3281 DCHECK(!IsActive()); | 3273 DCHECK(!IsActive()); |
3282 } | 3274 } |
3283 | 3275 |
3284 } // namespace internal | 3276 } // namespace internal |
3285 } // namespace v8 | 3277 } // namespace v8 |
OLD | NEW |