Change BigInt zero representation to a constant (#4109)
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -56,6 +56,13 @@ JERRY_STATIC_ASSERT ((ECMA_VALUE_FALSE | (1 << ECMA_DIRECT_SHIFT)) == ECMA_VALUE
|
||||
&& ECMA_VALUE_FALSE != ECMA_VALUE_TRUE,
|
||||
only_the_lowest_bit_must_be_different_for_simple_value_true_and_false);
|
||||
|
||||
#if ENABLED (JERRY_BUILTIN_BIGINT)
|
||||
|
||||
JERRY_STATIC_ASSERT (ECMA_NULL_POINTER == (ECMA_BIGINT_ZERO & ~(ecma_value_t) ECMA_VALUE_TYPE_MASK),
|
||||
ecma_bigint_zero_must_be_encoded_as_null_pointer);
|
||||
|
||||
#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
|
||||
|
||||
/** \addtogroup ecma ECMA
|
||||
* @{
|
||||
*
|
||||
@@ -707,6 +714,9 @@ ecma_make_extended_primitive_value (const ecma_extended_primitive_t *primitve_p,
|
||||
uint32_t type) /**< ecma type of extended primitve value */
|
||||
{
|
||||
JERRY_ASSERT (primitve_p != NULL);
|
||||
#if ENABLED (JERRY_BUILTIN_BIGINT)
|
||||
JERRY_ASSERT (primitve_p != ECMA_BIGINT_POINTER_TO_ZERO);
|
||||
#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
|
||||
JERRY_ASSERT (type == ECMA_TYPE_BIGINT || type == ECMA_TYPE_ERROR);
|
||||
|
||||
return ecma_pointer_to_ecma_value (primitve_p) | type;
|
||||
@@ -839,6 +849,9 @@ ecma_get_object_from_value (ecma_value_t value) /**< ecma value */
|
||||
inline ecma_extended_primitive_t *JERRY_ATTR_PURE JERRY_ATTR_ALWAYS_INLINE
|
||||
ecma_get_extended_primitive_from_value (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
#if ENABLED (JERRY_BUILTIN_BIGINT)
|
||||
JERRY_ASSERT (value != ECMA_BIGINT_ZERO);
|
||||
#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
|
||||
JERRY_ASSERT (ecma_get_value_type_field (value) == ECMA_TYPE_BIGINT
|
||||
|| ecma_get_value_type_field (value) == ECMA_TYPE_ERROR);
|
||||
|
||||
@@ -889,7 +902,10 @@ ecma_copy_value (ecma_value_t value) /**< value description */
|
||||
#if ENABLED (JERRY_BUILTIN_BIGINT)
|
||||
case ECMA_TYPE_BIGINT:
|
||||
{
|
||||
ecma_ref_extended_primitive (ecma_get_extended_primitive_from_value (value));
|
||||
if (value != ECMA_BIGINT_ZERO)
|
||||
{
|
||||
ecma_ref_extended_primitive (ecma_get_extended_primitive_from_value (value));
|
||||
}
|
||||
return value;
|
||||
}
|
||||
#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
|
||||
@@ -1123,7 +1139,10 @@ ecma_free_value (ecma_value_t value) /**< value description */
|
||||
#if ENABLED (JERRY_BUILTIN_BIGINT)
|
||||
case ECMA_TYPE_BIGINT:
|
||||
{
|
||||
ecma_deref_bigint (ecma_get_extended_primitive_from_value (value));
|
||||
if (value != ECMA_BIGINT_ZERO)
|
||||
{
|
||||
ecma_deref_bigint (ecma_get_extended_primitive_from_value (value));
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
|
||||
|
||||
Reference in New Issue
Block a user