Chromium Code Reviews| Index: src/api.cc |
| diff --git a/src/api.cc b/src/api.cc |
| index 7099ca8ddd9de161110b359089a77a4bb2ff23e7..9d0ada594ed5ef96aec818f99ed68b77b498fed3 100644 |
| --- a/src/api.cc |
| +++ b/src/api.cc |
| @@ -6019,19 +6019,41 @@ Local<Object> Array::CloneElementAt(uint32_t index) { |
| } |
| -size_t v8::ArrayBuffer::ByteLength() const { |
| +bool v8::ArrayBuffer::IsExternal() const { |
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
|
Sven Panne
2013/05/23 07:57:01
Just remove this line and the following IsDeadChec
Dmitry Lomov (no reviews)
2013/05/23 08:42:15
Done.
|
| - if (IsDeadCheck(isolate, "v8::ArrayBuffer::ByteLength()")) return 0; |
| + if (IsDeadCheck(isolate, "v8::ArrayBuffer::IsExternal()")) return 0; |
| i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this); |
|
Sven Panne
2013/05/23 07:57:01
Nit: No need to name this temporary.
Dmitry Lomov (no reviews)
2013/05/23 08:42:15
Done.
|
| - return static_cast<size_t>(obj->byte_length()->Number()); |
| + return obj->is_external(); |
| +} |
| + |
| +v8::ArrayBufferContents::~ArrayBufferContents() { |
| + if (data_ != NULL) { |
|
Sven Panne
2013/05/23 07:57:01
No need for this guard, free(NULL) is by definitio
Dmitry Lomov (no reviews)
2013/05/23 08:42:15
Done.
|
| + free(data_); |
| + data_ = NULL; |
| + } |
| + byte_length_ = 0; |
| +} |
| + |
| + |
| +void v8::ArrayBuffer::Externalize(ArrayBufferContents* contents) { |
| + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
|
Sven Panne
2013/05/23 07:57:01
Kill the IsDeadCheck here, too.
Dmitry Lomov (no reviews)
2013/05/23 08:42:15
Done.
|
| + if (IsDeadCheck(isolate, "v8::ArrayBuffer::Data()")) return; |
| + i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this); |
| + ApiCheck(!obj->is_external(), |
| + "v8::ArrayBuffer::Externalize", |
| + "ArrayBuffer already externalized"); |
| + obj->set_is_external(true); |
| + size_t byte_length = static_cast<size_t>(obj->byte_length()->Number()); |
| + contents->data_ = obj->backing_store(); |
|
Sven Panne
2013/05/23 07:57:01
We silently overwrite any previous backing store i
Dmitry Lomov (no reviews)
2013/05/23 08:42:15
As discussed offline, added an ApiCheck
On 2013/05
|
| + contents->byte_length_ = byte_length; |
| } |
| -void* v8::ArrayBuffer::Data() const { |
| +size_t v8::ArrayBuffer::ByteLength() const { |
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| - if (IsDeadCheck(isolate, "v8::ArrayBuffer::Data()")) return 0; |
| + if (IsDeadCheck(isolate, "v8::ArrayBuffer::ByteLength()")) return 0; |
| i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this); |
| - return obj->backing_store(); |
| + return static_cast<size_t>(obj->byte_length()->Number()); |
| } |
| @@ -6054,7 +6076,7 @@ Local<ArrayBuffer> v8::ArrayBuffer::New(void* data, size_t byte_length) { |
| ENTER_V8(isolate); |
| i::Handle<i::JSArrayBuffer> obj = |
| isolate->factory()->NewJSArrayBuffer(); |
| - i::Runtime::SetupArrayBuffer(isolate, obj, data, byte_length); |
| + i::Runtime::SetupArrayBuffer(isolate, obj, true, data, byte_length); |
| return Utils::ToLocal(obj); |
| } |