Remove 'ecma_completion_value_t'
Remove ecma_completion_value_t, and add an extra bit to ecma_value_t to represent errors. From the long list of completion types only normal and error remained. JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
committed by
László Langó
parent
c25d8617a5
commit
b2426a7a94
@@ -34,34 +34,30 @@
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.8.1
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_less_than (ecma_value_t left_value, /**< left value */
|
||||
ecma_value_t right_value) /**< right value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ECMA_TRY_CATCH (compare_result,
|
||||
ecma_op_abstract_relational_compare (left_value, right_value, true),
|
||||
ret_value);
|
||||
|
||||
ecma_simple_value_t res;
|
||||
|
||||
if (ecma_is_value_undefined (compare_result))
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (ecma_is_value_boolean (compare_result));
|
||||
|
||||
res = (ecma_is_value_true (compare_result) ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
|
||||
ret_value = compare_result;
|
||||
}
|
||||
|
||||
ret_value = ecma_make_simple_completion_value (res);
|
||||
|
||||
ECMA_FINALIZE (compare_result);
|
||||
|
||||
return ret_value;
|
||||
@@ -72,34 +68,30 @@ opfunc_less_than (ecma_value_t left_value, /**< left value */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.8.2
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_greater_than (ecma_value_t left_value, /**< left value */
|
||||
ecma_value_t right_value) /**< right value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ECMA_TRY_CATCH (compare_result,
|
||||
ecma_op_abstract_relational_compare (right_value, left_value, false),
|
||||
ret_value);
|
||||
|
||||
ecma_simple_value_t res;
|
||||
|
||||
if (ecma_is_value_undefined (compare_result))
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (ecma_is_value_boolean (compare_result));
|
||||
|
||||
res = (ecma_is_value_true (compare_result) ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
|
||||
ret_value = compare_result;
|
||||
}
|
||||
|
||||
ret_value = ecma_make_simple_completion_value (res);
|
||||
|
||||
ECMA_FINALIZE (compare_result);
|
||||
|
||||
return ret_value;
|
||||
@@ -110,24 +102,22 @@ opfunc_greater_than (ecma_value_t left_value, /**< left value */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.8.3
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_less_or_equal_than (ecma_value_t left_value, /**< left value */
|
||||
ecma_value_t right_value) /**< right value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ECMA_TRY_CATCH (compare_result,
|
||||
ecma_op_abstract_relational_compare (right_value, left_value, false),
|
||||
ret_value);
|
||||
|
||||
ecma_simple_value_t res;
|
||||
|
||||
if (ecma_is_value_undefined (compare_result))
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -135,16 +125,14 @@ opfunc_less_or_equal_than (ecma_value_t left_value, /**< left value */
|
||||
|
||||
if (ecma_is_value_true (compare_result))
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_TRUE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
ret_value = ecma_make_simple_completion_value (res);
|
||||
|
||||
ECMA_FINALIZE (compare_result);
|
||||
|
||||
return ret_value;
|
||||
@@ -155,24 +143,22 @@ opfunc_less_or_equal_than (ecma_value_t left_value, /**< left value */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.8.4
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_greater_or_equal_than (ecma_value_t left_value, /**< left value */
|
||||
ecma_value_t right_value) /**< right value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ECMA_TRY_CATCH (compare_result,
|
||||
ecma_op_abstract_relational_compare (left_value, right_value, true),
|
||||
ret_value);
|
||||
|
||||
ecma_simple_value_t res;
|
||||
|
||||
if (ecma_is_value_undefined (compare_result))
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -180,16 +166,14 @@ opfunc_greater_or_equal_than (ecma_value_t left_value, /**< left value */
|
||||
|
||||
if (ecma_is_value_true (compare_result))
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
res = ECMA_SIMPLE_VALUE_TRUE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
ret_value = ecma_make_simple_completion_value (res);
|
||||
|
||||
ECMA_FINALIZE (compare_result);
|
||||
|
||||
return ret_value;
|
||||
@@ -200,18 +184,18 @@ opfunc_greater_or_equal_than (ecma_value_t left_value, /**< left value */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.8.6
|
||||
*
|
||||
* @return completion value
|
||||
* returned value must be freed with ecma_free_completion_value.
|
||||
* @return ecma value
|
||||
* returned value must be freed with ecma_free_value.
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_instanceof (ecma_value_t left_value, /**< left value */
|
||||
ecma_value_t right_value) /**< right value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
if (!ecma_is_value_object (right_value))
|
||||
{
|
||||
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||
ret_value = ecma_raise_type_error ("");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -221,7 +205,7 @@ opfunc_instanceof (ecma_value_t left_value, /**< left value */
|
||||
ecma_op_object_has_instance (right_value_obj_p, left_value),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_make_normal_completion_value (is_instance_of);
|
||||
ret_value = is_instance_of;
|
||||
|
||||
ECMA_FINALIZE (is_instance_of);
|
||||
}
|
||||
@@ -234,38 +218,35 @@ opfunc_instanceof (ecma_value_t left_value, /**< left value */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.8.7
|
||||
*
|
||||
* @return completion value
|
||||
* returned value must be freed with ecma_free_completion_value.
|
||||
* @return ecma value
|
||||
* returned value must be freed with ecma_free_value.
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_in (ecma_value_t left_value, /**< left value */
|
||||
ecma_value_t right_value) /**< right value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
if (!ecma_is_value_object (right_value))
|
||||
{
|
||||
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||
ret_value = ecma_raise_type_error ("");
|
||||
}
|
||||
else
|
||||
{
|
||||
ECMA_TRY_CATCH (str_left_value, ecma_op_to_string (left_value), ret_value);
|
||||
|
||||
ecma_simple_value_t is_in = ECMA_SIMPLE_VALUE_UNDEFINED;
|
||||
ecma_string_t *left_value_prop_name_p = ecma_get_string_from_value (str_left_value);
|
||||
ecma_object_t *right_value_obj_p = ecma_get_object_from_value (right_value);
|
||||
|
||||
if (ecma_op_object_get_property (right_value_obj_p, left_value_prop_name_p) != NULL)
|
||||
{
|
||||
is_in = ECMA_SIMPLE_VALUE_TRUE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
is_in = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
|
||||
ret_value = ecma_make_simple_completion_value (is_in);
|
||||
|
||||
ECMA_FINALIZE (str_left_value);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user