Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 6870ce06dd53c00f224a6be9c582aee55b1e61fb..3fafcb51db33b5053408797118dd5518401726d2 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -35,6 +35,7 @@ |
#ifndef V8_OBJECTS_INL_H_ |
#define V8_OBJECTS_INL_H_ |
+#include "elements.h" |
#include "objects.h" |
#include "contexts.h" |
#include "conversions-inl.h" |
@@ -1635,7 +1636,7 @@ inline double FixedDoubleArray::canonical_not_the_hole_nan_as_double() { |
} |
-double FixedDoubleArray::get(int index) { |
+double FixedDoubleArray::get_scalar(int index) { |
ASSERT(map() != HEAP->fixed_cow_array_map() && |
map() != HEAP->fixed_array_map()); |
ASSERT(index >= 0 && index < this->length()); |
@@ -1645,6 +1646,15 @@ double FixedDoubleArray::get(int index) { |
} |
+MaybeObject* FixedDoubleArray::get(int index) { |
+ if (is_the_hole(index)) { |
+ return GetHeap()->the_hole_value(); |
+ } else { |
+ return GetHeap()->NumberFromDouble(get_scalar(index)); |
+ } |
+} |
+ |
+ |
void FixedDoubleArray::set(int index, double value) { |
ASSERT(map() != HEAP->fixed_cow_array_map() && |
map() != HEAP->fixed_array_map()); |
@@ -2369,13 +2379,18 @@ uint8_t* ExternalPixelArray::external_pixel_pointer() { |
} |
-uint8_t ExternalPixelArray::get(int index) { |
+uint8_t ExternalPixelArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
uint8_t* ptr = external_pixel_pointer(); |
return ptr[index]; |
} |
+MaybeObject* ExternalPixelArray::get(int index) { |
+ return Smi::FromInt(static_cast<int>(get_scalar(index))); |
+} |
+ |
+ |
void ExternalPixelArray::set(int index, uint8_t value) { |
ASSERT((index >= 0) && (index < this->length())); |
uint8_t* ptr = external_pixel_pointer(); |
@@ -2395,13 +2410,18 @@ void ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) { |
} |
-int8_t ExternalByteArray::get(int index) { |
+int8_t ExternalByteArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
int8_t* ptr = static_cast<int8_t*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalByteArray::get(int index) { |
+ return Smi::FromInt(static_cast<int>(get_scalar(index))); |
+} |
+ |
+ |
void ExternalByteArray::set(int index, int8_t value) { |
ASSERT((index >= 0) && (index < this->length())); |
int8_t* ptr = static_cast<int8_t*>(external_pointer()); |
@@ -2409,13 +2429,18 @@ void ExternalByteArray::set(int index, int8_t value) { |
} |
-uint8_t ExternalUnsignedByteArray::get(int index) { |
+uint8_t ExternalUnsignedByteArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
uint8_t* ptr = static_cast<uint8_t*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalUnsignedByteArray::get(int index) { |
+ return Smi::FromInt(static_cast<int>(get_scalar(index))); |
+} |
+ |
+ |
void ExternalUnsignedByteArray::set(int index, uint8_t value) { |
ASSERT((index >= 0) && (index < this->length())); |
uint8_t* ptr = static_cast<uint8_t*>(external_pointer()); |
@@ -2423,13 +2448,18 @@ void ExternalUnsignedByteArray::set(int index, uint8_t value) { |
} |
-int16_t ExternalShortArray::get(int index) { |
+int16_t ExternalShortArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
int16_t* ptr = static_cast<int16_t*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalShortArray::get(int index) { |
+ return Smi::FromInt(static_cast<int>(get_scalar(index))); |
+} |
+ |
+ |
void ExternalShortArray::set(int index, int16_t value) { |
ASSERT((index >= 0) && (index < this->length())); |
int16_t* ptr = static_cast<int16_t*>(external_pointer()); |
@@ -2437,13 +2467,18 @@ void ExternalShortArray::set(int index, int16_t value) { |
} |
-uint16_t ExternalUnsignedShortArray::get(int index) { |
+uint16_t ExternalUnsignedShortArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
uint16_t* ptr = static_cast<uint16_t*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalUnsignedShortArray::get(int index) { |
+ return Smi::FromInt(static_cast<int>(get_scalar(index))); |
+} |
+ |
+ |
void ExternalUnsignedShortArray::set(int index, uint16_t value) { |
ASSERT((index >= 0) && (index < this->length())); |
uint16_t* ptr = static_cast<uint16_t*>(external_pointer()); |
@@ -2451,13 +2486,18 @@ void ExternalUnsignedShortArray::set(int index, uint16_t value) { |
} |
-int32_t ExternalIntArray::get(int index) { |
+int32_t ExternalIntArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
int32_t* ptr = static_cast<int32_t*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalIntArray::get(int index) { |
+ return GetHeap()->NumberFromInt32(get_scalar(index)); |
+} |
+ |
+ |
void ExternalIntArray::set(int index, int32_t value) { |
ASSERT((index >= 0) && (index < this->length())); |
int32_t* ptr = static_cast<int32_t*>(external_pointer()); |
@@ -2465,13 +2505,18 @@ void ExternalIntArray::set(int index, int32_t value) { |
} |
-uint32_t ExternalUnsignedIntArray::get(int index) { |
+uint32_t ExternalUnsignedIntArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
uint32_t* ptr = static_cast<uint32_t*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalUnsignedIntArray::get(int index) { |
+ return GetHeap()->NumberFromUint32(get_scalar(index)); |
+} |
+ |
+ |
void ExternalUnsignedIntArray::set(int index, uint32_t value) { |
ASSERT((index >= 0) && (index < this->length())); |
uint32_t* ptr = static_cast<uint32_t*>(external_pointer()); |
@@ -2479,13 +2524,18 @@ void ExternalUnsignedIntArray::set(int index, uint32_t value) { |
} |
-float ExternalFloatArray::get(int index) { |
+float ExternalFloatArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
float* ptr = static_cast<float*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalFloatArray::get(int index) { |
+ return GetHeap()->NumberFromDouble(get_scalar(index)); |
+} |
+ |
+ |
void ExternalFloatArray::set(int index, float value) { |
ASSERT((index >= 0) && (index < this->length())); |
float* ptr = static_cast<float*>(external_pointer()); |
@@ -2493,13 +2543,18 @@ void ExternalFloatArray::set(int index, float value) { |
} |
-double ExternalDoubleArray::get(int index) { |
+double ExternalDoubleArray::get_scalar(int index) { |
ASSERT((index >= 0) && (index < this->length())); |
double* ptr = static_cast<double*>(external_pointer()); |
return ptr[index]; |
} |
+MaybeObject* ExternalDoubleArray::get(int index) { |
+ return GetHeap()->NumberFromDouble(get_scalar(index)); |
+} |
+ |
+ |
void ExternalDoubleArray::set(int index, double value) { |
ASSERT((index >= 0) && (index < this->length())); |
double* ptr = static_cast<double*>(external_pointer()); |
@@ -3981,6 +4036,11 @@ JSObject::ElementsKind JSObject::GetElementsKind() { |
} |
+ElementsAccessor* JSObject::GetElementsAccessor() { |
+ return ElementsAccessor::ForKind(GetElementsKind()); |
+} |
+ |
+ |
bool JSObject::HasFastElements() { |
return GetElementsKind() == FAST_ELEMENTS; |
} |