Skip to content
This repository was archived by the owner on Mar 29, 2024. It is now read-only.

Commit c2050e1

Browse files
authored
Merge pull request #3 from pinepain/upgrades
Remove deprecated v8 API calls
2 parents 5a31eab + 5618fdd commit c2050e1

25 files changed

+411
-78
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ include_directories(/usr/local/include/php/main)
1111
include_directories(/usr/local/include/php/sapi)
1212

1313
add_definitions(-DV8_DEPRECATION_WARNINGS)
14+
add_definitions(-DV8_IMMINENT_DEPRECATION_WARNINGS)
1415

1516
if(EXISTS "${CMAKE_SOURCE_DIR}/config.h")
1617
add_definitions(-DHAVE_CONFIG_H)

config.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ if test "$PHP_V8" != "no"; then
144144
ac_cv_suppress_register_warnings_flag="-Wno-deprecated-register"
145145

146146
AC_DEFINE([V8_DEPRECATION_WARNINGS], [1], [Enable compiler warnings when using V8_DEPRECATED apis.])
147+
AC_DEFINE([V8_IMMINENT_DEPRECATION_WARNINGS], [1], [Enable compiler warnings to make it easier to see what v8 apis will be deprecated (V8_DEPRECATED) soon.])
147148

148149
AC_LANG_RESTORE
149150
LIBS=$old_LIBS

src/php_v8_a.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ void php_v8_init()
2929
return;
3030
}
3131

32-
v8::V8::InitializeICU(); // TODO: check whether we actually initialized it
3332
// NOTE: if we use snapshot and extenal startup data then we have to initialize it (see https://codereview.chromium.org/315033002/)
3433
// v8::V8::InitializeExternalStartupData(NULL);
3534
v8::Platform *platform = v8::platform::CreateDefaultPlatform();

