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

Side by Side Diff: src/objects-inl.h

Issue 768633002: Add infrastructure to keep track of references to prototypes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: use WeakCellForMap() when appropriate Created 6 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/objects.cc ('k') | src/runtime/runtime-classes.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 // Review notes: 5 // Review notes:
6 // 6 //
7 // - The use of macros in these inline functions may seem superfluous 7 // - The use of macros in these inline functions may seem superfluous
8 // but it is absolutely needed to make sure gcc generates optimal 8 // but it is absolutely needed to make sure gcc generates optimal
9 // code. gcc is not happy when attempting to inline too deep. 9 // code. gcc is not happy when attempting to inline too deep.
10 // 10 //
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 TYPE_CHECKER(JSSet, JS_SET_TYPE) 700 TYPE_CHECKER(JSSet, JS_SET_TYPE)
701 TYPE_CHECKER(JSMap, JS_MAP_TYPE) 701 TYPE_CHECKER(JSMap, JS_MAP_TYPE)
702 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) 702 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE)
703 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE) 703 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE)
704 TYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE) 704 TYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE)
705 TYPE_CHECKER(JSWeakSet, JS_WEAK_SET_TYPE) 705 TYPE_CHECKER(JSWeakSet, JS_WEAK_SET_TYPE)
706 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) 706 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE)
707 TYPE_CHECKER(Map, MAP_TYPE) 707 TYPE_CHECKER(Map, MAP_TYPE)
708 TYPE_CHECKER(FixedArray, FIXED_ARRAY_TYPE) 708 TYPE_CHECKER(FixedArray, FIXED_ARRAY_TYPE)
709 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) 709 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE)
710 TYPE_CHECKER(WeakFixedArray, FIXED_ARRAY_TYPE)
710 TYPE_CHECKER(ConstantPoolArray, CONSTANT_POOL_ARRAY_TYPE) 711 TYPE_CHECKER(ConstantPoolArray, CONSTANT_POOL_ARRAY_TYPE)
711 712
712 713
713 bool Object::IsJSWeakCollection() const { 714 bool Object::IsJSWeakCollection() const {
714 return IsJSWeakMap() || IsJSWeakSet(); 715 return IsJSWeakMap() || IsJSWeakSet();
715 } 716 }
716 717
717 718
718 bool Object::IsDescriptorArray() const { 719 bool Object::IsDescriptorArray() const {
719 return IsFixedArray(); 720 return IsFixedArray();
(...skipping 1641 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 } 2362 }
2362 2363
2363 2364
2364 void FixedDoubleArray::FillWithHoles(int from, int to) { 2365 void FixedDoubleArray::FillWithHoles(int from, int to) {
2365 for (int i = from; i < to; i++) { 2366 for (int i = from; i < to; i++) {
2366 set_the_hole(i); 2367 set_the_hole(i);
2367 } 2368 }
2368 } 2369 }
2369 2370
2370 2371
2372 Object* WeakFixedArray::Get(int index) const {
2373 Object* raw = FixedArray::cast(this)->get(index + kFirstIndex);
2374 if (raw->IsSmi()) return raw;
2375 return WeakCell::cast(raw)->value();
2376 }
2377
2378
2379 bool WeakFixedArray::IsEmptySlot(int index) const {
2380 DCHECK(index < Length());
2381 return Get(index)->IsSmi();
2382 }
2383
2384
2385 void WeakFixedArray::clear(int index) {
2386 FixedArray::cast(this)->set(index + kFirstIndex, Smi::FromInt(0));
2387 }
2388
2389
2390 int WeakFixedArray::Length() const {
2391 return FixedArray::cast(this)->length() - kFirstIndex;
2392 }
2393
2394
2395 int WeakFixedArray::last_used_index() const {
2396 return Smi::cast(FixedArray::cast(this)->get(kLastUsedIndexIndex))->value();
2397 }
2398
2399
2400 void WeakFixedArray::set_last_used_index(int index) {
2401 FixedArray::cast(this)->set(kLastUsedIndexIndex, Smi::FromInt(index));
2402 }
2403
2404
2371 void ConstantPoolArray::NumberOfEntries::increment(Type type) { 2405 void ConstantPoolArray::NumberOfEntries::increment(Type type) {
2372 DCHECK(type < NUMBER_OF_TYPES); 2406 DCHECK(type < NUMBER_OF_TYPES);
2373 element_counts_[type]++; 2407 element_counts_[type]++;
2374 } 2408 }
2375 2409
2376 2410
2377 int ConstantPoolArray::NumberOfEntries::equals( 2411 int ConstantPoolArray::NumberOfEntries::equals(
2378 const ConstantPoolArray::NumberOfEntries& other) const { 2412 const ConstantPoolArray::NumberOfEntries& other) const {
2379 for (int i = 0; i < NUMBER_OF_TYPES; i++) { 2413 for (int i = 0; i < NUMBER_OF_TYPES; i++) {
2380 if (element_counts_[i] != other.element_counts_[i]) return false; 2414 if (element_counts_[i] != other.element_counts_[i]) return false;
(...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after
3357 CAST_ACCESSOR(SeqTwoByteString) 3391 CAST_ACCESSOR(SeqTwoByteString)
3358 CAST_ACCESSOR(SharedFunctionInfo) 3392 CAST_ACCESSOR(SharedFunctionInfo)
3359 CAST_ACCESSOR(SlicedString) 3393 CAST_ACCESSOR(SlicedString)
3360 CAST_ACCESSOR(Smi) 3394 CAST_ACCESSOR(Smi)
3361 CAST_ACCESSOR(String) 3395 CAST_ACCESSOR(String)
3362 CAST_ACCESSOR(StringTable) 3396 CAST_ACCESSOR(StringTable)
3363 CAST_ACCESSOR(Struct) 3397 CAST_ACCESSOR(Struct)
3364 CAST_ACCESSOR(Symbol) 3398 CAST_ACCESSOR(Symbol)
3365 CAST_ACCESSOR(UnseededNumberDictionary) 3399 CAST_ACCESSOR(UnseededNumberDictionary)
3366 CAST_ACCESSOR(WeakCell) 3400 CAST_ACCESSOR(WeakCell)
3401 CAST_ACCESSOR(WeakFixedArray)
3367 CAST_ACCESSOR(WeakHashTable) 3402 CAST_ACCESSOR(WeakHashTable)
3368 3403
3369 3404
3370 template <class Traits> 3405 template <class Traits>
3371 FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) { 3406 FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) {
3372 SLOW_DCHECK(object->IsHeapObject() && 3407 SLOW_DCHECK(object->IsHeapObject() &&
3373 HeapObject::cast(object)->map()->instance_type() == 3408 HeapObject::cast(object)->map()->instance_type() ==
3374 Traits::kInstanceType); 3409 Traits::kInstanceType);
3375 return reinterpret_cast<FixedTypedArray<Traits>*>(object); 3410 return reinterpret_cast<FixedTypedArray<Traits>*>(object);
3376 } 3411 }
(...skipping 4141 matching lines...) Expand 10 before | Expand all | Expand 10 after
7518 #undef READ_SHORT_FIELD 7553 #undef READ_SHORT_FIELD
7519 #undef WRITE_SHORT_FIELD 7554 #undef WRITE_SHORT_FIELD
7520 #undef READ_BYTE_FIELD 7555 #undef READ_BYTE_FIELD
7521 #undef WRITE_BYTE_FIELD 7556 #undef WRITE_BYTE_FIELD
7522 #undef NOBARRIER_READ_BYTE_FIELD 7557 #undef NOBARRIER_READ_BYTE_FIELD
7523 #undef NOBARRIER_WRITE_BYTE_FIELD 7558 #undef NOBARRIER_WRITE_BYTE_FIELD
7524 7559
7525 } } // namespace v8::internal 7560 } } // namespace v8::internal
7526 7561
7527 #endif // V8_OBJECTS_INL_H_ 7562 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | src/runtime/runtime-classes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698