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

Side by Side Diff: src/bootstrapper.cc

Issue 1296163003: Native context: install JS builtins via container object. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@prologuefirst
Patch Set: rebase Created 5 years, 4 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/runtime.js » ('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 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 static bool InstallRequestedExtensions(Isolate* isolate, 235 static bool InstallRequestedExtensions(Isolate* isolate,
236 v8::ExtensionConfiguration* extensions, 236 v8::ExtensionConfiguration* extensions,
237 ExtensionStates* extension_states); 237 ExtensionStates* extension_states);
238 static bool InstallExtension(Isolate* isolate, 238 static bool InstallExtension(Isolate* isolate,
239 const char* name, 239 const char* name,
240 ExtensionStates* extension_states); 240 ExtensionStates* extension_states);
241 static bool InstallExtension(Isolate* isolate, 241 static bool InstallExtension(Isolate* isolate,
242 v8::RegisteredExtension* current, 242 v8::RegisteredExtension* current,
243 ExtensionStates* extension_states); 243 ExtensionStates* extension_states);
244 static bool InstallSpecialObjects(Handle<Context> native_context); 244 static bool InstallSpecialObjects(Handle<Context> native_context);
245 bool InstallJSBuiltins(Handle<JSBuiltinsObject> builtins);
246 bool ConfigureApiObject(Handle<JSObject> object, 245 bool ConfigureApiObject(Handle<JSObject> object,
247 Handle<ObjectTemplateInfo> object_template); 246 Handle<ObjectTemplateInfo> object_template);
248 bool ConfigureGlobalObjects( 247 bool ConfigureGlobalObjects(
249 v8::Local<v8::ObjectTemplate> global_proxy_template); 248 v8::Local<v8::ObjectTemplate> global_proxy_template);
250 249
251 // Migrates all properties from the 'from' object to the 'to' 250 // Migrates all properties from the 'from' object to the 'to'
252 // object and overrides the prototype in 'to' with the one from 251 // object and overrides the prototype in 'to' with the one from
253 // 'from'. 252 // 'from'.
254 void TransferObject(Handle<JSObject> from, Handle<JSObject> to); 253 void TransferObject(Handle<JSObject> from, Handle<JSObject> to);
255 void TransferNamedProperties(Handle<JSObject> from, Handle<JSObject> to); 254 void TransferNamedProperties(Handle<JSObject> from, Handle<JSObject> to);
(...skipping 1606 matching lines...) Expand 10 before | Expand all | Expand 10 after
1862 InstallExperimentalNatives_##id(isolate, native_context, container); 1861 InstallExperimentalNatives_##id(isolate, native_context, container);
1863 1862
1864 HARMONY_INPROGRESS(INSTALL_NATIVE_FUNCTIONS_FOR) 1863 HARMONY_INPROGRESS(INSTALL_NATIVE_FUNCTIONS_FOR)
1865 HARMONY_STAGED(INSTALL_NATIVE_FUNCTIONS_FOR) 1864 HARMONY_STAGED(INSTALL_NATIVE_FUNCTIONS_FOR)
1866 HARMONY_SHIPPING(INSTALL_NATIVE_FUNCTIONS_FOR) 1865 HARMONY_SHIPPING(INSTALL_NATIVE_FUNCTIONS_FOR)
1867 #undef INSTALL_NATIVE_FUNCTIONS_FOR 1866 #undef INSTALL_NATIVE_FUNCTIONS_FOR
1868 } 1867 }
1869 1868
1870 #undef INSTALL_NATIVE 1869 #undef INSTALL_NATIVE
1871 1870
1871
1872 bool Bootstrapper::InstallJSBuiltins(Isolate* isolate,
1873 Handle<JSObject> container) {
1874 HandleScope scope(isolate);
1875 Handle<JSBuiltinsObject> builtins = isolate->js_builtins_object();
1876 for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) {
1877 Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i);
1878 Handle<Object> function_object =
1879 Object::GetProperty(isolate, container, Builtins::GetName(id))
1880 .ToHandleChecked();
1881 DCHECK(function_object->IsJSFunction());
1882 Handle<JSFunction> function = Handle<JSFunction>::cast(function_object);
1883 builtins->set_javascript_builtin(id, *function);
1884 }
1885 return true;
1886 }
1887
1888
1872 #define EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(id) \ 1889 #define EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(id) \
1873 void Genesis::InitializeGlobal_##id() {} 1890 void Genesis::InitializeGlobal_##id() {}
1874 1891
1875 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_modules) 1892 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_modules)
1876 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_array_includes) 1893 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_array_includes)
1877 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_arrow_functions) 1894 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_arrow_functions)
1878 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_proxies) 1895 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_proxies)
1879 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy) 1896 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy)
1880 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy_function) 1897 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy_function)
1881 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy_let) 1898 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy_let)
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
2091 JSObject::NormalizeProperties(utils, CLEAR_INOBJECT_PROPERTIES, 16, 2108 JSObject::NormalizeProperties(utils, CLEAR_INOBJECT_PROPERTIES, 16,
2092 "utils container for native scripts"); 2109 "utils container for native scripts");
2093 native_context()->set_natives_utils_object(*utils); 2110 native_context()->set_natives_utils_object(*utils);
2094 2111
2095 int builtin_index = Natives::GetDebuggerCount(); 2112 int builtin_index = Natives::GetDebuggerCount();
2096 // Only run prologue.js and runtime.js at this point. 2113 // Only run prologue.js and runtime.js at this point.
2097 DCHECK_EQ(builtin_index, Natives::GetIndex("prologue")); 2114 DCHECK_EQ(builtin_index, Natives::GetIndex("prologue"));
2098 if (!Bootstrapper::CompileBuiltin(isolate(), builtin_index++)) return false; 2115 if (!Bootstrapper::CompileBuiltin(isolate(), builtin_index++)) return false;
2099 DCHECK_EQ(builtin_index, Natives::GetIndex("runtime")); 2116 DCHECK_EQ(builtin_index, Natives::GetIndex("runtime"));
2100 if (!Bootstrapper::CompileBuiltin(isolate(), builtin_index++)) return false; 2117 if (!Bootstrapper::CompileBuiltin(isolate(), builtin_index++)) return false;
2101 if (!InstallJSBuiltins(builtins)) return false;
2102 2118
2103 // A thin context is ready at this point. 2119 // A thin context is ready at this point.
2104 if (context_type == THIN_CONTEXT) return true; 2120 if (context_type == THIN_CONTEXT) return true;
2105 2121
2106 if (FLAG_expose_natives_as != NULL) { 2122 if (FLAG_expose_natives_as != NULL) {
2107 Handle<String> utils_key = factory()->NewStringFromAsciiChecked("utils"); 2123 Handle<String> utils_key = factory()->NewStringFromAsciiChecked("utils");
2108 JSObject::AddProperty(builtins, utils_key, utils, NONE); 2124 JSObject::AddProperty(builtins, utils_key, utils, NONE);
2109 } 2125 }
2110 2126
2111 { // -- S c r i p t 2127 { // -- S c r i p t
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
2901 base::OS::PrintError("Error installing extension '%s'.\n", 2917 base::OS::PrintError("Error installing extension '%s'.\n",
2902 current->extension()->name()); 2918 current->extension()->name());
2903 isolate->clear_pending_exception(); 2919 isolate->clear_pending_exception();
2904 } 2920 }
2905 extension_states->set_state(current, INSTALLED); 2921 extension_states->set_state(current, INSTALLED);
2906 isolate->NotifyExtensionInstalled(); 2922 isolate->NotifyExtensionInstalled();
2907 return result; 2923 return result;
2908 } 2924 }
2909 2925
2910 2926
2911 bool Genesis::InstallJSBuiltins(Handle<JSBuiltinsObject> builtins) {
2912 HandleScope scope(isolate());
2913 for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) {
2914 Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i);
2915 Handle<Object> function_object = Object::GetProperty(
2916 isolate(), builtins, Builtins::GetName(id)).ToHandleChecked();
2917 Handle<JSFunction> function = Handle<JSFunction>::cast(function_object);
2918 builtins->set_javascript_builtin(id, *function);
2919 }
2920 return true;
2921 }
2922
2923
2924 bool Genesis::ConfigureGlobalObjects( 2927 bool Genesis::ConfigureGlobalObjects(
2925 v8::Local<v8::ObjectTemplate> global_proxy_template) { 2928 v8::Local<v8::ObjectTemplate> global_proxy_template) {
2926 Handle<JSObject> global_proxy( 2929 Handle<JSObject> global_proxy(
2927 JSObject::cast(native_context()->global_proxy())); 2930 JSObject::cast(native_context()->global_proxy()));
2928 Handle<JSObject> global_object( 2931 Handle<JSObject> global_object(
2929 JSObject::cast(native_context()->global_object())); 2932 JSObject::cast(native_context()->global_object()));
2930 2933
2931 if (!global_proxy_template.IsEmpty()) { 2934 if (!global_proxy_template.IsEmpty()) {
2932 // Configure the global proxy object. 2935 // Configure the global proxy object.
2933 Handle<ObjectTemplateInfo> global_proxy_data = 2936 Handle<ObjectTemplateInfo> global_proxy_data =
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
3278 } 3281 }
3279 3282
3280 3283
3281 // Called when the top-level V8 mutex is destroyed. 3284 // Called when the top-level V8 mutex is destroyed.
3282 void Bootstrapper::FreeThreadResources() { 3285 void Bootstrapper::FreeThreadResources() {
3283 DCHECK(!IsActive()); 3286 DCHECK(!IsActive());
3284 } 3287 }
3285 3288
3286 } // namespace internal 3289 } // namespace internal
3287 } // namespace v8 3290 } // namespace v8
OLDNEW
« no previous file with comments | « src/bootstrapper.h ('k') | src/runtime.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698