Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(670)

Side by Side Diff: src/bootstrapper.cc

Issue 1306993003: Call JS functions via native context instead of js builtins object. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/bootstrapper.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1734 matching lines...) Expand 10 before | Expand all | Expand 10 after
1745 { // Initialize a result array for rempio2 calculation 1745 { // Initialize a result array for rempio2 calculation
1746 const size_t num_elements = 2; 1746 const size_t num_elements = 2;
1747 double* data = 1747 double* data =
1748 SetBuiltinTypedArray<double>(isolate(), builtins, kExternalFloat64Array, 1748 SetBuiltinTypedArray<double>(isolate(), builtins, kExternalFloat64Array,
1749 NULL, num_elements, "rempio2result"); 1749 NULL, num_elements, "rempio2result");
1750 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;
1751 } 1751 }
1752 } 1752 }
1753 1753
1754 1754
1755 #define INSTALL_NATIVE(index, Type, name) \
1756 Handle<Object> name##_native = \
1757 Object::GetProperty(isolate, container, #name, STRICT) \
1758 .ToHandleChecked(); \
1759 DCHECK(name##_native->Is##Type()); \
1760 native_context->set_##name(Type::cast(*name##_native));
1761
1762
1763 void Bootstrapper::ImportNatives(Isolate* isolate, Handle<JSObject> container) {
1764 HandleScope scope(isolate);
1765 Handle<Context> native_context = isolate->native_context();
1766 NATIVE_CONTEXT_IMPORTED_FIELDS(INSTALL_NATIVE)
1767 }
1768
1769
1770 #define EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(id) \
1771 static void InstallExperimentalNatives_##id(Isolate* isolate, \
1772 Handle<Context> native_context, \
1773 Handle<JSObject> container) {}
1774
1775 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_modules)
1776 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_array_includes)
1777 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_regexps)
1778 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_arrow_functions)
1779 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_tostring)
1780 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy)
1781 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy_function)
1782 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sloppy_let)
1783 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_unicode_regexps)
1784 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_rest_parameters)
1785 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_default_parameters)
1786 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_reflect)
1787 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_spreadcalls)
1788 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_destructuring)
1789 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_object)
1790 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_object_observe)
1791 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_spread_arrays)
1792 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_sharedarraybuffer)
1793 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_atomics)
1794 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_new_target)
1795 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_concat_spreadable)
1796 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_simd)
1797
1798
1799 static void InstallExperimentalNatives_harmony_proxies(
1800 Isolate* isolate, Handle<Context> native_context,
1801 Handle<JSObject> container) {
1802 if (FLAG_harmony_proxies) {
1803 NATIVE_CONTEXT_IMPORTED_FIELDS_FOR_PROXY(INSTALL_NATIVE)
1804 }
1805 }
1806
1807
1808 void Bootstrapper::ImportExperimentalNatives(Isolate* isolate,
1809 Handle<JSObject> container) {
1810 HandleScope scope(isolate);
1811 Handle<Context> native_context = isolate->native_context();
1812 #define INSTALL_NATIVE_FUNCTIONS_FOR(id, descr) \
1813 InstallExperimentalNatives_##id(isolate, native_context, container);
1814
1815 HARMONY_INPROGRESS(INSTALL_NATIVE_FUNCTIONS_FOR)
1816 HARMONY_STAGED(INSTALL_NATIVE_FUNCTIONS_FOR)
1817 HARMONY_SHIPPING(INSTALL_NATIVE_FUNCTIONS_FOR)
1818 #undef INSTALL_NATIVE_FUNCTIONS_FOR
1819 }
1820
1821 #undef INSTALL_NATIVE
1822
1823
1824 bool Bootstrapper::InstallJSBuiltins(Isolate* isolate, 1755 bool Bootstrapper::InstallJSBuiltins(Isolate* isolate,
1825 Handle<JSObject> container) { 1756 Handle<JSObject> container) {
1826 HandleScope scope(isolate); 1757 HandleScope scope(isolate);
1827 Handle<JSBuiltinsObject> builtins = isolate->js_builtins_object(); 1758 Handle<JSBuiltinsObject> builtins = isolate->js_builtins_object();
1828 for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) { 1759 for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) {
1829 Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i); 1760 Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i);
1830 Handle<Object> function_object = 1761 Handle<Object> function_object =
1831 Object::GetProperty(isolate, container, Builtins::GetName(id)) 1762 Object::GetProperty(isolate, container, Builtins::GetName(id))
1832 .ToHandleChecked(); 1763 .ToHandleChecked();
1833 DCHECK(function_object->IsJSFunction()); 1764 DCHECK(function_object->IsJSFunction());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1898 1829
1899 void Genesis::InitializeGlobal_harmony_reflect() { 1830 void Genesis::InitializeGlobal_harmony_reflect() {
1900 Handle<JSObject> builtins(native_context()->builtins()); 1831 Handle<JSObject> builtins(native_context()->builtins());
1901 1832
1902 Handle<JSFunction> apply = InstallFunction( 1833 Handle<JSFunction> apply = InstallFunction(
1903 builtins, "$reflectApply", JS_OBJECT_TYPE, JSObject::kHeaderSize, 1834 builtins, "$reflectApply", JS_OBJECT_TYPE, JSObject::kHeaderSize,
1904 MaybeHandle<JSObject>(), Builtins::kReflectApply); 1835 MaybeHandle<JSObject>(), Builtins::kReflectApply);
1905 apply->shared()->set_internal_formal_parameter_count(3); 1836 apply->shared()->set_internal_formal_parameter_count(3);
1906 apply->shared()->set_length(3); 1837 apply->shared()->set_length(3);
1907 1838
1839 native_context()->set_reflect_apply(*apply);
1840
1908 Handle<JSFunction> construct = InstallFunction( 1841 Handle<JSFunction> construct = InstallFunction(
1909 builtins, "$reflectConstruct", JS_OBJECT_TYPE, JSObject::kHeaderSize, 1842 builtins, "$reflectConstruct", JS_OBJECT_TYPE, JSObject::kHeaderSize,
1910 MaybeHandle<JSObject>(), Builtins::kReflectConstruct); 1843 MaybeHandle<JSObject>(), Builtins::kReflectConstruct);
1911 construct->shared()->set_internal_formal_parameter_count(3); 1844 construct->shared()->set_internal_formal_parameter_count(3);
1912 construct->shared()->set_length(2); 1845 construct->shared()->set_length(2);
1913 1846
1847 native_context()->set_reflect_construct(*construct);
1848
1914 if (!FLAG_harmony_reflect) return; 1849 if (!FLAG_harmony_reflect) return;
1915 1850
1916 Handle<JSGlobalObject> global(JSGlobalObject::cast( 1851 Handle<JSGlobalObject> global(JSGlobalObject::cast(
1917 native_context()->global_object())); 1852 native_context()->global_object()));
1918 Handle<String> reflect_string = 1853 Handle<String> reflect_string =
1919 factory()->NewStringFromStaticChars("Reflect"); 1854 factory()->NewStringFromStaticChars("Reflect");
1920 Handle<Object> reflect = 1855 Handle<Object> reflect =
1921 factory()->NewJSObject(isolate()->object_function(), TENURED); 1856 factory()->NewJSObject(isolate()->object_function(), TENURED);
1922 JSObject::AddProperty(global, reflect_string, reflect, DONT_ENUM); 1857 JSObject::AddProperty(global, reflect_string, reflect, DONT_ENUM);
1923 } 1858 }
(...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after
3246 } 3181 }
3247 3182
3248 3183
3249 // Called when the top-level V8 mutex is destroyed. 3184 // Called when the top-level V8 mutex is destroyed.
3250 void Bootstrapper::FreeThreadResources() { 3185 void Bootstrapper::FreeThreadResources() {
3251 DCHECK(!IsActive()); 3186 DCHECK(!IsActive());
3252 } 3187 }
3253 3188
3254 } // namespace internal 3189 } // namespace internal
3255 } // namespace v8 3190 } // namespace v8
OLDNEW
« no previous file with comments | « src/bootstrapper.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698