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