Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 34b7c2e229c457c7212514c3f1856094000c966d..663e6b544c6164d5900b2093b80d9224fe9cc90e 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" |
@@ -1599,6 +1600,11 @@ Object* FixedArray::get(int index) { |
} |
+bool FixedArray::is_the_hole(int index) { |
+ return get(index)->IsTheHole(); |
Lasse Reichstein
2011/08/01 09:35:54
Is this really used so much that it needs this sho
danno
2011/08/02 13:37:46
Done.
|
+} |
+ |
+ |
void FixedArray::set(int index, Smi* value) { |
ASSERT(map() != HEAP->fixed_cow_array_map()); |
ASSERT(reinterpret_cast<Object*>(value)->IsSmi()); |
@@ -1633,7 +1639,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()); |
@@ -1643,6 +1649,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()); |
@@ -2367,13 +2382,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(); |
@@ -2393,13 +2413,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()); |
@@ -2407,13 +2432,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()); |
@@ -2421,13 +2451,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()); |
@@ -2435,13 +2470,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()); |
@@ -2449,13 +2489,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()); |
@@ -2463,13 +2508,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()); |
@@ -2477,13 +2527,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()); |
@@ -2491,13 +2546,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()); |
@@ -3979,6 +4039,11 @@ JSObject::ElementsKind JSObject::GetElementsKind() { |
} |
+ElementsHandler* JSObject::GetElementsHandler() { |
+ return ElementsHandler::ForKind(GetElementsKind()); |
+} |
+ |
+ |
bool JSObject::HasFastElements() { |
return GetElementsKind() == FAST_ELEMENTS; |
} |