@@ -243,12 +243,83 @@ static PHP_METHOD(V8Object, SetIndex) {
243
243
RETURN_BOOL (maybe_res.FromJust ());
244
244
}
245
245
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) {
247
318
zval *php_v8_context_zv;
248
319
zval *php_v8_value_zv;
249
320
zval *php_v8_key_zv;
250
321
251
- zend_long attributes;
322
+ zend_long attributes = 0 ;
252
323
253
324
if (zend_parse_parameters (ZEND_NUM_ARGS (), " ooo|l" , &php_v8_context_zv, &php_v8_key_zv, &php_v8_value_zv, &attributes) == FAILURE) {
254
325
return ;
@@ -270,20 +341,20 @@ static PHP_METHOD(V8Object, ForceSet) {
270
341
v8::Local<v8::Value> local_value_to_set = php_v8_value_get_value_local (isolate, php_v8_value_value_to_set);
271
342
v8::Local<v8::Object> local_obj = php_v8_value_get_object_local (isolate, php_v8_value);
272
343
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);
274
345
275
346
attributes = attributes ? attributes & PHP_V8_PROPERTY_ATTRIBUTE_FLAGS : attributes;
276
347
277
348
PHP_V8_TRY_CATCH (isolate);
278
349
PHP_V8_INIT_ISOLATE_LIMITS_ON_OBJECT_VALUE (php_v8_value);
279
350
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));
284
355
285
356
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 " );
287
358
288
359
RETURN_BOOL (maybe.FromJust ())
289
360
}
@@ -1334,10 +1405,21 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_object_SetIndex, ZEND_RETURN_
1334
1405
ZEND_ARG_OBJ_INFO(0 , value, V8\\Value, 0 )
1335
1406
ZEND_END_ARG_INFO()
1336
1407
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 )
1339
1421
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 )
1341
1423
ZEND_ARG_OBJ_INFO(0 , value, V8\\Value, 0 )
1342
1424
ZEND_ARG_INFO(0 , attributes)
1343
1425
ZEND_END_ARG_INFO()
@@ -1510,7 +1592,9 @@ static const zend_function_entry php_v8_object_methods[] = {
1510
1592
PHP_ME (V8Object, GetContext, arginfo_v8_object_GetContext, ZEND_ACC_PUBLIC)
1511
1593
PHP_ME (V8Object, Set, arginfo_v8_object_Set, ZEND_ACC_PUBLIC)
1512
1594
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)
1514
1598
PHP_ME (V8Object, Get, arginfo_v8_object_Get, ZEND_ACC_PUBLIC)
1515
1599
PHP_ME (V8Object, GetIndex, arginfo_v8_object_GetIndex, ZEND_ACC_PUBLIC)
1516
1600
PHP_ME (V8Object, GetPropertyAttributes, arginfo_v8_object_GetPropertyAttributes, ZEND_ACC_PUBLIC)
0 commit comments