From 1688f3c167fb5858276a445aecb4177d2f29c7aa Mon Sep 17 00:00:00 2001 From: "dslomov@chromium.org" Date: Fri, 2 Aug 2013 12:19:22 +0000 Subject: [PATCH] Add size_t length argument to v8::ArrayBuffer::Allocator::Free. The previous implementation of Free is a deprecated overload now. R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/21803002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16031 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- include/v8.h | 16 +++++++++++++--- src/api.cc | 6 ++++++ src/d8.cc | 4 +++- src/runtime.cc | 4 +++- test/cctest/cctest.cc | 5 +++-- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/include/v8.h b/include/v8.h index 11fccdf023..311ad434de 100644 --- a/include/v8.h +++ b/include/v8.h @@ -2425,10 +2425,20 @@ class V8EXPORT ArrayBuffer : public Object { } /** - * Free the memory pointed to |data|. That memory is guaranteed to be - * previously allocated by |Allocate|. + * Free the memory block of size |length|, pointed to by |data|. + * That memory is guaranteed to be previously allocated by |Allocate|. */ - virtual void Free(void* data) = 0; + virtual void Free(void* data, size_t length) { + // Override with call to |Free(void*)| for compatibility + // with legacy version. + Free(data); + } + + /** + * Deprecated. Never called directly by V8. + * For compatibility with legacy version of this interface. + */ + virtual void Free(void* data); }; /** diff --git a/src/api.cc b/src/api.cc index 1ae81b1325..d442126ebb 100644 --- a/src/api.cc +++ b/src/api.cc @@ -3071,6 +3071,12 @@ void v8::ArrayBuffer::CheckCast(Value* that) { } +void v8::ArrayBuffer::Allocator::Free(void* data) { + API_Fatal("v8::ArrayBuffer::Allocator::Free", + "Override Allocator::Free(void*, size_t)"); +} + + void v8::ArrayBufferView::CheckCast(Value* that) { i::Handle obj = Utils::OpenHandle(that); ApiCheck(obj->IsJSArrayBufferView(), diff --git a/src/d8.cc b/src/d8.cc index e66a2ece60..0f4b5e17ad 100644 --- a/src/d8.cc +++ b/src/d8.cc @@ -1635,7 +1635,9 @@ class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator { virtual void* AllocateUninitialized(size_t length) { return malloc(length); } - virtual void Free(void* data) { free(data); } + virtual void Free(void* data, size_t) { free(data); } + // TODO(dslomov): Remove when v8:2823 is fixed. + virtual void Free(void* data) { UNREACHABLE(); } }; diff --git a/src/runtime.cc b/src/runtime.cc index df31e70d5c..9775147042 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -689,7 +689,9 @@ void Runtime::FreeArrayBuffer(Isolate* isolate, isolate->heap()->AdjustAmountOfExternalAllocatedMemory( -static_cast(allocated_length)); CHECK(V8::ArrayBufferAllocator() != NULL); - V8::ArrayBufferAllocator()->Free(phantom_array_buffer->backing_store()); + V8::ArrayBufferAllocator()->Free( + phantom_array_buffer->backing_store(), + allocated_length); } diff --git a/test/cctest/cctest.cc b/test/cctest/cctest.cc index 94dcce1305..a2caf0f3ba 100644 --- a/test/cctest/cctest.cc +++ b/test/cctest/cctest.cc @@ -99,9 +99,10 @@ v8::Isolate* CcTest::default_isolate_; class CcTestArrayBufferAllocator : public v8::ArrayBuffer::Allocator { - public: virtual void* Allocate(size_t length) { return malloc(length); } - virtual void Free(void* data) { free(data); } + virtual void Free(void* data, size_t length) { free(data); } + // TODO(dslomov): Remove when v8:2823 is fixed. + virtual void Free(void* data) { UNREACHABLE(); } };