Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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_ |
| OLD | NEW |