Skip to content
This repository was archived by the owner on Mar 29, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ services:

env:
global:
- V8=6.5.144
- V8=6.6.313
matrix:
- PHP=7.2
- PHP=7.2 TEST_PHP_ARGS=-m
Expand Down
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ project(php-v8)

# NOTE: This CMake file is just for syntax highlighting in CLion

include_directories(/usr/local/opt/v8@6.5/include)
include_directories(/usr/local/opt/v8@6.5/include/libplatform)
include_directories(/usr/local/opt/v8@6.6/include)
include_directories(/usr/local/opt/v8@6.6/include/libplatform)

include_directories(/usr/local/include/php)
include_directories(/usr/local/include/php/TSRM)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ on top of php-v8 extension and makes embedding JavaScript in PHP easier.
### Requirements

#### V8
You will need a recent v8 Google JavaScript engine version installed. At this time v8 >= 6.5.144 required.
You will need a recent v8 Google JavaScript engine version installed. At this time v8 >= 6.6.313 required.

#### PHP
This extension is PHP7-only. It works and tested with both PHP 7.0 and PHP 7.1.
Expand Down
3 changes: 2 additions & 1 deletion config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ if test "$PHP_V8" != "no"; then
SEARCH_PATH="/usr/local /usr"
SEARCH_FOR="include/v8.h"

V8_MIN_API_VERSION_STR=6.5.144
V8_MIN_API_VERSION_STR=6.6.313

DESIRED_V8_VERSION=`echo "${V8_MIN_API_VERSION_STR}" | $AWK 'BEGIN { FS = "."; } { printf "%s.%s", [$]1, [$]2;}'`

Expand Down Expand Up @@ -204,6 +204,7 @@ if test "$PHP_V8" != "no"; then
src/php_v8_date.cc \
src/php_v8_regexp.cc \
src/php_v8_promise.cc \
src/php_v8_promise_resolver.cc \
src/php_v8_proxy.cc \
src/php_v8_number_object.cc \
src/php_v8_boolean_object.cc \
Expand Down
4 changes: 2 additions & 2 deletions scripts/provision/provision.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ echo Provisioning...
# Add Ondřej Surý's PPA with co-installable PHP versions:
sudo add-apt-repository -y ppa:ondrej/php
# Add libv8 PPA:
sudo add-apt-repository ppa:pinepain/libv8-6.5
sudo add-apt-repository ppa:pinepain/libv8-6.6

# Let's update packages list:
sudo apt-get update
Expand All @@ -19,7 +19,7 @@ sudo apt-get install -y git htop curl pkgconf


# Build and development requirements
sudo apt-get install -y libv8-6.5 libv8-6.5-dev libv8-6.5-dbg
sudo apt-get install -y libv8-6.6 libv8-6.6-dev libv8-6.6-dbg
sudo apt-get install -y dh-make valgrind
sudo apt-get install -y libssl-dev openssl
sudo apt-get install -y php7.2 php7.2-cli php7.2-dev php7.2-fpm
Expand Down
2 changes: 1 addition & 1 deletion scripts/test_v8/hello_world.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ void weak_callback(const v8::WeakCallbackInfo<v8::Persistent<v8::String>>& data)

