Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 4929fdaa465a5ab772f6ba3e98dd3352d33f3adf..b190925ca042e6a508b91fbafdb9c61fdbce5eb5 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -6100,78 +6100,22 @@ size_t v8::TypedArray::Length() { |
} |
-static inline void SetupArrayBufferView( |
- i::Isolate* isolate, |
- i::Handle<i::JSArrayBufferView> obj, |
- i::Handle<i::JSArrayBuffer> buffer, |
- size_t byte_offset, |
- size_t byte_length) { |
- DCHECK(byte_offset + byte_length <= |
- static_cast<size_t>(buffer->byte_length()->Number())); |
- |
- obj->set_buffer(*buffer); |
- |
- obj->set_weak_next(buffer->weak_first_view()); |
- buffer->set_weak_first_view(*obj); |
- |
- i::Handle<i::Object> byte_offset_object = |
- isolate->factory()->NewNumberFromSize(byte_offset); |
- obj->set_byte_offset(*byte_offset_object); |
- |
- i::Handle<i::Object> byte_length_object = |
- isolate->factory()->NewNumberFromSize(byte_length); |
- obj->set_byte_length(*byte_length_object); |
-} |
- |
-template<typename ElementType, |
- ExternalArrayType array_type, |
- i::ElementsKind elements_kind> |
-i::Handle<i::JSTypedArray> NewTypedArray( |
- i::Isolate* isolate, |
- Handle<ArrayBuffer> array_buffer, size_t byte_offset, size_t length) { |
- i::Handle<i::JSTypedArray> obj = |
- isolate->factory()->NewJSTypedArray(array_type); |
- i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); |
- |
- DCHECK(byte_offset % sizeof(ElementType) == 0); |
- |
- CHECK(length <= (std::numeric_limits<size_t>::max() / sizeof(ElementType))); |
- CHECK(length <= static_cast<size_t>(i::Smi::kMaxValue)); |
- size_t byte_length = length * sizeof(ElementType); |
- SetupArrayBufferView( |
- isolate, obj, buffer, byte_offset, byte_length); |
- |
- i::Handle<i::Object> length_object = |
- isolate->factory()->NewNumberFromSize(length); |
- obj->set_length(*length_object); |
- |
- i::Handle<i::ExternalArray> elements = |
- isolate->factory()->NewExternalArray( |
- static_cast<int>(length), array_type, |
- static_cast<uint8_t*>(buffer->backing_store()) + byte_offset); |
- i::Handle<i::Map> map = |
- i::JSObject::GetElementsTransitionMap(obj, elements_kind); |
- i::JSObject::SetMapAndElements(obj, map, elements); |
- return obj; |
-} |
- |
- |
#define TYPED_ARRAY_NEW(Type, type, TYPE, ctype, size) \ |
Local<Type##Array> Type##Array::New(Handle<ArrayBuffer> array_buffer, \ |
- size_t byte_offset, size_t length) { \ |
+ size_t byte_offset, size_t length) { \ |
i::Isolate* isolate = Utils::OpenHandle(*array_buffer)->GetIsolate(); \ |
LOG_API(isolate, \ |
- "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \ |
+ "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \ |
ENTER_V8(isolate); \ |
if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \ |
- "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \ |
- "length exceeds max allowed value")) { \ |
- return Local<Type##Array>(); \ |
+ "v8::" #Type \ |
+ "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \ |
+ "length exceeds max allowed value")) { \ |
+ return Local<Type##Array>(); \ |
} \ |
- i::Handle<i::JSTypedArray> obj = \ |
- NewTypedArray<ctype, v8::kExternal##Type##Array, \ |
- i::EXTERNAL_##TYPE##_ELEMENTS>( \ |
- isolate, array_buffer, byte_offset, length); \ |
+ i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); \ |
+ i::Handle<i::JSTypedArray> obj = isolate->factory()->NewJSTypedArray( \ |
+ v8::kExternal##Type##Array, buffer, byte_offset, length); \ |
return Utils::ToLocal##Type##Array(obj); \ |
} |
@@ -6185,9 +6129,8 @@ Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer, |
i::Isolate* isolate = buffer->GetIsolate(); |
LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)"); |
ENTER_V8(isolate); |
- i::Handle<i::JSDataView> obj = isolate->factory()->NewJSDataView(); |
- SetupArrayBufferView( |
- isolate, obj, buffer, byte_offset, byte_length); |
+ i::Handle<i::JSDataView> obj = |
+ isolate->factory()->NewJSDataView(buffer, byte_offset, byte_length); |
return Utils::ToLocal(obj); |
} |