| 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 223 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 234                                           const char* name, | 234                                           const char* name, | 
| 235                                           ElementsKind elements_kind); | 235                                           ElementsKind elements_kind); | 
| 236   bool InstallNatives(ContextType context_type); | 236   bool InstallNatives(ContextType context_type); | 
| 237 | 237 | 
| 238   void InstallTypedArray(const char* name, ElementsKind elements_kind, | 238   void InstallTypedArray(const char* name, ElementsKind elements_kind, | 
| 239                          Handle<JSFunction>* fun); | 239                          Handle<JSFunction>* fun); | 
| 240   bool InstallExperimentalNatives(); | 240   bool InstallExperimentalNatives(); | 
| 241   bool InstallExtraNatives(); | 241   bool InstallExtraNatives(); | 
| 242   void InstallBuiltinFunctionIds(); | 242   void InstallBuiltinFunctionIds(); | 
| 243   void InstallExperimentalBuiltinFunctionIds(); | 243   void InstallExperimentalBuiltinFunctionIds(); | 
| 244   void InstallJSFunctionResultCaches(); |  | 
| 245   void InitializeNormalizedMapCaches(); | 244   void InitializeNormalizedMapCaches(); | 
| 246 | 245 | 
| 247   enum ExtensionTraversalState { | 246   enum ExtensionTraversalState { | 
| 248     UNVISITED, VISITED, INSTALLED | 247     UNVISITED, VISITED, INSTALLED | 
| 249   }; | 248   }; | 
| 250 | 249 | 
| 251   class ExtensionStates { | 250   class ExtensionStates { | 
| 252    public: | 251    public: | 
| 253     ExtensionStates(); | 252     ExtensionStates(); | 
| 254     ExtensionTraversalState get_state(RegisteredExtension* extension); | 253     ExtensionTraversalState get_state(RegisteredExtension* extension); | 
| (...skipping 2436 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2691           ResolveBuiltinIdHolder(native_context(), builtin.holder_expr); | 2690           ResolveBuiltinIdHolder(native_context(), builtin.holder_expr); | 
| 2692       InstallBuiltinFunctionId(holder, builtin.fun_name, builtin.id); | 2691       InstallBuiltinFunctionId(holder, builtin.fun_name, builtin.id); | 
| 2693     } | 2692     } | 
| 2694   } | 2693   } | 
| 2695 } | 2694 } | 
| 2696 | 2695 | 
| 2697 | 2696 | 
| 2698 #undef INSTALL_BUILTIN_ID | 2697 #undef INSTALL_BUILTIN_ID | 
| 2699 | 2698 | 
| 2700 | 2699 | 
| 2701 // Do not forget to update macros.py with named constant |  | 
| 2702 // of cache id. |  | 
| 2703 #define JSFUNCTION_RESULT_CACHE_LIST(F) \ |  | 
| 2704   F(16, native_context()->regexp_function()) |  | 
| 2705 |  | 
| 2706 |  | 
| 2707 static FixedArray* CreateCache(int size, Handle<JSFunction> factory_function) { |  | 
| 2708   Factory* factory = factory_function->GetIsolate()->factory(); |  | 
| 2709   // Caches are supposed to live for a long time, allocate in old space. |  | 
| 2710   int array_size = JSFunctionResultCache::kEntriesIndex + 2 * size; |  | 
| 2711   // Cannot use cast as object is not fully initialized yet. |  | 
| 2712   JSFunctionResultCache* cache = reinterpret_cast<JSFunctionResultCache*>( |  | 
| 2713       *factory->NewFixedArrayWithHoles(array_size, TENURED)); |  | 
| 2714   cache->set(JSFunctionResultCache::kFactoryIndex, *factory_function); |  | 
| 2715   cache->MakeZeroSize(); |  | 
| 2716   return cache; |  | 
| 2717 } |  | 
| 2718 |  | 
| 2719 |  | 
| 2720 void Genesis::InstallJSFunctionResultCaches() { |  | 
| 2721   const int kNumberOfCaches = 0 + |  | 
| 2722 #define F(size, func) + 1 |  | 
| 2723     JSFUNCTION_RESULT_CACHE_LIST(F) |  | 
| 2724 #undef F |  | 
| 2725   ; |  | 
| 2726 |  | 
| 2727   Handle<FixedArray> caches = |  | 
| 2728       factory()->NewFixedArray(kNumberOfCaches, TENURED); |  | 
| 2729 |  | 
| 2730   int index = 0; |  | 
| 2731 |  | 
| 2732 #define F(size, func) do {                                              \ |  | 
| 2733     FixedArray* cache = CreateCache((size), Handle<JSFunction>(func));  \ |  | 
| 2734     caches->set(index++, cache);                                        \ |  | 
| 2735   } while (false) |  | 
| 2736 |  | 
| 2737   JSFUNCTION_RESULT_CACHE_LIST(F); |  | 
| 2738 |  | 
| 2739 #undef F |  | 
| 2740 |  | 
| 2741   native_context()->set_jsfunction_result_caches(*caches); |  | 
| 2742 } |  | 
| 2743 |  | 
| 2744 |  | 
| 2745 void Genesis::InitializeNormalizedMapCaches() { | 2700 void Genesis::InitializeNormalizedMapCaches() { | 
| 2746   Handle<NormalizedMapCache> cache = NormalizedMapCache::New(isolate()); | 2701   Handle<NormalizedMapCache> cache = NormalizedMapCache::New(isolate()); | 
| 2747   native_context()->set_normalized_map_cache(*cache); | 2702   native_context()->set_normalized_map_cache(*cache); | 
| 2748 } | 2703 } | 
| 2749 | 2704 | 
| 2750 | 2705 | 
| 2751 bool Bootstrapper::InstallExtensions(Handle<Context> native_context, | 2706 bool Bootstrapper::InstallExtensions(Handle<Context> native_context, | 
| 2752                                      v8::ExtensionConfiguration* extensions) { | 2707                                      v8::ExtensionConfiguration* extensions) { | 
| 2753   BootstrapperActive active(this); | 2708   BootstrapperActive active(this); | 
| 2754   SaveContext saved_context(isolate_); | 2709   SaveContext saved_context(isolate_); | 
| (...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3245   } else { | 3200   } else { | 
| 3246     // We get here if there was no context snapshot. | 3201     // We get here if there was no context snapshot. | 
| 3247     CreateRoots(); | 3202     CreateRoots(); | 
| 3248     Handle<JSFunction> empty_function = CreateEmptyFunction(isolate); | 3203     Handle<JSFunction> empty_function = CreateEmptyFunction(isolate); | 
| 3249     CreateStrictModeFunctionMaps(empty_function); | 3204     CreateStrictModeFunctionMaps(empty_function); | 
| 3250     CreateStrongModeFunctionMaps(empty_function); | 3205     CreateStrongModeFunctionMaps(empty_function); | 
| 3251     Handle<GlobalObject> global_object = | 3206     Handle<GlobalObject> global_object = | 
| 3252         CreateNewGlobals(global_proxy_template, global_proxy); | 3207         CreateNewGlobals(global_proxy_template, global_proxy); | 
| 3253     HookUpGlobalProxy(global_object, global_proxy); | 3208     HookUpGlobalProxy(global_object, global_proxy); | 
| 3254     InitializeGlobal(global_object, empty_function, context_type); | 3209     InitializeGlobal(global_object, empty_function, context_type); | 
| 3255     InstallJSFunctionResultCaches(); |  | 
| 3256     InitializeNormalizedMapCaches(); | 3210     InitializeNormalizedMapCaches(); | 
| 3257 | 3211 | 
| 3258     if (!InstallNatives(context_type)) return; | 3212     if (!InstallNatives(context_type)) return; | 
| 3259 | 3213 | 
| 3260     MakeFunctionInstancePrototypeWritable(); | 3214     MakeFunctionInstancePrototypeWritable(); | 
| 3261 | 3215 | 
| 3262     if (context_type == FULL_CONTEXT) { | 3216     if (context_type == FULL_CONTEXT) { | 
| 3263       if (!ConfigureGlobalObjects(global_proxy_template)) return; | 3217       if (!ConfigureGlobalObjects(global_proxy_template)) return; | 
| 3264     } | 3218     } | 
| 3265     isolate->counters()->contexts_created_from_scratch()->Increment(); | 3219     isolate->counters()->contexts_created_from_scratch()->Increment(); | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3307 } | 3261 } | 
| 3308 | 3262 | 
| 3309 | 3263 | 
| 3310 // Called when the top-level V8 mutex is destroyed. | 3264 // Called when the top-level V8 mutex is destroyed. | 
| 3311 void Bootstrapper::FreeThreadResources() { | 3265 void Bootstrapper::FreeThreadResources() { | 
| 3312   DCHECK(!IsActive()); | 3266   DCHECK(!IsActive()); | 
| 3313 } | 3267 } | 
| 3314 | 3268 | 
| 3315 }  // namespace internal | 3269 }  // namespace internal | 
| 3316 }  // namespace v8 | 3270 }  // namespace v8 | 
| OLD | NEW | 
|---|