int main(int argc, char* argv[]) {
// Initialize V8.
v8::V8::InitializeICU();
//v8::V8::InitializeICU();

std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
v8::V8::InitializePlatform(platform.get());
Expand Down
2 changes: 1 addition & 1 deletion scripts/test_v8/hello_world_build_deb.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

ROOT=/opt/libv8-6.5
ROOT=/opt/libv8-6.6
LIB_DIR=$ROOT/lib/

SRC_DIR=$ROOT
Expand Down
2 changes: 1 addition & 1 deletion scripts/test_v8/hello_world_build_osx.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

ROOT=/usr/local/opt/v8@6.5
ROOT=/usr/local/opt/v8@6.6
LIB_DIR=$ROOT/lib/

SRC_DIR=$ROOT
Expand Down
8 changes: 8 additions & 0 deletions src/php_v8_exceptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,15 @@ extern void php_v8_throw_try_catch_exception(php_v8_context_t *php_v8_context, v
return; \
}

#define PHP_V8_THROW_EXCEPTION_WHEN_UNDEFINED_CE(value, message, ce) \
if ((value)->IsUndefined()) { \
PHP_V8_THROW_EXCEPTION_CE(message, ce); \
return; \
}

#define PHP_V8_THROW_VALUE_EXCEPTION_WHEN_NOTHING(value, message) PHP_V8_THROW_EXCEPTION_WHEN_NOTHING_CE((value), (message), php_v8_value_exception_class_entry)
#define PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(value, message) PHP_V8_THROW_EXCEPTION_WHEN_EMPTY_CE((value), (message), php_v8_value_exception_class_entry)
#define PHP_V8_THROW_VALUE_EXCEPTION_WHEN_UNDEFINED(value, message) PHP_V8_THROW_EXCEPTION_WHEN_UNDEFINED_CE((value), (message), php_v8_value_exception_class_entry)


#define PHP_V8_THROW_EXCEPTION_WHEN_NOTHING(value, message) \
Expand All @@ -97,6 +104,7 @@ extern void php_v8_throw_try_catch_exception(php_v8_context_t *php_v8_context, v
return; \
}


#define PHP_V8_THROW_EXCEPTION_WHEN_LIMITS_HIT(php_v8_context) \
if ((php_v8_context)->php_v8_isolate->limits.time_limit_hit || (php_v8_context)->php_v8_isolate->limits.memory_limit_hit) { \
php_v8_throw_try_catch_exception((php_v8_context), NULL); \
Expand Down
16 changes: 12 additions & 4 deletions src/php_v8_object.cc
Original file line number Diff line number Diff line change
Expand Up @@ -614,14 +614,17 @@ static PHP_METHOD(Object, getPropertyNames) {
zend_long mode = static_cast<zend_long>(v8::KeyCollectionMode::kOwnOnly);
zend_long property_filter = static_cast<zend_long>(v8::PropertyFilter::ALL_PROPERTIES);
zend_long index_filter = static_cast<zend_long>(v8::IndexFilter::kIncludeIndices);
zend_bool convert_to_strings = '\0';

if (zend_parse_parameters(ZEND_NUM_ARGS(), "o|lll", &context_zv, &mode, &property_filter, &index_filter) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o|lllb",
&context_zv, &mode, &property_filter, &index_filter, &convert_to_strings) == FAILURE) {
return;
}

mode = mode ? mode & PHP_V8_KEY_COLLECTION_MODE_FLAGS : mode;
property_filter = property_filter ? property_filter & PHP_V8_PROPERTY_FILTER_FLAGS : property_filter;
index_filter = index_filter ? index_filter & PHP_V8_INDEX_FILTER_FLAGS : index_filter;
v8::KeyConversionMode key_conversion = convert_to_strings ? v8::KeyConversionMode::kConvertToString : v8::KeyConversionMode::kKeepNumbers;

PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
PHP_V8_CONTEXT_FETCH_WITH_CHECK(context_zv, php_v8_context);
Expand All @@ -639,7 +642,8 @@ static PHP_METHOD(Object, getPropertyNames) {
v8::MaybeLocal<v8::Array> maybe_local_array = local_object->GetPropertyNames(context,
static_cast<v8::KeyCollectionMode>(mode),
static_cast<v8::PropertyFilter >(property_filter),
static_cast<v8::IndexFilter>(index_filter));
static_cast<v8::IndexFilter>(index_filter),
key_conversion);

PHP_V8_MAYBE_CATCH(php_v8_context, try_catch);
PHP_V8_THROW_EXCEPTION_WHEN_EMPTY(maybe_local_array, "Failed to get property names")
Expand All @@ -652,11 +656,13 @@ static PHP_METHOD(Object, getPropertyNames) {
static PHP_METHOD(Object, getOwnPropertyNames) {
zval *context_zv;
zend_long filter = static_cast<zend_long>(v8::PropertyFilter::ALL_PROPERTIES);
zend_bool convert_to_strings = '\0';

if (zend_parse_parameters(ZEND_NUM_ARGS(), "o|l", &context_zv, &filter) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o|lb", &context_zv, &filter, &convert_to_strings) == FAILURE) {
return;
}
filter = filter ? filter & PHP_V8_PROPERTY_FILTER_FLAGS : filter;
v8::KeyConversionMode key_conversion = convert_to_strings ? v8::KeyConversionMode::kConvertToString : v8::KeyConversionMode::kKeepNumbers;

PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
PHP_V8_CONTEXT_FETCH_WITH_CHECK(context_zv, php_v8_context);
Expand All @@ -671,7 +677,7 @@ static PHP_METHOD(Object, getOwnPropertyNames) {
PHP_V8_TRY_CATCH(isolate);
PHP_V8_INIT_ISOLATE_LIMITS_ON_OBJECT_VALUE(php_v8_value);

v8::MaybeLocal<v8::Array> maybe_local_array = local_object->GetOwnPropertyNames(context, static_cast<v8::PropertyFilter >(filter));
v8::MaybeLocal<v8::Array> maybe_local_array = local_object->GetOwnPropertyNames(context, static_cast<v8::PropertyFilter >(filter), key_conversion);

PHP_V8_MAYBE_CATCH(php_v8_context, try_catch);
PHP_V8_THROW_EXCEPTION_WHEN_EMPTY(maybe_local_array, "Failed to get own property names")
Expand Down Expand Up @@ -1372,11 +1378,13 @@ PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_getPropertyNames, ZEND_RET
ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, property_filter, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, index_filter, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, convert_to_strings, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_getOwnPropertyNames, ZEND_RETURN_VALUE, 1, V8\\ArrayObject, 0)
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
ZEND_ARG_TYPE_INFO(0, filter, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, convert_to_strings, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_getPrototype, ZEND_RETURN_VALUE, 0, V8\\Value, 0)
Expand Down
64 changes: 0 additions & 64 deletions src/php_v8_promise.cc
Original file line number Diff line number Diff line change
Expand Up @@ -47,58 +47,6 @@ static PHP_METHOD(Promise, __construct) {
php_v8_value->persistent->Reset(isolate, local_resolver);
}

static PHP_METHOD(Promise, resolve) {
zval *php_v8_context_zv;
zval *php_v8_rvalue_zv;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "oo", &php_v8_context_zv, &php_v8_rvalue_zv) == FAILURE) {
return;
}

PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
PHP_V8_CONTEXT_FETCH_WITH_CHECK(php_v8_context_zv, php_v8_context);
PHP_V8_VALUE_FETCH_WITH_CHECK(php_v8_rvalue_zv, php_v8_rvalue);

PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_context);
PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_rvalue);

PHP_V8_ENTER_STORED_ISOLATE(php_v8_value);
PHP_V8_ENTER_CONTEXT(php_v8_context);

v8::Local<v8::Promise::Resolver> local_resolver = php_v8_value_get_local_as<v8::Promise::Resolver>(php_v8_value);
v8::Local<v8::Value> local_rvalue = php_v8_value_get_local_as<v8::Value>(php_v8_rvalue);

v8::Maybe<bool> maybe_resolved = local_resolver->Resolve(context, local_rvalue);

PHP_V8_THROW_VALUE_EXCEPTION_WHEN_NOTHING(maybe_resolved, "Failed to resolve a promise");
}

