| 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 #ifndef V8_CONTEXTS_H_ | 5 #ifndef V8_CONTEXTS_H_ |
| 6 #define V8_CONTEXTS_H_ | 6 #define V8_CONTEXTS_H_ |
| 7 | 7 |
| 8 #include "src/heap/heap.h" | 8 #include "src/heap/heap.h" |
| 9 #include "src/objects.h" | 9 #include "src/objects.h" |
| 10 | 10 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 V(INITIAL_ARRAY_PROTOTYPE_INDEX, JSObject, initial_array_prototype) \ | 194 V(INITIAL_ARRAY_PROTOTYPE_INDEX, JSObject, initial_array_prototype) \ |
| 195 V(INITIAL_OBJECT_PROTOTYPE_INDEX, JSObject, initial_object_prototype) \ | 195 V(INITIAL_OBJECT_PROTOTYPE_INDEX, JSObject, initial_object_prototype) \ |
| 196 V(INT16_ARRAY_FUN_INDEX, JSFunction, int16_array_fun) \ | 196 V(INT16_ARRAY_FUN_INDEX, JSFunction, int16_array_fun) \ |
| 197 V(INT16X8_FUNCTION_INDEX, JSFunction, int16x8_function) \ | 197 V(INT16X8_FUNCTION_INDEX, JSFunction, int16x8_function) \ |
| 198 V(INT32_ARRAY_FUN_INDEX, JSFunction, int32_array_fun) \ | 198 V(INT32_ARRAY_FUN_INDEX, JSFunction, int32_array_fun) \ |
| 199 V(INT32X4_FUNCTION_INDEX, JSFunction, int32x4_function) \ | 199 V(INT32X4_FUNCTION_INDEX, JSFunction, int32x4_function) \ |
| 200 V(INT8_ARRAY_FUN_INDEX, JSFunction, int8_array_fun) \ | 200 V(INT8_ARRAY_FUN_INDEX, JSFunction, int8_array_fun) \ |
| 201 V(INT8X16_FUNCTION_INDEX, JSFunction, int8x16_function) \ | 201 V(INT8X16_FUNCTION_INDEX, JSFunction, int8x16_function) \ |
| 202 V(INTERNAL_ARRAY_FUNCTION_INDEX, JSFunction, internal_array_function) \ | 202 V(INTERNAL_ARRAY_FUNCTION_INDEX, JSFunction, internal_array_function) \ |
| 203 V(ITERATOR_RESULT_MAP_INDEX, Map, iterator_result_map) \ | 203 V(ITERATOR_RESULT_MAP_INDEX, Map, iterator_result_map) \ |
| 204 V(JS_ARRAY_MAPS_INDEX, Object, js_array_maps) \ | 204 V(JS_ARRAY_FAST_SMI_ELEMENTS_MAP_INDEX, Map, \ |
| 205 V(JS_ARRAY_STRONG_MAPS_INDEX, Object, js_array_strong_maps) \ | 205 js_array_fast_smi_elements_map_index) \ |
| 206 V(JS_ARRAY_FAST_HOLEY_SMI_ELEMENTS_MAP_INDEX, Map, \ |
| 207 js_array_fast_holey_smi_elements_map_index) \ |
| 208 V(JS_ARRAY_FAST_ELEMENTS_MAP_INDEX, Map, js_array_fast_elements_map_index) \ |
| 209 V(JS_ARRAY_FAST_HOLEY_ELEMENTS_MAP_INDEX, Map, \ |
| 210 js_array_fast_holey_elements_map_index) \ |
| 211 V(JS_ARRAY_FAST_DOUBLE_ELEMENTS_MAP_INDEX, Map, \ |
| 212 js_array_fast_double_elements_map_index) \ |
| 213 V(JS_ARRAY_FAST_HOLEY_DOUBLE_ELEMENTS_MAP_INDEX, Map, \ |
| 214 js_array_fast_holey_double_elements_map_index) \ |
| 215 V(JS_ARRAY_FAST_SMI_ELEMENTS_STRONG_MAP_INDEX, Map, \ |
| 216 js_array_fast_smi_elements_strong_map_index) \ |
| 217 V(JS_ARRAY_FAST_HOLEY_SMI_ELEMENTS_STRONG_MAP_INDEX, Map, \ |
| 218 js_array_fast_holey_smi_elements_strong_map_index) \ |
| 219 V(JS_ARRAY_FAST_ELEMENTS_STRONG_MAP_INDEX, Map, \ |
| 220 js_array_fast_elements_strong_map_index) \ |
| 221 V(JS_ARRAY_FAST_HOLEY_ELEMENTS_STRONG_MAP_INDEX, Map, \ |
| 222 js_array_fast_holey_elements_strong_map_index) \ |
| 223 V(JS_ARRAY_FAST_DOUBLE_ELEMENTS_STRONG_MAP_INDEX, Map, \ |
| 224 js_array_fast_double_elements_strong_map_index) \ |
| 225 V(JS_ARRAY_FAST_HOLEY_DOUBLE_ELEMENTS_STRONG_MAP_INDEX, Map, \ |
| 226 js_array_fast_holey_double_elements_strong_map_index) \ |
| 206 V(JS_MAP_FUN_INDEX, JSFunction, js_map_fun) \ | 227 V(JS_MAP_FUN_INDEX, JSFunction, js_map_fun) \ |
| 207 V(JS_MAP_MAP_INDEX, Map, js_map_map) \ | 228 V(JS_MAP_MAP_INDEX, Map, js_map_map) \ |
| 208 V(JS_OBJECT_STRONG_MAP_INDEX, Map, js_object_strong_map) \ | 229 V(JS_OBJECT_STRONG_MAP_INDEX, Map, js_object_strong_map) \ |
| 209 V(JS_SET_FUN_INDEX, JSFunction, js_set_fun) \ | 230 V(JS_SET_FUN_INDEX, JSFunction, js_set_fun) \ |
| 210 V(JS_SET_MAP_INDEX, Map, js_set_map) \ | 231 V(JS_SET_MAP_INDEX, Map, js_set_map) \ |
| 211 V(JS_WEAK_MAP_FUN_INDEX, JSFunction, js_weak_map_fun) \ | 232 V(JS_WEAK_MAP_FUN_INDEX, JSFunction, js_weak_map_fun) \ |
| 212 V(JS_WEAK_SET_FUN_INDEX, JSFunction, js_weak_set_fun) \ | 233 V(JS_WEAK_SET_FUN_INDEX, JSFunction, js_weak_set_fun) \ |
| 213 V(MAP_CACHE_INDEX, Object, map_cache) \ | 234 V(MAP_CACHE_INDEX, Object, map_cache) \ |
| 214 V(MAP_ITERATOR_MAP_INDEX, Map, map_iterator_map) \ | 235 V(MAP_ITERATOR_MAP_INDEX, Map, map_iterator_map) \ |
| 215 V(STRING_ITERATOR_MAP_INDEX, Map, string_iterator_map) \ | 236 V(STRING_ITERATOR_MAP_INDEX, Map, string_iterator_map) \ |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 // Properties from here are treated as weak references by the full GC. | 408 // Properties from here are treated as weak references by the full GC. |
| 388 // Scavenge treats them as strong references. | 409 // Scavenge treats them as strong references. |
| 389 OPTIMIZED_FUNCTIONS_LIST, // Weak. | 410 OPTIMIZED_FUNCTIONS_LIST, // Weak. |
| 390 OPTIMIZED_CODE_LIST, // Weak. | 411 OPTIMIZED_CODE_LIST, // Weak. |
| 391 DEOPTIMIZED_CODE_LIST, // Weak. | 412 DEOPTIMIZED_CODE_LIST, // Weak. |
| 392 NEXT_CONTEXT_LINK, // Weak. | 413 NEXT_CONTEXT_LINK, // Weak. |
| 393 | 414 |
| 394 // Total number of slots. | 415 // Total number of slots. |
| 395 NATIVE_CONTEXT_SLOTS, | 416 NATIVE_CONTEXT_SLOTS, |
| 396 FIRST_WEAK_SLOT = OPTIMIZED_FUNCTIONS_LIST, | 417 FIRST_WEAK_SLOT = OPTIMIZED_FUNCTIONS_LIST, |
| 418 FIRST_JS_ARRAY_MAP_SLOT = JS_ARRAY_FAST_SMI_ELEMENTS_MAP_INDEX, |
| 419 FIRST_JS_ARRAY_STRONG_MAP_SLOT = |
| 420 JS_ARRAY_FAST_SMI_ELEMENTS_STRONG_MAP_INDEX, |
| 397 | 421 |
| 398 MIN_CONTEXT_SLOTS = GLOBAL_PROXY_INDEX, | 422 MIN_CONTEXT_SLOTS = GLOBAL_PROXY_INDEX, |
| 399 // This slot holds the thrown value in catch contexts. | 423 // This slot holds the thrown value in catch contexts. |
| 400 THROWN_OBJECT_INDEX = MIN_CONTEXT_SLOTS, | 424 THROWN_OBJECT_INDEX = MIN_CONTEXT_SLOTS, |
| 401 }; | 425 }; |
| 402 | 426 |
| 403 void IncrementErrorsThrown(); | 427 void IncrementErrorsThrown(); |
| 404 int GetErrorsThrown(); | 428 int GetErrorsThrown(); |
| 405 | 429 |
| 406 // Direct slot access. | 430 // Direct slot access. |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 return is_strong(language_mode) | 555 return is_strong(language_mode) |
| 532 ? STRONG_FUNCTION_MAP_INDEX | 556 ? STRONG_FUNCTION_MAP_INDEX |
| 533 : STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX; | 557 : STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX; |
| 534 } | 558 } |
| 535 | 559 |
| 536 return is_strong(language_mode) ? STRONG_FUNCTION_MAP_INDEX : | 560 return is_strong(language_mode) ? STRONG_FUNCTION_MAP_INDEX : |
| 537 is_strict(language_mode) ? STRICT_FUNCTION_MAP_INDEX | 561 is_strict(language_mode) ? STRICT_FUNCTION_MAP_INDEX |
| 538 : SLOPPY_FUNCTION_MAP_INDEX; | 562 : SLOPPY_FUNCTION_MAP_INDEX; |
| 539 } | 563 } |
| 540 | 564 |
| 565 static int ArrayMapIndex(ElementsKind elements_kind, |
| 566 Strength strength = Strength::WEAK) { |
| 567 DCHECK(IsFastElementsKind(elements_kind)); |
| 568 return elements_kind + (is_strong(strength) ? FIRST_JS_ARRAY_STRONG_MAP_SLOT |
| 569 : FIRST_JS_ARRAY_MAP_SLOT); |
| 570 } |
| 571 |
| 541 static const int kSize = kHeaderSize + NATIVE_CONTEXT_SLOTS * kPointerSize; | 572 static const int kSize = kHeaderSize + NATIVE_CONTEXT_SLOTS * kPointerSize; |
| 542 static const int kNotFound = -1; | 573 static const int kNotFound = -1; |
| 543 | 574 |
| 544 // GC support. | 575 // GC support. |
| 545 typedef FixedBodyDescriptor< | 576 typedef FixedBodyDescriptor< |
| 546 kHeaderSize, kSize, kSize> ScavengeBodyDescriptor; | 577 kHeaderSize, kSize, kSize> ScavengeBodyDescriptor; |
| 547 | 578 |
| 548 typedef FixedBodyDescriptor< | 579 typedef FixedBodyDescriptor< |
| 549 kHeaderSize, | 580 kHeaderSize, |
| 550 kHeaderSize + FIRST_WEAK_SLOT * kPointerSize, | 581 kHeaderSize + FIRST_WEAK_SLOT * kPointerSize, |
| 551 kSize> MarkCompactBodyDescriptor; | 582 kSize> MarkCompactBodyDescriptor; |
| 552 | 583 |
| 553 private: | 584 private: |
| 554 #ifdef DEBUG | 585 #ifdef DEBUG |
| 555 // Bootstrapping-aware type checks. | 586 // Bootstrapping-aware type checks. |
| 556 static bool IsBootstrappingOrNativeContext(Isolate* isolate, Object* object); | 587 static bool IsBootstrappingOrNativeContext(Isolate* isolate, Object* object); |
| 557 static bool IsBootstrappingOrValidParentContext(Object* object, Context* kid); | 588 static bool IsBootstrappingOrValidParentContext(Object* object, Context* kid); |
| 558 #endif | 589 #endif |
| 559 | 590 |
| 560 STATIC_ASSERT(kHeaderSize == Internals::kContextHeaderSize); | 591 STATIC_ASSERT(kHeaderSize == Internals::kContextHeaderSize); |
| 561 STATIC_ASSERT(EMBEDDER_DATA_INDEX == Internals::kContextEmbedderDataIndex); | 592 STATIC_ASSERT(EMBEDDER_DATA_INDEX == Internals::kContextEmbedderDataIndex); |
| 562 }; | 593 }; |
| 563 | 594 |
| 564 } // namespace internal | 595 } // namespace internal |
| 565 } // namespace v8 | 596 } // namespace v8 |
| 566 | 597 |
| 567 #endif // V8_CONTEXTS_H_ | 598 #endif // V8_CONTEXTS_H_ |
| OLD | NEW |