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

Side by Side Diff: src/contexts.h

Issue 1516433005: [contexts] Place the initial JSArray maps on the native context directly. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comment. Created 5 years 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/compiler/js-typed-lowering.cc ('k') | src/crankshaft/hydrogen.cc » ('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 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
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
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
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_
OLDNEW
« no previous file with comments | « src/compiler/js-typed-lowering.cc ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698