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

Side by Side Diff: src/bootstrapper.cc

Issue 1294803004: Native context: run prologue.js before runtime.js (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: also change BUILD.gn 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 | « BUILD.gn ('k') | src/prologue.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 2068 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 Handle<JSFunction> bridge = factory()->NewFunction(factory()->empty_string()); 2079 Handle<JSFunction> bridge = factory()->NewFunction(factory()->empty_string());
2080 DCHECK(bridge->context() == *isolate()->native_context()); 2080 DCHECK(bridge->context() == *isolate()->native_context());
2081 2081
2082 // Allocate the builtins context. 2082 // Allocate the builtins context.
2083 Handle<Context> context = 2083 Handle<Context> context =
2084 factory()->NewFunctionContext(Context::MIN_CONTEXT_SLOTS, bridge); 2084 factory()->NewFunctionContext(Context::MIN_CONTEXT_SLOTS, bridge);
2085 context->set_global_object(*builtins); // override builtins global object 2085 context->set_global_object(*builtins); // override builtins global object
2086 2086
2087 native_context()->set_runtime_context(*context); 2087 native_context()->set_runtime_context(*context);
2088 2088
2089 if (context_type == THIN_CONTEXT) {
2090 int js_builtins_script_index = Natives::GetDebuggerCount();
2091 if (!Bootstrapper::CompileBuiltin(isolate(), js_builtins_script_index))
2092 return false;
2093 if (!InstallJSBuiltins(builtins)) return false;
2094 return true;
2095 }
2096
2097 // Set up the utils object as shared container between native scripts. 2089 // Set up the utils object as shared container between native scripts.
2098 Handle<JSObject> utils = factory()->NewJSObject(isolate()->object_function()); 2090 Handle<JSObject> utils = factory()->NewJSObject(isolate()->object_function());
2099 JSObject::NormalizeProperties(utils, CLEAR_INOBJECT_PROPERTIES, 16, 2091 JSObject::NormalizeProperties(utils, CLEAR_INOBJECT_PROPERTIES, 16,
2100 "utils container for native scripts"); 2092 "utils container for native scripts");
2101 native_context()->set_natives_utils_object(*utils); 2093 native_context()->set_natives_utils_object(*utils);
2102 2094
2095 int builtin_index = Natives::GetDebuggerCount();
2096 // Only run prologue.js and runtime.js at this point.
2097 DCHECK_EQ(builtin_index, Natives::GetIndex("prologue"));
2098 if (!Bootstrapper::CompileBuiltin(isolate(), builtin_index++)) return false;
2099 DCHECK_EQ(builtin_index, Natives::GetIndex("runtime"));
2100 if (!Bootstrapper::CompileBuiltin(isolate(), builtin_index++)) return false;
2101 if (!InstallJSBuiltins(builtins)) return false;
2102
2103 // A thin context is ready at this point.
2104 if (context_type == THIN_CONTEXT) return true;
2105
2103 if (FLAG_expose_natives_as != NULL) { 2106 if (FLAG_expose_natives_as != NULL) {
2104 Handle<String> utils_key = factory()->NewStringFromAsciiChecked("utils"); 2107 Handle<String> utils_key = factory()->NewStringFromAsciiChecked("utils");
2105 JSObject::AddProperty(builtins, utils_key, utils, NONE); 2108 JSObject::AddProperty(builtins, utils_key, utils, NONE);
2106 } 2109 }
2107 2110
2108 { // -- S c r i p t 2111 { // -- S c r i p t
2109 // Builtin functions for Script. 2112 // Builtin functions for Script.
2110 Handle<JSFunction> script_fun = InstallFunction( 2113 Handle<JSFunction> script_fun = InstallFunction(
2111 builtins, "Script", JS_VALUE_TYPE, JSValue::kSize, 2114 builtins, "Script", JS_VALUE_TYPE, JSValue::kSize,
2112 isolate()->initial_object_prototype(), Builtins::kIllegal); 2115 isolate()->initial_object_prototype(), Builtins::kIllegal);
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
2378 { 2381 {
2379 static const PropertyAttributes attributes = 2382 static const PropertyAttributes attributes =
2380 static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE); 2383 static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE);
2381 #define INSTALL_PUBLIC_SYMBOL(name, varname, description) \ 2384 #define INSTALL_PUBLIC_SYMBOL(name, varname, description) \
2382 Handle<String> varname = factory()->NewStringFromStaticChars(#varname); \ 2385 Handle<String> varname = factory()->NewStringFromStaticChars(#varname); \
2383 JSObject::AddProperty(builtins, varname, factory()->name(), attributes); 2386 JSObject::AddProperty(builtins, varname, factory()->name(), attributes);
2384 PUBLIC_SYMBOL_LIST(INSTALL_PUBLIC_SYMBOL) 2387 PUBLIC_SYMBOL_LIST(INSTALL_PUBLIC_SYMBOL)
2385 #undef INSTALL_PUBLIC_SYMBOL 2388 #undef INSTALL_PUBLIC_SYMBOL
2386 } 2389 }
2387 2390
2388 int i = Natives::GetDebuggerCount(); 2391 // Run the rest of the native scripts.
2389 if (!Bootstrapper::CompileBuiltin(isolate(), i)) return false; 2392 while (builtin_index < Natives::GetBuiltinsCount()) {
2390 2393 if (!Bootstrapper::CompileBuiltin(isolate(), builtin_index++)) return false;
2391 if (!InstallJSBuiltins(builtins)) return false;
2392
2393 for (++i; i < Natives::GetBuiltinsCount(); ++i) {
2394 if (!Bootstrapper::CompileBuiltin(isolate(), i)) return false;
2395 } 2394 }
2396 2395
2397 if (!CallUtilsFunction(isolate(), "PostNatives")) return false; 2396 if (!CallUtilsFunction(isolate(), "PostNatives")) return false;
2398 2397
2399 auto function_cache = 2398 auto function_cache =
2400 ObjectHashTable::New(isolate(), ApiNatives::kInitialFunctionCacheSize, 2399 ObjectHashTable::New(isolate(), ApiNatives::kInitialFunctionCacheSize,
2401 USE_CUSTOM_MINIMUM_CAPACITY); 2400 USE_CUSTOM_MINIMUM_CAPACITY);
2402 native_context()->set_function_cache(*function_cache); 2401 native_context()->set_function_cache(*function_cache);
2403 2402
2404 // Store the map for the string prototype after the natives has been compiled 2403 // Store the map for the string prototype after the natives has been compiled
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
3279 } 3278 }
3280 3279
3281 3280
3282 // Called when the top-level V8 mutex is destroyed. 3281 // Called when the top-level V8 mutex is destroyed.
3283 void Bootstrapper::FreeThreadResources() { 3282 void Bootstrapper::FreeThreadResources() {
3284 DCHECK(!IsActive()); 3283 DCHECK(!IsActive());
3285 } 3284 }
3286 3285
3287 } // namespace internal 3286 } // namespace internal
3288 } // namespace v8 3287 } // namespace v8
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/prologue.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698