OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/heap/heap.h" | 5 #include "src/heap/heap.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/ast/context-slot-cache.h" | 9 #include "src/ast/context-slot-cache.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 2249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2260 ALLOCATE_PRIMITIVE_MAP(ODDBALL_TYPE, Oddball::kSize, boolean, | 2260 ALLOCATE_PRIMITIVE_MAP(ODDBALL_TYPE, Oddball::kSize, boolean, |
2261 Context::BOOLEAN_FUNCTION_INDEX); | 2261 Context::BOOLEAN_FUNCTION_INDEX); |
2262 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, uninitialized); | 2262 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, uninitialized); |
2263 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, arguments_marker); | 2263 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, arguments_marker); |
2264 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, no_interceptor_result_sentinel); | 2264 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, no_interceptor_result_sentinel); |
2265 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, exception); | 2265 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, exception); |
2266 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, termination_exception); | 2266 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, termination_exception); |
2267 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, optimized_out); | 2267 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, optimized_out); |
2268 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, stale_register); | 2268 ALLOCATE_MAP(ODDBALL_TYPE, Oddball::kSize, stale_register); |
2269 | 2269 |
| 2270 ALLOCATE_MAP(JS_PROMISE_CAPABILITY_TYPE, JSPromiseCapability::kSize, |
| 2271 js_promise_capability); |
| 2272 |
2270 for (unsigned i = 0; i < arraysize(string_type_table); i++) { | 2273 for (unsigned i = 0; i < arraysize(string_type_table); i++) { |
2271 const StringTypeTable& entry = string_type_table[i]; | 2274 const StringTypeTable& entry = string_type_table[i]; |
2272 { | 2275 { |
2273 AllocationResult allocation = AllocateMap(entry.type, entry.size); | 2276 AllocationResult allocation = AllocateMap(entry.type, entry.size); |
2274 if (!allocation.To(&obj)) return false; | 2277 if (!allocation.To(&obj)) return false; |
2275 } | 2278 } |
2276 Map* map = Map::cast(obj); | 2279 Map* map = Map::cast(obj); |
2277 map->SetConstructorFunctionIndex(Context::STRING_FUNCTION_INDEX); | 2280 map->SetConstructorFunctionIndex(Context::STRING_FUNCTION_INDEX); |
2278 // Mark cons string maps as unstable, because their objects can change | 2281 // Mark cons string maps as unstable, because their objects can change |
2279 // maps during GC. | 2282 // maps during GC. |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2866 set_noscript_shared_function_infos(Smi::kZero); | 2869 set_noscript_shared_function_infos(Smi::kZero); |
2867 | 2870 |
2868 // Initialize context slot cache. | 2871 // Initialize context slot cache. |
2869 isolate_->context_slot_cache()->Clear(); | 2872 isolate_->context_slot_cache()->Clear(); |
2870 | 2873 |
2871 // Initialize descriptor cache. | 2874 // Initialize descriptor cache. |
2872 isolate_->descriptor_lookup_cache()->Clear(); | 2875 isolate_->descriptor_lookup_cache()->Clear(); |
2873 | 2876 |
2874 // Initialize compilation cache. | 2877 // Initialize compilation cache. |
2875 isolate_->compilation_cache()->Clear(); | 2878 isolate_->compilation_cache()->Clear(); |
| 2879 |
| 2880 // Finish creating JSPromiseCapabilityMap |
| 2881 { |
| 2882 // TODO(caitp): This initialization can be removed once PromiseCapability |
| 2883 // object is no longer used by builtins implemented in javascript. |
| 2884 Handle<Map> map = factory->js_promise_capability_map(); |
| 2885 map->set_inobject_properties_or_constructor_function_index(3); |
| 2886 |
| 2887 Map::EnsureDescriptorSlack(map, 3); |
| 2888 |
| 2889 PropertyAttributes attrs = |
| 2890 static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE); |
| 2891 { // promise |
| 2892 Descriptor d = Descriptor::DataField(factory->promise_string(), |
| 2893 JSPromiseCapability::kPromiseIndex, |
| 2894 attrs, Representation::Tagged()); |
| 2895 map->AppendDescriptor(&d); |
| 2896 } |
| 2897 |
| 2898 { // resolve |
| 2899 Descriptor d = Descriptor::DataField(factory->resolve_string(), |
| 2900 JSPromiseCapability::kResolveIndex, |
| 2901 attrs, Representation::Tagged()); |
| 2902 map->AppendDescriptor(&d); |
| 2903 } |
| 2904 |
| 2905 { // reject |
| 2906 Descriptor d = Descriptor::DataField(factory->reject_string(), |
| 2907 JSPromiseCapability::kRejectIndex, |
| 2908 attrs, Representation::Tagged()); |
| 2909 map->AppendDescriptor(&d); |
| 2910 } |
| 2911 |
| 2912 map->set_is_extensible(false); |
| 2913 set_js_promise_capability_map(*map); |
| 2914 } |
2876 } | 2915 } |
2877 | 2916 |
2878 bool Heap::RootCanBeWrittenAfterInitialization(Heap::RootListIndex root_index) { | 2917 bool Heap::RootCanBeWrittenAfterInitialization(Heap::RootListIndex root_index) { |
2879 switch (root_index) { | 2918 switch (root_index) { |
2880 case kNumberStringCacheRootIndex: | 2919 case kNumberStringCacheRootIndex: |
2881 case kInstanceofCacheFunctionRootIndex: | 2920 case kInstanceofCacheFunctionRootIndex: |
2882 case kInstanceofCacheMapRootIndex: | 2921 case kInstanceofCacheMapRootIndex: |
2883 case kInstanceofCacheAnswerRootIndex: | 2922 case kInstanceofCacheAnswerRootIndex: |
2884 case kCodeStubsRootIndex: | 2923 case kCodeStubsRootIndex: |
2885 case kEmptyScriptRootIndex: | 2924 case kEmptyScriptRootIndex: |
(...skipping 3613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6499 } | 6538 } |
6500 | 6539 |
6501 | 6540 |
6502 // static | 6541 // static |
6503 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6542 int Heap::GetStaticVisitorIdForMap(Map* map) { |
6504 return StaticVisitorBase::GetVisitorId(map); | 6543 return StaticVisitorBase::GetVisitorId(map); |
6505 } | 6544 } |
6506 | 6545 |
6507 } // namespace internal | 6546 } // namespace internal |
6508 } // namespace v8 | 6547 } // namespace v8 |
OLD | NEW |