Implementation of ecma_make_simple_value and ecma_make_completion_value through bitwise operations (instead of through bit-fields).
This commit is contained in:
@@ -217,13 +217,17 @@ ecma_check_value_type_is_spec_defined (ecma_value_t value) /**< ecma-value */
|
|||||||
ecma_value_t
|
ecma_value_t
|
||||||
ecma_make_simple_value (ecma_simple_value_t value) /**< simple value */
|
ecma_make_simple_value (ecma_simple_value_t value) /**< simple value */
|
||||||
{
|
{
|
||||||
ecma_value_t ret_value = (ecma_value_t)
|
union
|
||||||
{
|
{
|
||||||
.value_type = ECMA_TYPE_SIMPLE,
|
ecma_value_t value;
|
||||||
.value = value
|
uint16_t uint16;
|
||||||
};
|
} u;
|
||||||
|
|
||||||
return ret_value;
|
u.uint16 = (uint16_t) (ECMA_TYPE_SIMPLE | (value << 2u));
|
||||||
|
|
||||||
|
JERRY_ASSERT (u.value.value_type == ECMA_TYPE_SIMPLE && u.value.value == value);
|
||||||
|
|
||||||
|
return u.value;
|
||||||
} /* ecma_make_simple_value */
|
} /* ecma_make_simple_value */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -421,13 +425,28 @@ ecma_make_completion_value (ecma_completion_type_t type, /**< type */
|
|||||||
|
|
||||||
JERRY_ASSERT (is_type_ok);
|
JERRY_ASSERT (is_type_ok);
|
||||||
|
|
||||||
ecma_completion_value_t ret_value = (ecma_completion_value_t)
|
union
|
||||||
{
|
{
|
||||||
.type = type,
|
ecma_value_t value;
|
||||||
.u.value = value,
|
uint16_t uint16;
|
||||||
};
|
} u_v;
|
||||||
|
|
||||||
return ret_value;
|
u_v.value = value;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
ecma_completion_value_t value;
|
||||||
|
uint32_t uint32;
|
||||||
|
} u_cv;
|
||||||
|
|
||||||
|
u_cv.uint32 = ((uint32_t) type | (uint32_t) (u_v.uint16 << 16u));
|
||||||
|
|
||||||
|
JERRY_ASSERT (u_cv.value.type == type &&
|
||||||
|
u_cv.value.padding == 0u &&
|
||||||
|
u_cv.value.u.value.value_type == value.value_type &&
|
||||||
|
u_cv.value.u.value.value == value.value);
|
||||||
|
|
||||||
|
return u_cv.value;
|
||||||
} /* ecma_make_completion_value */
|
} /* ecma_make_completion_value */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user