@@ -1403,40 +1403,58 @@ opfunc_private_set (ecma_value_t base, /**< this object */
1403
1403
ecma_value_t property , /**< property name */
1404
1404
ecma_value_t value ) /**< ecma value */
1405
1405
{
1406
- ecma_object_t * obj_p = ecma_get_object_from_value (base );
1406
+ ecma_value_t base_obj = ecma_op_to_object (base );
1407
+
1408
+ if (ECMA_IS_VALUE_ERROR (base_obj ))
1409
+ {
1410
+ return base_obj ;
1411
+ }
1412
+
1413
+ ecma_object_t * obj_p = ecma_get_object_from_value (base_obj );
1407
1414
ecma_string_t * prop_name_p = ecma_get_string_from_value (property );
1408
1415
ecma_string_t * private_key_p = NULL ;
1409
1416
1410
1417
ecma_property_t * prop_p = opfunc_find_private_element (obj_p , prop_name_p , & private_key_p , true);
1411
1418
1419
+ ecma_value_t result ;
1420
+
1412
1421
if (prop_p == NULL )
1413
1422
{
1414
- return ecma_raise_type_error (ECMA_ERR_CANNOT_WRITE_PRIVATE_MEMBER_TO_AN_OBJECT_WHOSE_CLASS_DID_NOT_DECLARE_IT );
1423
+ result = ecma_raise_type_error (ECMA_ERR_CANNOT_WRITE_PRIVATE_MEMBER_TO_AN_OBJECT_WHOSE_CLASS_DID_NOT_DECLARE_IT );
1415
1424
}
1416
-
1417
- if (* prop_p & ECMA_PROPERTY_FLAG_DATA )
1425
+ else if (* prop_p & ECMA_PROPERTY_FLAG_DATA )
1418
1426
{
1419
1427
JERRY_ASSERT (ecma_prop_name_is_symbol (private_key_p ));
1420
1428
1421
1429
if (private_key_p -> u .hash & ECMA_SYMBOL_FLAG_PRIVATE_INSTANCE_METHOD )
1422
1430
{
1423
- return ecma_raise_type_error (ECMA_ERR_PRIVATE_METHOD_IS_NOT_WRITABLE );
1431
+ result = ecma_raise_type_error (ECMA_ERR_PRIVATE_METHOD_IS_NOT_WRITABLE );
1432
+ }
1433
+ else
1434
+ {
1435
+ ecma_value_assign_value (& ECMA_PROPERTY_VALUE_PTR (prop_p )-> value , value );
1436
+ result = ecma_copy_value (value );
1424
1437
}
1425
-
1426
- ecma_value_assign_value (& ECMA_PROPERTY_VALUE_PTR (prop_p )-> value , value );
1427
- return ecma_copy_value (value );
1428
1438
}
1439
+ else
1440
+ {
1441
+ ecma_getter_setter_pointers_t * get_set_pair_p = ecma_get_named_accessor_property (ECMA_PROPERTY_VALUE_PTR (prop_p ));
1429
1442
1430
- ecma_getter_setter_pointers_t * get_set_pair_p = ecma_get_named_accessor_property (ECMA_PROPERTY_VALUE_PTR (prop_p ));
1443
+ if (get_set_pair_p -> setter_cp == JMEM_CP_NULL )
1444
+ {
1445
+ result = ecma_raise_type_error (ECMA_ERR_PRIVATE_FIELD_WAS_DEFINED_WITHOUT_A_SETTER );
1446
+ }
1447
+ else
1448
+ {
1449
+ ecma_object_t * setter_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t , get_set_pair_p -> setter_cp );
1431
1450
1432
- if (get_set_pair_p -> setter_cp == JMEM_CP_NULL )
1433
- {
1434
- return ecma_raise_type_error (ECMA_ERR_PRIVATE_FIELD_WAS_DEFINED_WITHOUT_A_SETTER );
1451
+ result = ecma_op_function_call (setter_p , base , & value , 1 );
1452
+ }
1435
1453
}
1436
1454
1437
- ecma_object_t * setter_p = ECMA_GET_NON_NULL_POINTER ( ecma_object_t , get_set_pair_p -> setter_cp );
1455
+ ecma_deref_object ( obj_p );
1438
1456
1439
- return ecma_op_function_call ( setter_p , base , & value , 1 ) ;
1457
+ return result ;
1440
1458
} /* opfunc_private_set */
1441
1459
1442
1460
/**
0 commit comments