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

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

Issue 101413006: Implement in-heap backing store for typed arrays. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Platform ports Created 6 years, 11 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 23 matching lines...) Expand all
34 34
35 #ifndef V8_OBJECTS_INL_H_ 35 #ifndef V8_OBJECTS_INL_H_
36 #define V8_OBJECTS_INL_H_ 36 #define V8_OBJECTS_INL_H_
37 37
38 #include "elements.h" 38 #include "elements.h"
39 #include "objects.h" 39 #include "objects.h"
40 #include "contexts.h" 40 #include "contexts.h"
41 #include "conversions-inl.h" 41 #include "conversions-inl.h"
42 #include "heap.h" 42 #include "heap.h"
43 #include "isolate.h" 43 #include "isolate.h"
44 #include "heap-inl.h"
44 #include "property.h" 45 #include "property.h"
45 #include "spaces.h" 46 #include "spaces.h"
46 #include "store-buffer.h" 47 #include "store-buffer.h"
47 #include "v8memory.h" 48 #include "v8memory.h"
48 #include "factory.h" 49 #include "factory.h"
49 #include "incremental-marking.h" 50 #include "incremental-marking.h"
50 #include "transitions-inl.h" 51 #include "transitions-inl.h"
51 52
52 namespace v8 { 53 namespace v8 {
53 namespace internal { 54 namespace internal {
(...skipping 24 matching lines...) Expand all
78 } 79 }
79 80
80 81
81 #define CAST_ACCESSOR(type) \ 82 #define CAST_ACCESSOR(type) \
82 type* type::cast(Object* object) { \ 83 type* type::cast(Object* object) { \
83 SLOW_ASSERT(object->Is##type()); \ 84 SLOW_ASSERT(object->Is##type()); \
84 return reinterpret_cast<type*>(object); \ 85 return reinterpret_cast<type*>(object); \
85 } 86 }
86 87
87 88
89 #define FIXED_TYPED_ARRAY_CAST_ACCESSOR(type) \
90 template<> \
91 type* type::cast(Object* object) { \
92 SLOW_ASSERT(object->Is##type()); \
93 return reinterpret_cast<type*>(object); \
94 }
95
88 #define INT_ACCESSORS(holder, name, offset) \ 96 #define INT_ACCESSORS(holder, name, offset) \
89 int holder::name() { return READ_INT_FIELD(this, offset); } \ 97 int holder::name() { return READ_INT_FIELD(this, offset); } \
90 void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); } 98 void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); }
91 99
92 100
93 #define ACCESSORS(holder, name, type, offset) \ 101 #define ACCESSORS(holder, name, type, offset) \
94 type* holder::name() { return type::cast(READ_FIELD(this, offset)); } \ 102 type* holder::name() { return type::cast(READ_FIELD(this, offset)); } \
95 void holder::set_##name(type* value, WriteBarrierMode mode) { \ 103 void holder::set_##name(type* value, WriteBarrierMode mode) { \
96 WRITE_FIELD(this, offset, value); \ 104 WRITE_FIELD(this, offset, value); \
97 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \ 105 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \
(...skipping 28 matching lines...) Expand all
126 #define BOOL_ACCESSORS(holder, field, name, offset) \ 134 #define BOOL_ACCESSORS(holder, field, name, offset) \
127 bool holder::name() { \ 135 bool holder::name() { \
128 return BooleanBit::get(field(), offset); \ 136 return BooleanBit::get(field(), offset); \
129 } \ 137 } \
130 void holder::set_##name(bool value) { \ 138 void holder::set_##name(bool value) { \
131 set_##field(BooleanBit::set(field(), offset, value)); \ 139 set_##field(BooleanBit::set(field(), offset, value)); \
132 } 140 }
133 141
134 142
135 bool Object::IsFixedArrayBase() { 143 bool Object::IsFixedArrayBase() {
136 return IsFixedArray() || IsFixedDoubleArray() || IsConstantPoolArray(); 144 return IsFixedArray() || IsFixedDoubleArray() || IsConstantPoolArray() ||
145 IsFixedTypedArrayBase() || IsExternalArray();
137 } 146 }
138 147
139 148
140 // External objects are not extensible, so the map check is enough. 149 // External objects are not extensible, so the map check is enough.
141 bool Object::IsExternal() { 150 bool Object::IsExternal() {
142 return Object::IsHeapObject() && 151 return Object::IsHeapObject() &&
143 HeapObject::cast(this)->map() == 152 HeapObject::cast(this)->map() ==
144 HeapObject::cast(this)->GetHeap()->external_map(); 153 HeapObject::cast(this)->GetHeap()->external_map();
145 } 154 }
146 155
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 263
255 264
256 bool Object::IsExternalTwoByteString() { 265 bool Object::IsExternalTwoByteString() {
257 if (!IsString()) return false; 266 if (!IsString()) return false;
258 return StringShape(String::cast(this)).IsExternal() && 267 return StringShape(String::cast(this)).IsExternal() &&
259 String::cast(this)->IsTwoByteRepresentation(); 268 String::cast(this)->IsTwoByteRepresentation();
260 } 269 }
261 270
262 bool Object::HasValidElements() { 271 bool Object::HasValidElements() {
263 // Dictionary is covered under FixedArray. 272 // Dictionary is covered under FixedArray.
264 return IsFixedArray() || IsFixedDoubleArray() || IsExternalArray(); 273 return IsFixedArray() || IsFixedDoubleArray() || IsExternalArray() ||
274 IsFixedTypedArrayBase();
265 } 275 }
266 276
267 277
268 MaybeObject* Object::AllocateNewStorageFor(Heap* heap, 278 MaybeObject* Object::AllocateNewStorageFor(Heap* heap,
269 Representation representation) { 279 Representation representation) {
270 if (FLAG_track_fields && representation.IsSmi() && IsUninitialized()) { 280 if (FLAG_track_fields && representation.IsSmi() && IsUninitialized()) {
271 return Smi::FromInt(0); 281 return Smi::FromInt(0);
272 } 282 }
273 if (!FLAG_track_double_fields) return this; 283 if (!FLAG_track_double_fields) return this;
274 if (!representation.IsDouble()) return this; 284 if (!representation.IsDouble()) return this;
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 TYPE_CHECKER(ExternalByteArray, EXTERNAL_BYTE_ARRAY_TYPE) 490 TYPE_CHECKER(ExternalByteArray, EXTERNAL_BYTE_ARRAY_TYPE)
481 TYPE_CHECKER(ExternalUnsignedByteArray, EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE) 491 TYPE_CHECKER(ExternalUnsignedByteArray, EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE)
482 TYPE_CHECKER(ExternalShortArray, EXTERNAL_SHORT_ARRAY_TYPE) 492 TYPE_CHECKER(ExternalShortArray, EXTERNAL_SHORT_ARRAY_TYPE)
483 TYPE_CHECKER(ExternalUnsignedShortArray, EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE) 493 TYPE_CHECKER(ExternalUnsignedShortArray, EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE)
484 TYPE_CHECKER(ExternalIntArray, EXTERNAL_INT_ARRAY_TYPE) 494 TYPE_CHECKER(ExternalIntArray, EXTERNAL_INT_ARRAY_TYPE)
485 TYPE_CHECKER(ExternalUnsignedIntArray, EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) 495 TYPE_CHECKER(ExternalUnsignedIntArray, EXTERNAL_UNSIGNED_INT_ARRAY_TYPE)
486 TYPE_CHECKER(ExternalFloatArray, EXTERNAL_FLOAT_ARRAY_TYPE) 496 TYPE_CHECKER(ExternalFloatArray, EXTERNAL_FLOAT_ARRAY_TYPE)
487 TYPE_CHECKER(ExternalDoubleArray, EXTERNAL_DOUBLE_ARRAY_TYPE) 497 TYPE_CHECKER(ExternalDoubleArray, EXTERNAL_DOUBLE_ARRAY_TYPE)
488 498
489 499
500 bool Object::IsFixedTypedArrayBase() {
501 if (!Object::IsHeapObject())
Toon Verwaest 2014/01/16 10:54:51 Use { } if you put return false on a new line. Als
Dmitry Lomov (no reviews) 2014/01/16 13:52:18 Done.
502 return false;
503 InstanceType instance_type =
504 HeapObject::cast(this)->map()->instance_type();
505 return (instance_type >= FIRST_FIXED_TYPED_ARRAY_TYPE &&
506 instance_type <= LAST_FIXED_TYPED_ARRAY_TYPE);
507 }
508
509
510 TYPE_CHECKER(FixedUint8Array, FIXED_UINT8_ARRAY_TYPE)
511 TYPE_CHECKER(FixedInt8Array, FIXED_INT8_ARRAY_TYPE)
512 TYPE_CHECKER(FixedUint16Array, FIXED_UINT16_ARRAY_TYPE)
513 TYPE_CHECKER(FixedInt16Array, FIXED_INT16_ARRAY_TYPE)
514 TYPE_CHECKER(FixedUint32Array, FIXED_UINT32_ARRAY_TYPE)
515 TYPE_CHECKER(FixedInt32Array, FIXED_INT32_ARRAY_TYPE)
516 TYPE_CHECKER(FixedFloat32Array, FIXED_FLOAT32_ARRAY_TYPE)
517 TYPE_CHECKER(FixedFloat64Array, FIXED_FLOAT64_ARRAY_TYPE)
518 TYPE_CHECKER(FixedUint8ClampedArray, FIXED_UINT8_CLAMPED_ARRAY_TYPE)
519
520
490 bool MaybeObject::IsFailure() { 521 bool MaybeObject::IsFailure() {
491 return HAS_FAILURE_TAG(this); 522 return HAS_FAILURE_TAG(this);
492 } 523 }
493 524
494 525
495 bool MaybeObject::IsRetryAfterGC() { 526 bool MaybeObject::IsRetryAfterGC() {
496 return HAS_FAILURE_TAG(this) 527 return HAS_FAILURE_TAG(this)
497 && Failure::cast(this)->type() == Failure::RETRY_AFTER_GC; 528 && Failure::cast(this)->type() == Failure::RETRY_AFTER_GC;
498 } 529 }
499 530
(...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after
1931 IsTrue() || 1962 IsTrue() ||
1932 IsFalse() || 1963 IsFalse() ||
1933 IsNull())) { 1964 IsNull())) {
1934 FATAL("API call returned invalid object"); 1965 FATAL("API call returned invalid object");
1935 } 1966 }
1936 #endif // ENABLE_EXTRA_CHECKS 1967 #endif // ENABLE_EXTRA_CHECKS
1937 } 1968 }
1938 1969
1939 1970
1940 FixedArrayBase* FixedArrayBase::cast(Object* object) { 1971 FixedArrayBase* FixedArrayBase::cast(Object* object) {
1941 ASSERT(object->IsFixedArray() || object->IsFixedDoubleArray() || 1972 ASSERT(object->IsFixedArrayBase());
1942 object->IsConstantPoolArray());
1943 return reinterpret_cast<FixedArrayBase*>(object); 1973 return reinterpret_cast<FixedArrayBase*>(object);
1944 } 1974 }
1945 1975
1946 1976
1947 Object* FixedArray::get(int index) { 1977 Object* FixedArray::get(int index) {
1948 SLOW_ASSERT(index >= 0 && index < this->length()); 1978 SLOW_ASSERT(index >= 0 && index < this->length());
1949 return READ_FIELD(this, kHeaderSize + index * kPointerSize); 1979 return READ_FIELD(this, kHeaderSize + index * kPointerSize);
1950 } 1980 }
1951 1981
1952 1982
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after
2611 set(kMaxNumberKeyIndex, Smi::FromInt(kRequiresSlowElementsMask)); 2641 set(kMaxNumberKeyIndex, Smi::FromInt(kRequiresSlowElementsMask));
2612 } 2642 }
2613 2643
2614 2644
2615 // ------------------------------------ 2645 // ------------------------------------
2616 // Cast operations 2646 // Cast operations
2617 2647
2618 2648
2619 CAST_ACCESSOR(FixedArray) 2649 CAST_ACCESSOR(FixedArray)
2620 CAST_ACCESSOR(FixedDoubleArray) 2650 CAST_ACCESSOR(FixedDoubleArray)
2651 CAST_ACCESSOR(FixedTypedArrayBase)
2621 CAST_ACCESSOR(ConstantPoolArray) 2652 CAST_ACCESSOR(ConstantPoolArray)
2622 CAST_ACCESSOR(DescriptorArray) 2653 CAST_ACCESSOR(DescriptorArray)
2623 CAST_ACCESSOR(DeoptimizationInputData) 2654 CAST_ACCESSOR(DeoptimizationInputData)
2624 CAST_ACCESSOR(DeoptimizationOutputData) 2655 CAST_ACCESSOR(DeoptimizationOutputData)
2625 CAST_ACCESSOR(DependentCode) 2656 CAST_ACCESSOR(DependentCode)
2626 CAST_ACCESSOR(TypeFeedbackCells) 2657 CAST_ACCESSOR(TypeFeedbackCells)
2627 CAST_ACCESSOR(StringTable) 2658 CAST_ACCESSOR(StringTable)
2628 CAST_ACCESSOR(JSFunctionResultCache) 2659 CAST_ACCESSOR(JSFunctionResultCache)
2629 CAST_ACCESSOR(NormalizedMapCache) 2660 CAST_ACCESSOR(NormalizedMapCache)
2630 CAST_ACCESSOR(ScopeInfo) 2661 CAST_ACCESSOR(ScopeInfo)
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2680 CAST_ACCESSOR(ExternalShortArray) 2711 CAST_ACCESSOR(ExternalShortArray)
2681 CAST_ACCESSOR(ExternalUnsignedShortArray) 2712 CAST_ACCESSOR(ExternalUnsignedShortArray)
2682 CAST_ACCESSOR(ExternalIntArray) 2713 CAST_ACCESSOR(ExternalIntArray)
2683 CAST_ACCESSOR(ExternalUnsignedIntArray) 2714 CAST_ACCESSOR(ExternalUnsignedIntArray)
2684 CAST_ACCESSOR(ExternalFloatArray) 2715 CAST_ACCESSOR(ExternalFloatArray)
2685 CAST_ACCESSOR(ExternalDoubleArray) 2716 CAST_ACCESSOR(ExternalDoubleArray)
2686 CAST_ACCESSOR(ExternalPixelArray) 2717 CAST_ACCESSOR(ExternalPixelArray)
2687 CAST_ACCESSOR(Struct) 2718 CAST_ACCESSOR(Struct)
2688 CAST_ACCESSOR(AccessorInfo) 2719 CAST_ACCESSOR(AccessorInfo)
2689 2720
2721 template <class Traits>
2722 FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) {
2723 SLOW_ASSERT(object->IsHeapObject() &&
2724 HeapObject::cast(object)->map()->instance_type()
Toon Verwaest 2014/01/16 10:54:51 == on previous line
Dmitry Lomov (no reviews) 2014/01/16 13:52:18 Done.
2725 == Traits::kInstanceType);
2726 return reinterpret_cast<FixedTypedArray<Traits>*>(object);
2727 }
2728
2690 2729
2691 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name) 2730 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name)
2692 STRUCT_LIST(MAKE_STRUCT_CAST) 2731 STRUCT_LIST(MAKE_STRUCT_CAST)
2693 #undef MAKE_STRUCT_CAST 2732 #undef MAKE_STRUCT_CAST
2694 2733
2695 2734
2696 template <typename Shape, typename Key> 2735 template <typename Shape, typename Key>
2697 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) { 2736 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) {
2698 ASSERT(obj->IsHashTable()); 2737 ASSERT(obj->IsHashTable());
2699 return reinterpret_cast<HashTable*>(obj); 2738 return reinterpret_cast<HashTable*>(obj);
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
3455 } 3494 }
3456 3495
3457 3496
3458 void ExternalDoubleArray::set(int index, double value) { 3497 void ExternalDoubleArray::set(int index, double value) {
3459 ASSERT((index >= 0) && (index < this->length())); 3498 ASSERT((index >= 0) && (index < this->length()));
3460 double* ptr = static_cast<double*>(external_pointer()); 3499 double* ptr = static_cast<double*>(external_pointer());
3461 ptr[index] = value; 3500 ptr[index] = value;
3462 } 3501 }
3463 3502
3464 3503
3504 int FixedTypedArrayBase::size() {
3505 InstanceType instance_type = map()->instance_type();
3506 int element_size;
3507 switch (instance_type) {
3508 case FIXED_UINT8_ARRAY_TYPE:
3509 case FIXED_INT8_ARRAY_TYPE:
3510 case FIXED_UINT8_CLAMPED_ARRAY_TYPE:
3511 element_size = 1;
3512 break;
3513 case FIXED_UINT16_ARRAY_TYPE:
3514 case FIXED_INT16_ARRAY_TYPE:
3515 element_size = 2;
3516 break;
3517 case FIXED_UINT32_ARRAY_TYPE:
3518 case FIXED_INT32_ARRAY_TYPE:
3519 case FIXED_FLOAT32_ARRAY_TYPE:
3520 element_size = 4;
3521 break;
3522 case FIXED_FLOAT64_ARRAY_TYPE:
3523 element_size = 8;
3524 break;
3525 default:
3526 UNREACHABLE();
3527 return 0;
3528 }
3529 return OBJECT_POINTER_ALIGN(kDataOffset + length() * element_size);
3530 }
3531
3532
3533 template <class Traits>
3534 typename Traits::ElementType FixedTypedArray<Traits>::get_scalar(int index) {
3535 ASSERT((index >= 0) && (index < this->length()));
3536 ElementType* ptr = reinterpret_cast<ElementType*>(
3537 FIELD_ADDR(this, kDataOffset));
3538 return ptr[index];
3539 }
3540
3541 template <class Traits>
3542 void FixedTypedArray<Traits>::set(int index, ElementType value) {
3543 ASSERT((index >= 0) && (index < this->length()));
3544 ElementType* ptr = reinterpret_cast<ElementType*>(
3545 FIELD_ADDR(this, kDataOffset));
3546 ptr[index] = value;
3547 }
3548
3549
3550 template <class Traits>
3551 MaybeObject* FixedTypedArray<Traits>::get(int index) {
3552 return Traits::ToObject(GetHeap(), get_scalar(index));
3553 }
3554
3555 template <class Traits>
3556 MaybeObject* FixedTypedArray<Traits>::SetValue(uint32_t index, Object* value) {
3557 ElementType cast_value = Traits::defaultValue();
3558 if (index < static_cast<uint32_t>(length())) {
3559 if (value->IsSmi()) {
3560 int int_value = Smi::cast(value)->value();
3561 cast_value = static_cast<ElementType>(int_value);
3562 } else if (value->IsHeapNumber()) {
3563 double double_value = HeapNumber::cast(value)->value();
3564 cast_value = static_cast<ElementType>(DoubleToInt32(double_value));
3565 } else {
3566 // Clamp undefined to the default value. All other types have been
3567 // converted to a number type further up in the call chain.
3568 ASSERT(value->IsUndefined());
3569 }
3570 set(index, cast_value);
3571 }
3572 return Traits::ToObject(GetHeap(), cast_value);
3573 }
3574
3575 template <class Traits>
3576 Handle<Object> FixedTypedArray<Traits>::SetValue(
3577 Handle<FixedTypedArray<Traits> > array,
3578 uint32_t index,
3579 Handle<Object> value) {
3580 CALL_HEAP_FUNCTION(array->GetIsolate(),
3581 array->SetValue(index, *value),
3582 Object);
3583 }
3584
3585
3586 MaybeObject* Uint8ArrayTraits::ToObject(Heap*, uint8_t scalar) {
3587 return Smi::FromInt(scalar);
3588 }
3589
3590
3591 MaybeObject* Uint8ClampedArrayTraits::ToObject(Heap*, uint8_t scalar) {
3592 return Smi::FromInt(scalar);
3593 }
3594
3595
3596 MaybeObject* Int8ArrayTraits::ToObject(Heap*, int8_t scalar) {
3597 return Smi::FromInt(scalar);
3598 }
3599
3600
3601 MaybeObject* Uint16ArrayTraits::ToObject(Heap*, uint16_t scalar) {
3602 return Smi::FromInt(scalar);
3603 }
3604
3605
3606 MaybeObject* Int16ArrayTraits::ToObject(Heap*, int16_t scalar) {
3607 return Smi::FromInt(scalar);
3608 }
3609
3610
3611 MaybeObject* Uint32ArrayTraits::ToObject(Heap* heap, uint32_t scalar) {
3612 return heap->NumberFromUint32(scalar);
3613 }
3614
3615
3616 MaybeObject* Int32ArrayTraits::ToObject(Heap* heap, int32_t scalar) {
3617 return heap->NumberFromInt32(scalar);
3618 }
3619
3620
3621 MaybeObject* Float32ArrayTraits::ToObject(Heap* heap, float scalar) {
3622 return heap->NumberFromDouble(scalar);
3623 }
3624
3625
3626 MaybeObject* Float64ArrayTraits::ToObject(Heap* heap, double scalar) {
3627 return heap->NumberFromDouble(scalar);
3628 }
3629
3630
3465 int Map::visitor_id() { 3631 int Map::visitor_id() {
3466 return READ_BYTE_FIELD(this, kVisitorIdOffset); 3632 return READ_BYTE_FIELD(this, kVisitorIdOffset);
3467 } 3633 }
3468 3634
3469 3635
3470 void Map::set_visitor_id(int id) { 3636 void Map::set_visitor_id(int id) {
3471 ASSERT(0 <= id && id < 256); 3637 ASSERT(0 <= id && id < 256);
3472 WRITE_BYTE_FIELD(this, kVisitorIdOffset, static_cast<byte>(id)); 3638 WRITE_BYTE_FIELD(this, kVisitorIdOffset, static_cast<byte>(id));
3473 } 3639 }
3474 3640
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
3515 if (instance_type == FIXED_DOUBLE_ARRAY_TYPE) { 3681 if (instance_type == FIXED_DOUBLE_ARRAY_TYPE) {
3516 return FixedDoubleArray::SizeFor( 3682 return FixedDoubleArray::SizeFor(
3517 reinterpret_cast<FixedDoubleArray*>(this)->length()); 3683 reinterpret_cast<FixedDoubleArray*>(this)->length());
3518 } 3684 }
3519 if (instance_type == CONSTANT_POOL_ARRAY_TYPE) { 3685 if (instance_type == CONSTANT_POOL_ARRAY_TYPE) {
3520 return ConstantPoolArray::SizeFor( 3686 return ConstantPoolArray::SizeFor(
3521 reinterpret_cast<ConstantPoolArray*>(this)->count_of_int64_entries(), 3687 reinterpret_cast<ConstantPoolArray*>(this)->count_of_int64_entries(),
3522 reinterpret_cast<ConstantPoolArray*>(this)->count_of_ptr_entries(), 3688 reinterpret_cast<ConstantPoolArray*>(this)->count_of_ptr_entries(),
3523 reinterpret_cast<ConstantPoolArray*>(this)->count_of_int32_entries()); 3689 reinterpret_cast<ConstantPoolArray*>(this)->count_of_int32_entries());
3524 } 3690 }
3691 if (instance_type >= FIRST_FIXED_TYPED_ARRAY_TYPE &&
3692 instance_type <= LAST_FIXED_TYPED_ARRAY_TYPE) {
3693 return reinterpret_cast<FixedTypedArrayBase*>(this)->size();
3694 }
3525 ASSERT(instance_type == CODE_TYPE); 3695 ASSERT(instance_type == CODE_TYPE);
3526 return reinterpret_cast<Code*>(this)->CodeSize(); 3696 return reinterpret_cast<Code*>(this)->CodeSize();
3527 } 3697 }
3528 3698
3529 3699
3530 void Map::set_instance_size(int value) { 3700 void Map::set_instance_size(int value) {
3531 ASSERT_EQ(0, value & (kPointerSize - 1)); 3701 ASSERT_EQ(0, value & (kPointerSize - 1));
3532 value >>= kPointerSizeLog2; 3702 value >>= kPointerSizeLog2;
3533 ASSERT(0 <= value && value < 256); 3703 ASSERT(0 <= value && value < 256);
3534 WRITE_BYTE_FIELD(this, kInstanceSizeOffset, static_cast<byte>(value)); 3704 WRITE_BYTE_FIELD(this, kInstanceSizeOffset, static_cast<byte>(value));
(...skipping 2149 matching lines...) Expand 10 before | Expand all | Expand 10 after
5684 EXTERNAL_ELEMENTS_CHECK(Int, EXTERNAL_INT_ARRAY_TYPE) 5854 EXTERNAL_ELEMENTS_CHECK(Int, EXTERNAL_INT_ARRAY_TYPE)
5685 EXTERNAL_ELEMENTS_CHECK(UnsignedInt, 5855 EXTERNAL_ELEMENTS_CHECK(UnsignedInt,
5686 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) 5856 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE)
5687 EXTERNAL_ELEMENTS_CHECK(Float, 5857 EXTERNAL_ELEMENTS_CHECK(Float,
5688 EXTERNAL_FLOAT_ARRAY_TYPE) 5858 EXTERNAL_FLOAT_ARRAY_TYPE)
5689 EXTERNAL_ELEMENTS_CHECK(Double, 5859 EXTERNAL_ELEMENTS_CHECK(Double,
5690 EXTERNAL_DOUBLE_ARRAY_TYPE) 5860 EXTERNAL_DOUBLE_ARRAY_TYPE)
5691 EXTERNAL_ELEMENTS_CHECK(Pixel, EXTERNAL_PIXEL_ARRAY_TYPE) 5861 EXTERNAL_ELEMENTS_CHECK(Pixel, EXTERNAL_PIXEL_ARRAY_TYPE)
5692 5862
5693 5863
5864 bool JSObject::HasFixedTypedArrayElements() {
5865 HeapObject* array = elements();
5866 ASSERT(array != NULL);
5867 return array->IsFixedTypedArrayBase();
5868 }
5869
5870
5694 bool JSObject::HasNamedInterceptor() { 5871 bool JSObject::HasNamedInterceptor() {
5695 return map()->has_named_interceptor(); 5872 return map()->has_named_interceptor();
5696 } 5873 }
5697 5874
5698 5875
5699 bool JSObject::HasIndexedInterceptor() { 5876 bool JSObject::HasIndexedInterceptor() {
5700 return map()->has_indexed_interceptor(); 5877 return map()->has_indexed_interceptor();
5701 } 5878 }
5702 5879
5703 5880
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
6475 #undef WRITE_UINT32_FIELD 6652 #undef WRITE_UINT32_FIELD
6476 #undef READ_SHORT_FIELD 6653 #undef READ_SHORT_FIELD
6477 #undef WRITE_SHORT_FIELD 6654 #undef WRITE_SHORT_FIELD
6478 #undef READ_BYTE_FIELD 6655 #undef READ_BYTE_FIELD
6479 #undef WRITE_BYTE_FIELD 6656 #undef WRITE_BYTE_FIELD
6480 6657
6481 6658
6482 } } // namespace v8::internal 6659 } } // namespace v8::internal
6483 6660
6484 #endif // V8_OBJECTS_INL_H_ 6661 #endif // V8_OBJECTS_INL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698