| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index e765aaee23074a41347a715936b9d5c5bd90b28a..256f5558952cea7b5d3f806e205633681796ca40 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -14791,11 +14791,14 @@ size_t JSTypedArray::element_size() {
|
| }
|
|
|
|
|
| -Object* ExternalUint8ClampedArray::SetValue(uint32_t index, Object* value) {
|
| +Handle<Object> ExternalUint8ClampedArray::SetValue(
|
| + Handle<ExternalUint8ClampedArray> array,
|
| + uint32_t index,
|
| + Handle<Object> value) {
|
| uint8_t clamped_value = 0;
|
| - if (index < static_cast<uint32_t>(length())) {
|
| + if (index < static_cast<uint32_t>(array->length())) {
|
| if (value->IsSmi()) {
|
| - int int_value = Smi::cast(value)->value();
|
| + int int_value = Handle<Smi>::cast(value)->value();
|
| if (int_value < 0) {
|
| clamped_value = 0;
|
| } else if (int_value > 255) {
|
| @@ -14804,7 +14807,7 @@ Object* ExternalUint8ClampedArray::SetValue(uint32_t index, Object* value) {
|
| clamped_value = static_cast<uint8_t>(int_value);
|
| }
|
| } else if (value->IsHeapNumber()) {
|
| - double double_value = HeapNumber::cast(value)->value();
|
| + double double_value = Handle<HeapNumber>::cast(value)->value();
|
| if (!(double_value > 0)) {
|
| // NaN and less than zero clamp to zero.
|
| clamped_value = 0;
|
| @@ -14820,32 +14823,25 @@ Object* ExternalUint8ClampedArray::SetValue(uint32_t index, Object* value) {
|
| // converted to a number type further up in the call chain.
|
| ASSERT(value->IsUndefined());
|
| }
|
| - set(index, clamped_value);
|
| + array->set(index, clamped_value);
|
| }
|
| - return Smi::FromInt(clamped_value);
|
| + return handle(Smi::FromInt(clamped_value), array->GetIsolate());
|
| }
|
|
|
|
|
| -Handle<Object> ExternalUint8ClampedArray::SetValue(
|
| - Handle<ExternalUint8ClampedArray> array,
|
| +template<typename ExternalArrayClass, typename ValueType>
|
| +static Handle<Object> ExternalArrayIntSetter(
|
| + Isolate* isolate,
|
| + Handle<ExternalArrayClass> receiver,
|
| uint32_t index,
|
| Handle<Object> value) {
|
| - return Handle<Object>(array->SetValue(index, *value), array->GetIsolate());
|
| -}
|
| -
|
| -
|
| -template<typename ExternalArrayClass, typename ValueType>
|
| -static MaybeObject* ExternalArrayIntSetter(Heap* heap,
|
| - ExternalArrayClass* receiver,
|
| - uint32_t index,
|
| - Object* value) {
|
| ValueType cast_value = 0;
|
| if (index < static_cast<uint32_t>(receiver->length())) {
|
| if (value->IsSmi()) {
|
| - int int_value = Smi::cast(value)->value();
|
| + int int_value = Handle<Smi>::cast(value)->value();
|
| cast_value = static_cast<ValueType>(int_value);
|
| } else if (value->IsHeapNumber()) {
|
| - double double_value = HeapNumber::cast(value)->value();
|
| + double double_value = Handle<HeapNumber>::cast(value)->value();
|
| cast_value = static_cast<ValueType>(DoubleToInt32(double_value));
|
| } else {
|
| // Clamp undefined to zero (default). All other types have been
|
| @@ -14854,88 +14850,47 @@ static MaybeObject* ExternalArrayIntSetter(Heap* heap,
|
| }
|
| receiver->set(index, cast_value);
|
| }
|
| - return heap->NumberFromInt32(cast_value);
|
| + return isolate->factory()->NewNumberFromInt(cast_value);
|
| }
|
|
|
|
|
| Handle<Object> ExternalInt8Array::SetValue(Handle<ExternalInt8Array> array,
|
| uint32_t index,
|
| Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| -}
|
| -
|
| -
|
| -MaybeObject* ExternalInt8Array::SetValue(uint32_t index, Object* value) {
|
| - return ExternalArrayIntSetter<ExternalInt8Array, int8_t>
|
| - (GetHeap(), this, index, value);
|
| -}
|
| -
|
| -
|
| -Handle<Object> ExternalUint8Array::SetValue(
|
| - Handle<ExternalUint8Array> array,
|
| - uint32_t index,
|
| - Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| -}
|
| -
|
| -
|
| -MaybeObject* ExternalUint8Array::SetValue(uint32_t index,
|
| - Object* value) {
|
| - return ExternalArrayIntSetter<ExternalUint8Array, uint8_t>
|
| - (GetHeap(), this, index, value);
|
| -}
|
| -
|
| -
|
| -Handle<Object> ExternalInt16Array::SetValue(
|
| - Handle<ExternalInt16Array> array,
|
| - uint32_t index,
|
| - Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| + return ExternalArrayIntSetter<ExternalInt8Array, int8_t>(
|
| + array->GetIsolate(), array, index, value);
|
| }
|
|
|
|
|
| -MaybeObject* ExternalInt16Array::SetValue(uint32_t index,
|
| - Object* value) {
|
| - return ExternalArrayIntSetter<ExternalInt16Array, int16_t>
|
| - (GetHeap(), this, index, value);
|
| +Handle<Object> ExternalUint8Array::SetValue(Handle<ExternalUint8Array> array,
|
| + uint32_t index,
|
| + Handle<Object> value) {
|
| + return ExternalArrayIntSetter<ExternalUint8Array, uint8_t>(
|
| + array->GetIsolate(), array, index, value);
|
| }
|
|
|
|
|
| -Handle<Object> ExternalUint16Array::SetValue(
|
| - Handle<ExternalUint16Array> array,
|
| - uint32_t index,
|
| - Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| +Handle<Object> ExternalInt16Array::SetValue(Handle<ExternalInt16Array> array,
|
| + uint32_t index,
|
| + Handle<Object> value) {
|
| + return ExternalArrayIntSetter<ExternalInt16Array, int16_t>(
|
| + array->GetIsolate(), array, index, value);
|
| }
|
|
|
|
|
| -MaybeObject* ExternalUint16Array::SetValue(uint32_t index,
|
| - Object* value) {
|
| - return ExternalArrayIntSetter<ExternalUint16Array, uint16_t>
|
| - (GetHeap(), this, index, value);
|
| +Handle<Object> ExternalUint16Array::SetValue(Handle<ExternalUint16Array> array,
|
| + uint32_t index,
|
| + Handle<Object> value) {
|
| + return ExternalArrayIntSetter<ExternalUint16Array, uint16_t>(
|
| + array->GetIsolate(), array, index, value);
|
| }
|
|
|
|
|
| Handle<Object> ExternalInt32Array::SetValue(Handle<ExternalInt32Array> array,
|
| - uint32_t index,
|
| - Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| -}
|
| -
|
| -
|
| -MaybeObject* ExternalInt32Array::SetValue(uint32_t index, Object* value) {
|
| - return ExternalArrayIntSetter<ExternalInt32Array, int32_t>
|
| - (GetHeap(), this, index, value);
|
| + uint32_t index,
|
| + Handle<Object> value) {
|
| + return ExternalArrayIntSetter<ExternalInt32Array, int32_t>(
|
| + array->GetIsolate(), array, index, value);
|
| }
|
|
|
|
|
| @@ -14943,30 +14898,22 @@ Handle<Object> ExternalUint32Array::SetValue(
|
| Handle<ExternalUint32Array> array,
|
| uint32_t index,
|
| Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| -}
|
| -
|
| -
|
| -MaybeObject* ExternalUint32Array::SetValue(uint32_t index, Object* value) {
|
| uint32_t cast_value = 0;
|
| - Heap* heap = GetHeap();
|
| - if (index < static_cast<uint32_t>(length())) {
|
| + if (index < static_cast<uint32_t>(array->length())) {
|
| if (value->IsSmi()) {
|
| - int int_value = Smi::cast(value)->value();
|
| + int int_value = Handle<Smi>::cast(value)->value();
|
| cast_value = static_cast<uint32_t>(int_value);
|
| } else if (value->IsHeapNumber()) {
|
| - double double_value = HeapNumber::cast(value)->value();
|
| + double double_value = Handle<HeapNumber>::cast(value)->value();
|
| cast_value = static_cast<uint32_t>(DoubleToUint32(double_value));
|
| } else {
|
| // Clamp undefined to zero (default). All other types have been
|
| // converted to a number type further up in the call chain.
|
| ASSERT(value->IsUndefined());
|
| }
|
| - set(index, cast_value);
|
| + array->set(index, cast_value);
|
| }
|
| - return heap->NumberFromUint32(cast_value);
|
| + return array->GetIsolate()->factory()->NewNumberFromUint(cast_value);
|
| }
|
|
|
|
|
| @@ -14974,30 +14921,22 @@ Handle<Object> ExternalFloat32Array::SetValue(
|
| Handle<ExternalFloat32Array> array,
|
| uint32_t index,
|
| Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| -}
|
| -
|
| -
|
| -MaybeObject* ExternalFloat32Array::SetValue(uint32_t index, Object* value) {
|
| float cast_value = static_cast<float>(OS::nan_value());
|
| - Heap* heap = GetHeap();
|
| - if (index < static_cast<uint32_t>(length())) {
|
| + if (index < static_cast<uint32_t>(array->length())) {
|
| if (value->IsSmi()) {
|
| - int int_value = Smi::cast(value)->value();
|
| + int int_value = Handle<Smi>::cast(value)->value();
|
| cast_value = static_cast<float>(int_value);
|
| } else if (value->IsHeapNumber()) {
|
| - double double_value = HeapNumber::cast(value)->value();
|
| + double double_value = Handle<HeapNumber>::cast(value)->value();
|
| cast_value = static_cast<float>(double_value);
|
| } else {
|
| // Clamp undefined to NaN (default). All other types have been
|
| // converted to a number type further up in the call chain.
|
| ASSERT(value->IsUndefined());
|
| }
|
| - set(index, cast_value);
|
| + array->set(index, cast_value);
|
| }
|
| - return heap->AllocateHeapNumber(cast_value);
|
| + return array->GetIsolate()->factory()->NewNumber(cast_value);
|
| }
|
|
|
|
|
| @@ -15005,29 +14944,18 @@ Handle<Object> ExternalFloat64Array::SetValue(
|
| Handle<ExternalFloat64Array> array,
|
| uint32_t index,
|
| Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| - array->SetValue(index, *value),
|
| - Object);
|
| -}
|
| -
|
| -
|
| -MaybeObject* ExternalFloat64Array::SetValue(uint32_t index, Object* value) {
|
| double double_value = OS::nan_value();
|
| - Heap* heap = GetHeap();
|
| - if (index < static_cast<uint32_t>(length())) {
|
| - if (value->IsSmi()) {
|
| - int int_value = Smi::cast(value)->value();
|
| - double_value = static_cast<double>(int_value);
|
| - } else if (value->IsHeapNumber()) {
|
| - double_value = HeapNumber::cast(value)->value();
|
| + if (index < static_cast<uint32_t>(array->length())) {
|
| + if (value->IsNumber()) {
|
| + double_value = value->Number();
|
| } else {
|
| // Clamp undefined to NaN (default). All other types have been
|
| // converted to a number type further up in the call chain.
|
| ASSERT(value->IsUndefined());
|
| }
|
| - set(index, double_value);
|
| + array->set(index, double_value);
|
| }
|
| - return heap->AllocateHeapNumber(double_value);
|
| + return array->GetIsolate()->factory()->NewNumber(double_value);
|
| }
|
|
|
|
|
|
|