Implementation of ecma_make_simple_value and ecma_make_completion_value through bitwise operations (instead of through bit-fields).

This commit is contained in:
Ruben Ayrapetyan
2014-11-20 15:30:33 +03:00
parent 76aab95aac
commit d7764dfc6e
+29 -10
View File
@@ -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 */
/** /**