0
0
mirror of https://github.com/phpv8/v8js.git synced 2024-12-22 18:41:52 +00:00

Use v8::ArrayBuffer::Allocator::NewDefaultAllocator if available

It isn't provided by older (still supported) versions of V8, keep using the shim in that case.
This commit is contained in:
Stefan Siegl 2017-05-29 21:41:07 +02:00
parent 3929456a25
commit 4baf9e93b2
No known key found for this signature in database
GPG Key ID: 51575950154839CD
2 changed files with 27 additions and 0 deletions

View File

@ -174,6 +174,23 @@ int main ()
V8_SEARCH_BLOB([snapshot_blob.bin], [PHP_V8_SNAPSHOT_BLOB_PATH]) V8_SEARCH_BLOB([snapshot_blob.bin], [PHP_V8_SNAPSHOT_BLOB_PATH])
dnl
dnl Check for v8::ArrayBuffer::Allocator::NewDefaultAllocator
dnl
AC_CACHE_CHECK([for v8::ArrayBuffer::Allocator::NewDefaultAllocator], ac_cv_has_default_allocator, [
AC_LINK_IFELSE([AC_LANG_PROGRAM([
#include <v8.h>
], [ v8::ArrayBuffer::Allocator::NewDefaultAllocator(); ])], [
ac_cv_has_default_allocator=yes
], [
ac_cv_has_default_allocator=no
])
])
if test "x$ac_cv_has_default_allocator" = "xno"; then
AC_DEFINE([USE_INTERNAL_ALLOCATOR], [1],
[Define unless v8::ArrayBuffer::Allocator::NewDefaultAllocator is usable.])
fi
AC_LANG_RESTORE AC_LANG_RESTORE
LIBS=$old_LIBS LIBS=$old_LIBS
LDFLAGS="$old_LDFLAGS" LDFLAGS="$old_LDFLAGS"

View File

@ -71,6 +71,7 @@ struct v8js_jsext {
}; };
/* }}} */ /* }}} */
#ifdef USE_INTERNAL_ALLOCATOR
class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
public: public:
virtual void* Allocate(size_t length) { virtual void* Allocate(size_t length) {
@ -80,6 +81,7 @@ public:
virtual void* AllocateUninitialized(size_t length) { return malloc(length); } virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
virtual void Free(void* data, size_t) { free(data); } virtual void Free(void* data, size_t) { free(data); }
}; };
#endif /** USE_INTERNAL_ALLOCATOR */
static void v8js_free_storage(zend_object *object) /* {{{ */ static void v8js_free_storage(zend_object *object) /* {{{ */
@ -201,6 +203,10 @@ static void v8js_free_storage(zend_object *object) /* {{{ */
c->modules_base.~vector(); c->modules_base.~vector();
zval_ptr_dtor(&c->zval_snapshot_blob); zval_ptr_dtor(&c->zval_snapshot_blob);
#ifndef USE_INTERNAL_ALLOCATOR
delete c->create_params.array_buffer_allocator;
#endif
} }
/* }}} */ /* }}} */
@ -353,8 +359,12 @@ static PHP_METHOD(V8Js, __construct)
new (&c->create_params) v8::Isolate::CreateParams(); new (&c->create_params) v8::Isolate::CreateParams();
#ifdef USE_INTERNAL_ALLOCATOR
static ArrayBufferAllocator array_buffer_allocator; static ArrayBufferAllocator array_buffer_allocator;
c->create_params.array_buffer_allocator = &array_buffer_allocator; c->create_params.array_buffer_allocator = &array_buffer_allocator;
#else
c->create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
#endif
new (&c->snapshot_blob) v8::StartupData(); new (&c->snapshot_blob) v8::StartupData();
if (snapshot_blob) { if (snapshot_blob) {