Remove ecma_simple_value_t and refactor ecma_make_simple_value (#2135)
This patch removes all ecma_make_simple_value calls to make the code more easy to understand. Also removes the type ecma_simple_value_t which improves the performance in related code paths by calculating the value of new ecma_value_t is no longer needed. JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
committed by
Dániel Bátyai
parent
1007b63024
commit
e83de3accd
@@ -77,29 +77,6 @@ typedef enum
|
||||
ECMA_TYPE___MAX = ECMA_TYPE_ERROR /** highest value for ecma types */
|
||||
} ecma_type_t;
|
||||
|
||||
/**
|
||||
* Simple ecma values
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
/**
|
||||
* Empty value is implementation defined value, used for representing:
|
||||
* - empty (uninitialized) values
|
||||
* - immutable binding values
|
||||
* - special register or stack values for vm
|
||||
*/
|
||||
ECMA_SIMPLE_VALUE_EMPTY, /**< uninitialized value */
|
||||
ECMA_SIMPLE_VALUE_ERROR, /**< an error is currently thrown */
|
||||
ECMA_SIMPLE_VALUE_FALSE, /**< boolean false */
|
||||
ECMA_SIMPLE_VALUE_TRUE, /**< boolean true */
|
||||
ECMA_SIMPLE_VALUE_UNDEFINED, /**< undefined value */
|
||||
ECMA_SIMPLE_VALUE_NULL, /**< null value */
|
||||
ECMA_SIMPLE_VALUE_ARRAY_HOLE, /**< array hole, used for initialization of an array literal */
|
||||
ECMA_SIMPLE_VALUE_NOT_FOUND, /**< a special value returned by ecma_op_object_find */
|
||||
ECMA_SIMPLE_VALUE_REGISTER_REF, /**< register reference, a special "base" value for vm */
|
||||
ECMA_SIMPLE_VALUE__COUNT /** count of simple ecma values */
|
||||
} ecma_simple_value_t;
|
||||
|
||||
/**
|
||||
* Description of an ecma value
|
||||
*
|
||||
@@ -151,6 +128,35 @@ typedef int32_t ecma_integer_value_t;
|
||||
*/
|
||||
#define ECMA_DIRECT_SHIFT 4
|
||||
|
||||
/* ECMA make simple value */
|
||||
#define ECMA_MAKE_VALUE(value) \
|
||||
((((ecma_value_t) (value)) << ECMA_DIRECT_SHIFT) | ECMA_DIRECT_TYPE_SIMPLE_VALUE)
|
||||
|
||||
/**
|
||||
* Simple ecma values
|
||||
*/
|
||||
enum
|
||||
{
|
||||
/**
|
||||
* Empty value is implementation defined value, used for representing:
|
||||
* - empty (uninitialized) values
|
||||
* - immutable binding values
|
||||
* - special register or stack values for vm
|
||||
*/
|
||||
ECMA_VALUE_EMPTY = ECMA_MAKE_VALUE (0), /**< uninitialized value */
|
||||
ECMA_VALUE_ERROR = ECMA_MAKE_VALUE (1), /**< an error is currently thrown */
|
||||
ECMA_VALUE_FALSE = ECMA_MAKE_VALUE (2), /**< boolean false */
|
||||
ECMA_VALUE_TRUE = ECMA_MAKE_VALUE (3), /**< boolean true */
|
||||
ECMA_VALUE_UNDEFINED = ECMA_MAKE_VALUE (4), /**< undefined value */
|
||||
ECMA_VALUE_NULL = ECMA_MAKE_VALUE (5), /**< null value */
|
||||
ECMA_VALUE_ARRAY_HOLE = ECMA_MAKE_VALUE (6), /**< array hole, used for
|
||||
* initialization of an array literal */
|
||||
ECMA_VALUE_NOT_FOUND = ECMA_MAKE_VALUE (7), /**< a special value returned by
|
||||
* ecma_op_object_find */
|
||||
ECMA_VALUE_REGISTER_REF = ECMA_MAKE_VALUE (8), /**< register reference,
|
||||
* a special "base" value for vm */
|
||||
};
|
||||
|
||||
/**
|
||||
* Maximum integer number for an ecma value
|
||||
*/
|
||||
@@ -196,7 +202,7 @@ typedef int32_t ecma_integer_value_t;
|
||||
* Checks whether the error flag is set.
|
||||
*/
|
||||
#define ECMA_IS_VALUE_ERROR(value) \
|
||||
(unlikely ((value) == ecma_make_simple_value (ECMA_SIMPLE_VALUE_ERROR)))
|
||||
(unlikely ((value) == ECMA_VALUE_ERROR))
|
||||
|
||||
/**
|
||||
* Representation for native external pointer
|
||||
|
||||
@@ -52,8 +52,8 @@ JERRY_STATIC_ASSERT (sizeof (uintptr_t) > sizeof (ecma_value_t),
|
||||
|
||||
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
|
||||
|
||||
JERRY_STATIC_ASSERT ((ECMA_SIMPLE_VALUE_FALSE | 0x1) == ECMA_SIMPLE_VALUE_TRUE
|
||||
&& ECMA_SIMPLE_VALUE_FALSE != ECMA_SIMPLE_VALUE_TRUE,
|
||||
JERRY_STATIC_ASSERT ((ECMA_VALUE_FALSE | (1 << ECMA_DIRECT_SHIFT)) == ECMA_VALUE_TRUE
|
||||
&& ECMA_VALUE_FALSE != ECMA_VALUE_TRUE,
|
||||
only_the_lowest_bit_must_be_different_for_simple_value_true_and_false);
|
||||
|
||||
/**
|
||||
@@ -138,9 +138,9 @@ ecma_is_value_simple (ecma_value_t value) /**< ecma value */
|
||||
*/
|
||||
static inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_equal_to_simple_value (ecma_value_t value, /**< ecma value */
|
||||
ecma_simple_value_t simple_value) /**< simple value */
|
||||
ecma_value_t simple_value) /**< simple value */
|
||||
{
|
||||
return value == ecma_make_simple_value (simple_value);
|
||||
return value == simple_value;
|
||||
} /* ecma_is_value_equal_to_simple_value */
|
||||
|
||||
/**
|
||||
@@ -152,7 +152,7 @@ ecma_is_value_equal_to_simple_value (ecma_value_t value, /**< ecma value */
|
||||
inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_empty (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_SIMPLE_VALUE_EMPTY);
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_VALUE_EMPTY);
|
||||
} /* ecma_is_value_empty */
|
||||
|
||||
/**
|
||||
@@ -164,7 +164,7 @@ ecma_is_value_empty (ecma_value_t value) /**< ecma value */
|
||||
inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_undefined (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_VALUE_UNDEFINED);
|
||||
} /* ecma_is_value_undefined */
|
||||
|
||||
/**
|
||||
@@ -176,7 +176,7 @@ ecma_is_value_undefined (ecma_value_t value) /**< ecma value */
|
||||
inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_null (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_SIMPLE_VALUE_NULL);
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_VALUE_NULL);
|
||||
} /* ecma_is_value_null */
|
||||
|
||||
/**
|
||||
@@ -200,7 +200,7 @@ ecma_is_value_boolean (ecma_value_t value) /**< ecma value */
|
||||
inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_true (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_SIMPLE_VALUE_TRUE);
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_VALUE_TRUE);
|
||||
} /* ecma_is_value_true */
|
||||
|
||||
/**
|
||||
@@ -212,7 +212,7 @@ ecma_is_value_true (ecma_value_t value) /**< ecma value */
|
||||
inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_false (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_SIMPLE_VALUE_FALSE);
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_VALUE_FALSE);
|
||||
} /* ecma_is_value_false */
|
||||
|
||||
/**
|
||||
@@ -224,7 +224,7 @@ ecma_is_value_false (ecma_value_t value) /**< ecma value */
|
||||
inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_found (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
return value != ecma_make_simple_value (ECMA_SIMPLE_VALUE_NOT_FOUND);
|
||||
return value != ECMA_VALUE_NOT_FOUND;
|
||||
} /* ecma_is_value_found */
|
||||
|
||||
/**
|
||||
@@ -236,7 +236,7 @@ ecma_is_value_found (ecma_value_t value) /**< ecma value */
|
||||
inline bool __attr_const___ __attr_always_inline___
|
||||
ecma_is_value_array_hole (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_SIMPLE_VALUE_ARRAY_HOLE);
|
||||
return ecma_is_value_equal_to_simple_value (value, ECMA_VALUE_ARRAY_HOLE);
|
||||
} /* ecma_is_value_array_hole */
|
||||
|
||||
/**
|
||||
@@ -343,15 +343,6 @@ ecma_check_value_type_is_spec_defined (ecma_value_t value) /**< ecma value */
|
||||
|| ecma_is_value_object (value));
|
||||
} /* ecma_check_value_type_is_spec_defined */
|
||||
|
||||
/**
|
||||
* Simple value constructor
|
||||
*/
|
||||
inline ecma_value_t __attr_const___ __attr_always_inline___
|
||||
ecma_make_simple_value (const ecma_simple_value_t simple_value) /**< simple value */
|
||||
{
|
||||
return (((ecma_value_t) (simple_value)) << ECMA_DIRECT_SHIFT) | ECMA_DIRECT_TYPE_SIMPLE_VALUE;
|
||||
} /* ecma_make_simple_value */
|
||||
|
||||
/**
|
||||
* Creates an ecma value from the given raw boolean.
|
||||
*
|
||||
@@ -360,8 +351,7 @@ ecma_make_simple_value (const ecma_simple_value_t simple_value) /**< simple valu
|
||||
inline ecma_value_t __attr_const___ __attr_always_inline___
|
||||
ecma_make_boolean_value (bool boolean_value) /**< raw bool value from which the ecma value will be created */
|
||||
{
|
||||
return ecma_make_simple_value (boolean_value ? ECMA_SIMPLE_VALUE_TRUE
|
||||
: ECMA_SIMPLE_VALUE_FALSE);
|
||||
return boolean_value ? ECMA_VALUE_TRUE : ECMA_VALUE_FALSE;
|
||||
} /* ecma_make_boolean_value */
|
||||
|
||||
/**
|
||||
@@ -644,7 +634,7 @@ ecma_copy_value (ecma_value_t value) /**< value description */
|
||||
default:
|
||||
{
|
||||
JERRY_UNREACHABLE ();
|
||||
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
return ECMA_VALUE_UNDEFINED;
|
||||
}
|
||||
}
|
||||
} /* ecma_copy_value */
|
||||
|
||||
@@ -548,7 +548,7 @@ ecma_create_named_data_property (ecma_object_t *object_p, /**< object */
|
||||
uint8_t type_and_flags = ECMA_PROPERTY_TYPE_NAMEDDATA | prop_attributes;
|
||||
|
||||
ecma_property_value_t value;
|
||||
value.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
value.value = ECMA_VALUE_UNDEFINED;
|
||||
|
||||
return ecma_create_property (object_p, name_p, type_and_flags, value, out_prop_p);
|
||||
} /* ecma_create_named_data_property */
|
||||
@@ -1278,7 +1278,7 @@ ecma_make_empty_property_descriptor (void)
|
||||
ecma_property_descriptor_t prop_desc;
|
||||
|
||||
prop_desc.is_value_defined = false;
|
||||
prop_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
prop_desc.value = ECMA_VALUE_UNDEFINED;
|
||||
prop_desc.is_writable_defined = false;
|
||||
prop_desc.is_writable = false;
|
||||
prop_desc.is_enumerable_defined = false;
|
||||
|
||||
@@ -132,7 +132,6 @@ bool ecma_is_value_error_reference (ecma_value_t value) __attr_const___;
|
||||
|
||||
void ecma_check_value_type_is_spec_defined (ecma_value_t value);
|
||||
|
||||
ecma_value_t ecma_make_simple_value (const ecma_simple_value_t value) __attr_const___;
|
||||
ecma_value_t ecma_make_boolean_value (bool boolean_value) __attr_const___;
|
||||
ecma_value_t ecma_make_integer_value (ecma_integer_value_t integer_value) __attr_const___;
|
||||
ecma_value_t ecma_make_nan_value (void);
|
||||
|
||||
Reference in New Issue
Block a user