src/php_v8_date.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@ static PHP_METHOD(V8Date, __construct) {
4141

4242
PHP_V8_OBJECT_CONSTRUCT(getThis(), php_v8_context_zv, php_v8_context, php_v8_value);
4343

44-
v8::Local<v8::Date> local_date = v8::Date::New(isolate, time).As<v8::Date>();
44+
v8::MaybeLocal<v8::Value> maybe_local_date = v8::Date::New(context, time);
4545

46-
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(local_date, "Failed to create Date value");
46+
PHP_V8_THROW_VALUE_EXCEPTION_WHEN_EMPTY(maybe_local_date, "Failed to create Date value");
47+
48+
v8::Local<v8::Date> local_date = maybe_local_date.ToLocalChecked().As<v8::Date>();
4749

4850
ZVAL_COPY_VALUE(&php_v8_value->this_ptr, getThis());
4951
php_v8_object_store_self_ptr(isolate, local_date, php_v8_value);

src/php_v8_function.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ static PHP_METHOD(V8Function, GetScriptOrigin) {
417417

418418
v8::ScriptOrigin script_origin = local_function->GetScriptOrigin();
419419

420-
php_v8_create_script_origin(return_value, script_origin);
420+
php_v8_create_script_origin(return_value, context, script_origin);
421421
}
422422

423423

src/php_v8_isolate.cc

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,11 @@ static void php_v8_isolate_free(zend_object *object) {
161161

162162
zend_object_std_dtor(&php_v8_isolate->std);
163163

164-
if (php_v8_isolate->array_buffer_allocator) {
165-
delete php_v8_isolate->array_buffer_allocator;
166-
}
167-
168164
if (php_v8_isolate->create_params) {
165+
if (php_v8_isolate->create_params->array_buffer_allocator) {
166+
delete php_v8_isolate->create_params->array_buffer_allocator;
167+
}
168+
169169
delete php_v8_isolate->create_params;
170170
}
171171
}
@@ -182,10 +182,8 @@ static zend_object *php_v8_isolate_ctor(zend_class_entry *ce) {
182182
// TODO: inline? module init?
183183
php_v8_init();
184184

185-
php_v8_isolate->array_buffer_allocator = new ArrayBufferAllocator();
186185
php_v8_isolate->create_params = new v8::Isolate::CreateParams();
187-
188-
php_v8_isolate->create_params->array_buffer_allocator = php_v8_isolate->array_buffer_allocator;
186+
php_v8_isolate->create_params->array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
189187

190188
php_v8_isolate->weak_function_templates = new std::map<v8::Persistent<v8::FunctionTemplate> *, php_v8_callbacks_t *>();
191189
php_v8_isolate->weak_object_templates = new std::map<v8::Persistent<v8::ObjectTemplate> *, php_v8_callbacks_t *>();

src/php_v8_isolate.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,8 @@ extern php_v8_isolate_t * php_v8_isolate_fetch_object(zend_object *obj);
117117
} \
118118

119119

120-
class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
121-
public:
122-
virtual void* Allocate(size_t length) {
123-
void* data = AllocateUninitialized(length);
124-
return data == NULL ? data : memset(data, 0, length);
125-
}
126-
virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
127-
virtual void Free(void* data, size_t) { free(data); }
128-
};
129-
130120
struct _php_v8_isolate_t {
131121
v8::Isolate *isolate;
132-
ArrayBufferAllocator *array_buffer_allocator;
133122
v8::Isolate::CreateParams *create_params;
134123

135124
std::map<v8::Persistent<v8::FunctionTemplate>*, php_v8_callbacks_t *> *weak_function_templates;

src/php_v8_message.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void php_v8_message_create_from_message(zval *return_value, php_v8_isolate_t *ph
5050

5151
/* v8::Message::GetScriptOrigin */
5252
zval origin_zv;
53-
php_v8_create_script_origin(&origin_zv, message->GetScriptOrigin());
53+
php_v8_create_script_origin(&origin_zv, context, message->GetScriptOrigin());
5454
zend_update_property(this_ce, return_value, ZEND_STRL("script_origin"), &origin_zv);
5555
zval_ptr_dtor(&origin_zv);
5656

src/php_v8_object.cc

Lines changed: 96 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,83 @@ static PHP_METHOD(V8Object, SetIndex) {
243243
RETURN_BOOL(maybe_res.FromJust());
244244
}
245245

246-
static PHP_METHOD(V8Object, ForceSet) {
246+
static PHP_METHOD(V8Object, CreateDataProperty) {
247+
zval *php_v8_context_zv;
248+
zval *php_v8_key_or_index_zv;
249+
zval *php_v8_value_zv;
250+
251+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ooo", &php_v8_context_zv, &php_v8_key_or_index_zv, &php_v8_value_zv) == FAILURE) {
252+
return;
253+
}
254+
255+
PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
256+
PHP_V8_VALUE_FETCH_WITH_CHECK(php_v8_key_or_index_zv, php_v8_key_or_index);
257+
PHP_V8_VALUE_FETCH_WITH_CHECK(php_v8_value_zv, php_v8_value_value_to_set);
258+
PHP_V8_CONTEXT_FETCH_WITH_CHECK(php_v8_context_zv, php_v8_context);
259+
260+
PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_context);
261+
PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_key_or_index);
262+
PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_value_value_to_set);
263+
264+
PHP_V8_ENTER_STORED_ISOLATE(php_v8_value);
265+
PHP_V8_ENTER_CONTEXT(php_v8_context);
266+
267+
v8::Local<v8::Object> local_obj = php_v8_value_get_object_local(isolate, php_v8_value);
268+
v8::Local<v8::Name> local_key_or_index = php_v8_value_get_name_local(isolate, php_v8_key_or_index);
269+
v8::Local<v8::Value> local_value_to_set = php_v8_value_get_value_local(isolate, php_v8_value_value_to_set);
270+
271+
PHP_V8_TRY_CATCH(isolate);
272+
PHP_V8_INIT_ISOLATE_LIMITS_ON_OBJECT_VALUE(php_v8_value);
273+
274+
v8::Maybe<bool> maybe_res = local_obj->CreateDataProperty(context, local_key_or_index, local_value_to_set);
275+
276+
PHP_V8_MAYBE_CATCH(php_v8_context, try_catch);
277+
PHP_V8_THROW_EXCEPTION_WHEN_NOTHING(maybe_res, "Failed to create data property");
278+
279+
RETURN_BOOL(maybe_res.FromJust());
280+
}
281+
282+
static PHP_METHOD(V8Object, CreateDataPropertyIndex) {
283+
zval *php_v8_context_zv;
284+
zend_long index;
285+
zval *php_v8_value_zv;
286+
287+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "olo", &php_v8_context_zv, &index, &php_v8_value_zv) == FAILURE) {
288+
return;
289+
}
290+
291+
PHP_V8_CHECK_UINT32_RANGE(index, "Index is out of range (should be valid uint32 value)");
292+
293+
PHP_V8_VALUE_FETCH_WITH_CHECK(getThis(), php_v8_value);
294+
PHP_V8_VALUE_FETCH_WITH_CHECK(php_v8_value_zv, php_v8_value_value_to_set);
295+
PHP_V8_CONTEXT_FETCH_WITH_CHECK(php_v8_context_zv, php_v8_context);
296+
297+
PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_context);
298+
PHP_V8_DATA_ISOLATES_CHECK(php_v8_value, php_v8_value_value_to_set);
299+
300+
PHP_V8_ENTER_STORED_ISOLATE(php_v8_value);
301+
PHP_V8_ENTER_CONTEXT(php_v8_context);
302+
303+
v8::Local<v8::Object> local_obj = php_v8_value_get_object_local(isolate, php_v8_value);
304+
v8::Local<v8::Value> local_value_to_set = php_v8_value_get_value_local(isolate, php_v8_value_value_to_set);
305+
306+
PHP_V8_TRY_CATCH(isolate);
307+
PHP_V8_INIT_ISOLATE_LIMITS_ON_OBJECT_VALUE(php_v8_value);
308+
309+
v8::Maybe<bool> maybe_res = local_obj->CreateDataProperty(context, static_cast<uint32_t>(index), local_value_to_set);
310+
311+
PHP_V8_MAYBE_CATCH(php_v8_context, try_catch);
312+
PHP_V8_THROW_EXCEPTION_WHEN_NOTHING(maybe_res, "Failed to create data property");
313+
314+
RETURN_BOOL(maybe_res.FromJust());
315+
}
316+
317+
static PHP_METHOD(V8Object, DefineOwnProperty) {
247318
zval *php_v8_context_zv;
248319
zval *php_v8_value_zv;
249320
zval *php_v8_key_zv;
250321

251-
zend_long attributes;
322+
zend_long attributes = 0;
252323

253324
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ooo|l", &php_v8_context_zv, &php_v8_key_zv, &php_v8_value_zv, &attributes) == FAILURE) {
254325
return;
@@ -270,20 +341,20 @@ static PHP_METHOD(V8Object, ForceSet) {
270341
v8::Local<v8::Value> local_value_to_set = php_v8_value_get_value_local(isolate, php_v8_value_value_to_set);
271342
v8::Local<v8::Object> local_obj = php_v8_value_get_object_local(isolate, php_v8_value);
272343

273-
v8::Local<v8::String> local_key = php_v8_value_get_string_local(isolate, php_v8_key);
344+
v8::Local<v8::Name> local_name = php_v8_value_get_name_local(isolate, php_v8_key);
274345

275346
attributes = attributes ? attributes & PHP_V8_PROPERTY_ATTRIBUTE_FLAGS : attributes;
276347

277348
PHP_V8_TRY_CATCH(isolate);
278349
PHP_V8_INIT_ISOLATE_LIMITS_ON_OBJECT_VALUE(php_v8_value);
279350

280-
v8::Maybe<bool> maybe = local_obj->ForceSet(context,
281-
local_key,
282-
local_value_to_set,
283-
static_cast<v8::PropertyAttribute>(attributes));
351+
v8::Maybe<bool> maybe = local_obj->DefineOwnProperty(context,
352+
local_name,
353+
local_value_to_set,
354+
static_cast<v8::PropertyAttribute>(attributes));
284355

285356
PHP_V8_MAYBE_CATCH(php_v8_context, try_catch);
286-
PHP_V8_THROW_EXCEPTION_WHEN_NOTHING(maybe, "Failed to set persistent");
357+
PHP_V8_THROW_EXCEPTION_WHEN_NOTHING(maybe, "Failed to define own property");
287358

288359
RETURN_BOOL(maybe.FromJust())
289360
}
@@ -1334,10 +1405,21 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_SetIndex, ZEND_RETURN_
13341405
ZEND_ARG_OBJ_INFO(0, value, V8\\Value, 0)
13351406
ZEND_END_ARG_INFO()
13361407

1337-
// TODO: subject of change due to deprecateion
1338-
ZEND_BEGIN_ARG_INFO_EX(arginfo_v8_object_ForceSet, ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, 3)
1408+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_CreateDataProperty, ZEND_RETURN_VALUE, 3, _IS_BOOL, NULL, 0)
1409+
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
1410+
ZEND_ARG_OBJ_INFO(0, key, V8\\NameValue, 0)
1411+
ZEND_ARG_OBJ_INFO(0, value, V8\\Value, 0)
1412+
ZEND_END_ARG_INFO()
1413+
1414+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_CreateDataPropertyIndex, ZEND_RETURN_VALUE, 3, _IS_BOOL, NULL, 0)
1415+
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
1416+
ZEND_ARG_TYPE_INFO(0, key, IS_LONG, 0)
1417+
ZEND_ARG_OBJ_INFO(0, value, V8\\Value, 0)
1418+
ZEND_END_ARG_INFO()
1419+
1420+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_DefineOwnProperty, ZEND_RETURN_VALUE, 3, _IS_BOOL, NULL, 0)
13391421
ZEND_ARG_OBJ_INFO(0, context, V8\\Context, 0)
1340-
ZEND_ARG_INFO(0, key_or_index)
1422+
ZEND_ARG_OBJ_INFO(0, key, V8\\NameValue, 0)
13411423
ZEND_ARG_OBJ_INFO(0, value, V8\\Value, 0)
13421424
ZEND_ARG_INFO(0, attributes)
13431425
ZEND_END_ARG_INFO()
@@ -1510,7 +1592,9 @@ static const zend_function_entry php_v8_object_methods[] = {
15101592
PHP_ME(V8Object, GetContext, arginfo_v8_object_GetContext, ZEND_ACC_PUBLIC)
15111593
PHP_ME(V8Object, Set, arginfo_v8_object_Set, ZEND_ACC_PUBLIC)
15121594
PHP_ME(V8Object, SetIndex, arginfo_v8_object_SetIndex, ZEND_ACC_PUBLIC)
1513-
PHP_ME(V8Object, ForceSet, arginfo_v8_object_ForceSet, ZEND_ACC_PUBLIC)
1595+
PHP_ME(V8Object, CreateDataProperty, arginfo_v8_object_CreateDataProperty, ZEND_ACC_PUBLIC)
1596+
PHP_ME(V8Object, CreateDataPropertyIndex, arginfo_v8_object_CreateDataPropertyIndex, ZEND_ACC_PUBLIC)
1597+
PHP_ME(V8Object, DefineOwnProperty, arginfo_v8_object_DefineOwnProperty, ZEND_ACC_PUBLIC)
15141598
PHP_ME(V8Object, Get, arginfo_v8_object_Get, ZEND_ACC_PUBLIC)
15151599
PHP_ME(V8Object, GetIndex, arginfo_v8_object_GetIndex, ZEND_ACC_PUBLIC)
15161600
PHP_ME(V8Object, GetPropertyAttributes, arginfo_v8_object_GetPropertyAttributes, ZEND_ACC_PUBLIC)

src/php_v8_script.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ static PHP_METHOD(V8Script, __construct)
103103
origin = new v8::ScriptOrigin(v8::Undefined(isolate));
104104

105105
zval origin_zv;
106-
php_v8_create_script_origin(&origin_zv, *origin);
106+
php_v8_create_script_origin(&origin_zv, context, *origin);
107107
zend_update_property(this_ce, getThis(), ZEND_STRL("origin"), &origin_zv);
108108

109109
zval_ptr_dtor(&origin_zv);

0 commit comments

Comments
 (0)