static PHP_METHOD(Promise, reject) {
zval *php_v8_context_zv;
zval *php_v8_rvalue_zv;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "oo", &php_v8_context_zv, &php_v8_rvalue_zv) == FAILURE) {
return;
}

PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
PHP_V8_CONTEXT_FETCH_WITH_CHECK(php_v8_context_zv, php_v8_context);
PHP_V8_VALUE_FETCH_WITH_CHECK(php_v8_rvalue_zv, php_v8_rvalue);

PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_context);
PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_rvalue);

PHP_V8_ENTER_STORED_ISOLATE(php_v8_value);
PHP_V8_ENTER_CONTEXT(php_v8_context);

v8::Local<v8::Promise::Resolver> local_resolver = php_v8_value_get_local_as<v8::Promise::Resolver>(php_v8_value);
v8::Local<v8::Value> local_rvalue = php_v8_value_get_local_as<v8::Value>(php_v8_rvalue);

v8::Maybe<bool> maybe_rejected = local_resolver->Reject(context, local_rvalue);

PHP_V8_THROW_VALUE_EXCEPTION_WHEN_NOTHING(maybe_rejected, "Failed to reject a promise");
}

static PHP_METHOD(Promise, catch) {
zval *php_v8_context_zv;
zval *php_v8_function_zv;
Expand Down Expand Up @@ -209,16 +157,6 @@ PHP_V8_ZEND_BEGIN_ARG_WITH_CONSTRUCTOR_INFO_EX(arginfo___construct, 1)
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
ZEND_END_ARG_INFO()

PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_VOID_INFO_EX(arginfo_resolve, 2)
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
ZEND_ARG_OBJ_INFO(0, value, V8\\Value, 0)
ZEND_END_ARG_INFO()

PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_VOID_INFO_EX(arginfo_reject, 2)
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
ZEND_ARG_OBJ_INFO(0, value, V8\\Value, 0)
ZEND_END_ARG_INFO()

PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_catch, ZEND_RETURN_VALUE, 2, V8\\PromiseObject, 0)
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
ZEND_ARG_OBJ_INFO(0, handler, V8\\FunctionObject, 0)
Expand All @@ -241,8 +179,6 @@ ZEND_END_ARG_INFO()

static const zend_function_entry php_v8_promise_methods[] = {
PHP_V8_ME(Promise, __construct, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
PHP_V8_ME(Promise, resolve, ZEND_ACC_PUBLIC)
PHP_V8_ME(Promise, reject, ZEND_ACC_PUBLIC)
PHP_V8_ME(Promise, catch, ZEND_ACC_PUBLIC)
PHP_V8_ME(Promise, then, ZEND_ACC_PUBLIC)
PHP_V8_ME(Promise, hasHandler, ZEND_ACC_PUBLIC)
Expand Down
1 change: 0 additions & 1 deletion src/php_v8_promise.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ extern "C" {
}

extern zend_class_entry* php_v8_promise_class_entry;
extern zend_class_entry* php_v8_promise_flags_class_entry;


PHP_MINIT_FUNCTION(php_v8_promise);
Expand Down
Loading