Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 34fd089cc679b1d16487793ca9d08be826a2c02e..2e4c993de29f8bf27e4885744f77589f0de749f4 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -926,17 +926,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ArrayBufferNeuter) { |
void Runtime::ArrayIdToTypeAndSize( |
- int arrayId, |
- ExternalArrayType* array_type, |
- ElementsKind* external_elements_kind, |
- ElementsKind* fixed_elements_kind, |
- size_t* element_size) { |
+ int arrayId, ExternalArrayType* array_type, size_t* element_size) { |
switch (arrayId) { |
#define ARRAY_ID_CASE(Type, type, TYPE, ctype, size) \ |
case ARRAY_ID_##TYPE: \ |
*array_type = kExternal##Type##Array; \ |
- *external_elements_kind = EXTERNAL_##TYPE##_ELEMENTS; \ |
- *fixed_elements_kind = TYPE##_ELEMENTS; \ |
*element_size = size; \ |
break; |
@@ -954,7 +948,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitialize) { |
ASSERT(args.length() == 5); |
CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, holder, 0); |
CONVERT_SMI_ARG_CHECKED(arrayId, 1); |
- CONVERT_ARG_HANDLE_CHECKED(Object, maybe_buffer, 2); |
+ CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, buffer, 2); |
CONVERT_ARG_HANDLE_CHECKED(Object, byte_offset_object, 3); |
CONVERT_ARG_HANDLE_CHECKED(Object, byte_length_object, 4); |
@@ -966,19 +960,18 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitialize) { |
ExternalArrayType array_type = kExternalInt8Array; // Bogus initialization. |
size_t element_size = 1; // Bogus initialization. |
- ElementsKind external_elements_kind = EXTERNAL_INT8_ELEMENTS; |
- ElementsKind fixed_elements_kind = INT8_ELEMENTS; |
- Runtime::ArrayIdToTypeAndSize(arrayId, |
- &array_type, |
- &external_elements_kind, |
- &fixed_elements_kind, |
- &element_size); |
+ Runtime::ArrayIdToTypeAndSize(arrayId, &array_type, &element_size); |
+ holder->set_buffer(*buffer); |
holder->set_byte_offset(*byte_offset_object); |
holder->set_byte_length(*byte_length_object); |
size_t byte_offset = NumberToSize(isolate, *byte_offset_object); |
size_t byte_length = NumberToSize(isolate, *byte_length_object); |
+ size_t array_buffer_byte_length = |
+ NumberToSize(isolate, buffer->byte_length()); |
+ CHECK(byte_offset <= array_buffer_byte_length); |
+ CHECK(array_buffer_byte_length - byte_offset >= byte_length); |
CHECK_EQ(0, static_cast<int>(byte_length % element_size)); |
size_t length = byte_length / element_size; |
@@ -991,35 +984,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitialize) { |
Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length); |
holder->set_length(*length_obj); |
- if (!maybe_buffer->IsNull()) { |
- Handle<JSArrayBuffer> buffer(JSArrayBuffer::cast(*maybe_buffer)); |
- |
- size_t array_buffer_byte_length = |
- NumberToSize(isolate, buffer->byte_length()); |
- CHECK(byte_offset <= array_buffer_byte_length); |
- CHECK(array_buffer_byte_length - byte_offset >= byte_length); |
- |
- holder->set_buffer(*buffer); |
- holder->set_weak_next(buffer->weak_first_view()); |
- buffer->set_weak_first_view(*holder); |
- |
- Handle<ExternalArray> elements = |
- isolate->factory()->NewExternalArray( |
- static_cast<int>(length), array_type, |
- static_cast<uint8_t*>(buffer->backing_store()) + byte_offset); |
- Handle<Map> map = |
- isolate->factory()->GetElementsTransitionMap( |
- holder, external_elements_kind); |
- holder->set_map_and_elements(*map, *elements); |
- ASSERT(IsExternalArrayElementsKind(holder->map()->elements_kind())); |
- } else { |
- holder->set_buffer(Smi::FromInt(0)); |
- holder->set_weak_next(isolate->heap()->undefined_value()); |
- Handle<FixedTypedArrayBase> elements = |
- isolate->factory()->NewFixedTypedArray( |
- static_cast<int>(length), array_type); |
- holder->set_elements(*elements); |
- } |
+ holder->set_weak_next(buffer->weak_first_view()); |
+ buffer->set_weak_first_view(*holder); |
+ |
+ Handle<ExternalArray> elements = |
+ isolate->factory()->NewExternalArray( |
+ static_cast<int>(length), array_type, |
+ static_cast<uint8_t*>(buffer->backing_store()) + byte_offset); |
+ holder->set_elements(*elements); |
return isolate->heap()->undefined_value(); |
} |
@@ -1045,13 +1017,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitializeFromArrayLike) { |
ExternalArrayType array_type = kExternalInt8Array; // Bogus initialization. |
size_t element_size = 1; // Bogus initialization. |
- ElementsKind external_elements_kind; |
- ElementsKind fixed_elements_kind; |
- Runtime::ArrayIdToTypeAndSize(arrayId, |
- &array_type, |
- &external_elements_kind, |
- &fixed_elements_kind, |
- &element_size); |
+ Runtime::ArrayIdToTypeAndSize(arrayId, &array_type, &element_size); |
Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer(); |
if (source->IsJSTypedArray() && |
@@ -1104,10 +1070,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitializeFromArrayLike) { |
isolate->factory()->NewExternalArray( |
static_cast<int>(length), array_type, |
static_cast<uint8_t*>(buffer->backing_store())); |
- Handle<Map> map = |
- isolate->factory()->GetElementsTransitionMap( |
- holder, external_elements_kind); |
- holder->set_map_and_elements(*map, *elements); |
+ holder->set_elements(*elements); |
if (source->IsJSTypedArray()) { |
Handle<JSTypedArray> typed_array(JSTypedArray::cast(*source)); |
@@ -1115,7 +1078,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitializeFromArrayLike) { |
if (typed_array->type() == holder->type()) { |
uint8_t* backing_store = |
static_cast<uint8_t*>( |
- typed_array->GetBuffer()->backing_store()); |
+ JSArrayBuffer::cast(typed_array->buffer())->backing_store()); |
size_t source_byte_offset = |
NumberToSize(isolate, typed_array->byte_offset()); |
memcpy( |
@@ -1144,24 +1107,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitializeFromArrayLike) { |
return typed_array->accessor(); \ |
} |
+TYPED_ARRAY_GETTER(Buffer, buffer) |
TYPED_ARRAY_GETTER(ByteLength, byte_length) |
TYPED_ARRAY_GETTER(ByteOffset, byte_offset) |
TYPED_ARRAY_GETTER(Length, length) |
#undef TYPED_ARRAY_GETTER |
-RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayGetBuffer) { |
- HandleScope scope(isolate); |
- ASSERT(args.length() == 1); |
- CONVERT_ARG_HANDLE_CHECKED(Object, holder, 0); |
- if (!holder->IsJSTypedArray()) |
- return isolate->Throw(*isolate->factory()->NewTypeError( |
- "not_typed_array", HandleVector<Object>(NULL, 0))); |
- Handle<JSTypedArray> typed_array(JSTypedArray::cast(*holder)); |
- return *typed_array->GetBuffer(); |
-} |
- |
- |
// Return codes for Runtime_TypedArraySetFastCases. |
// Should be synchronized with typedarray.js natives. |
enum TypedArraySetResultCodes { |
@@ -1207,10 +1159,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArraySetFastCases) { |
size_t source_offset = NumberToSize(isolate, source->byte_offset()); |
uint8_t* target_base = |
static_cast<uint8_t*>( |
- target->GetBuffer()->backing_store()) + target_offset; |
+ JSArrayBuffer::cast(target->buffer())->backing_store()) + target_offset; |
uint8_t* source_base = |
static_cast<uint8_t*>( |
- source->GetBuffer()->backing_store()) + source_offset; |
+ JSArrayBuffer::cast(source->buffer())->backing_store()) + source_offset; |
// Typed arrays of the same type: use memmove. |
if (target->type() == source->type()) { |
@@ -1226,8 +1178,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArraySetFastCases) { |
target_base + target_byte_length > source_base)) { |
// We do not support overlapping ArrayBuffers |
ASSERT( |
- target->GetBuffer()->backing_store() == |
- source->GetBuffer()->backing_store()); |
+ JSArrayBuffer::cast(target->buffer())->backing_store() == |
+ JSArrayBuffer::cast(source->buffer())->backing_store()); |
return Smi::FromInt(TYPED_ARRAY_SET_TYPED_ARRAY_OVERLAPPING); |
} else { // Non-overlapping typed arrays |
return Smi::FromInt(TYPED_ARRAY_SET_TYPED_ARRAY_NONOVERLAPPING); |
@@ -1235,12 +1187,6 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArraySetFastCases) { |
} |
-RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayMaxSizeInHeap) { |
- ASSERT_OBJECT_SIZE(FLAG_typed_array_max_size_in_heap); |
- return Smi::FromInt(FLAG_typed_array_max_size_in_heap); |
-} |
- |
- |
RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewInitialize) { |
HandleScope scope(isolate); |
ASSERT(args.length() == 4); |
@@ -14792,17 +14738,6 @@ TYPED_ARRAYS(TYPED_ARRAYS_CHECK_RUNTIME_FUNCTION) |
#undef TYPED_ARRAYS_CHECK_RUNTIME_FUNCTION |
-#define FIXED_TYPED_ARRAYS_CHECK_RUNTIME_FUNCTION(Type, type, TYPE, ctype, s) \ |
- RUNTIME_FUNCTION(MaybeObject*, Runtime_HasFixed##Type##Elements) { \ |
- CONVERT_ARG_CHECKED(JSObject, obj, 0); \ |
- return isolate->heap()->ToBoolean(obj->HasFixed##Type##Elements()); \ |
- } |
- |
-TYPED_ARRAYS(FIXED_TYPED_ARRAYS_CHECK_RUNTIME_FUNCTION) |
- |
-#undef FIXED_TYPED_ARRAYS_CHECK_RUNTIME_FUNCTION |
- |
- |
RUNTIME_FUNCTION(MaybeObject*, Runtime_HaveSameMap) { |
SealHandleScope shs(isolate); |
ASSERT(args.length() == 2); |