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:
Zoltan Herczeg
2020-08-06 12:17:39 +02:00
committed by GitHub
parent 7d479ad91b
commit 531f724926
8 changed files with 233 additions and 215 deletions
+21 -2
View File
@@ -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) */