@@ -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 )
13351406ZEND_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)
13431425ZEND_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)
0 commit comments