Partially implementing ToNumber operation.
This commit is contained in:
@@ -204,7 +204,7 @@ opfunc_jmp (OPCODE opdata, struct __int_data *int_data)
|
|||||||
* See also: ECMA-262 v5, 11.13.1
|
* See also: ECMA-262 v5, 11.13.1
|
||||||
*
|
*
|
||||||
* @return completion value
|
* @return completion value
|
||||||
* Returned value must be freed with ecma_FreeCompletionValue
|
* Returned value must be freed with ecma_free_completion_value
|
||||||
*/
|
*/
|
||||||
ecma_CompletionValue_t
|
ecma_CompletionValue_t
|
||||||
opfunc_assignment (OPCODE opdata, /**< operation data */
|
opfunc_assignment (OPCODE opdata, /**< operation data */
|
||||||
|
|||||||
@@ -276,6 +276,18 @@ ecma_free_completion_value( ecma_CompletionValue_t completion_value) /**< comple
|
|||||||
}
|
}
|
||||||
} /* ecma_free_completion_value */
|
} /* ecma_free_completion_value */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the completion value is normal value.
|
||||||
|
*
|
||||||
|
* @return true - if the completion type is normal,
|
||||||
|
* false - otherwise.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
ecma_is_completion_value_normal( ecma_CompletionValue_t value)
|
||||||
|
{
|
||||||
|
return ( value.type == ECMA_COMPLETION_TYPE_NORMAL );
|
||||||
|
} /* ecma_is_completion_value_normal */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the completion value is specified normal simple value.
|
* Check if the completion value is specified normal simple value.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ extern ecma_CompletionValue_t ecma_MakeCompletionValue( ecma_CompletionType_t ty
|
|||||||
extern ecma_CompletionValue_t ecma_MakeThrowValue( ecma_Object_t *exception_p);
|
extern ecma_CompletionValue_t ecma_MakeThrowValue( ecma_Object_t *exception_p);
|
||||||
extern void ecma_free_completion_value( ecma_CompletionValue_t completion_value);
|
extern void ecma_free_completion_value( ecma_CompletionValue_t completion_value);
|
||||||
|
|
||||||
|
extern bool ecma_is_completion_value_normal( ecma_CompletionValue_t value);
|
||||||
extern bool ecma_is_completion_value_normal_simple_value( ecma_CompletionValue_t value, ecma_SimpleValue_t simple_value);
|
extern bool ecma_is_completion_value_normal_simple_value( ecma_CompletionValue_t value, ecma_SimpleValue_t simple_value);
|
||||||
extern bool ecma_IsCompletionValueNormalFalse( ecma_CompletionValue_t value);
|
extern bool ecma_IsCompletionValueNormalFalse( ecma_CompletionValue_t value);
|
||||||
extern bool ecma_IsCompletionValueNormalTrue( ecma_CompletionValue_t value);
|
extern bool ecma_IsCompletionValueNormalTrue( ecma_CompletionValue_t value);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
* ECMA-262 v5, 9.10
|
* ECMA-262 v5, 9.10
|
||||||
*
|
*
|
||||||
* @return completion value
|
* @return completion value
|
||||||
* Returned value must be free with ecma_FreeCompletionValue
|
* Returned value must be freed with ecma_free_completion_value
|
||||||
*/
|
*/
|
||||||
ecma_CompletionValue_t
|
ecma_CompletionValue_t
|
||||||
ecma_op_check_object_coercible( ecma_Value_t value) /**< ecma-value */
|
ecma_op_check_object_coercible( ecma_Value_t value) /**< ecma-value */
|
||||||
@@ -87,10 +87,10 @@ ecma_op_check_object_coercible( ecma_Value_t value) /**< ecma-value */
|
|||||||
* ToPrimitive operation.
|
* ToPrimitive operation.
|
||||||
*
|
*
|
||||||
* See also:
|
* See also:
|
||||||
* ECMA-262 v5, 9.10
|
* ECMA-262 v5, 9.1
|
||||||
*
|
*
|
||||||
* @return completion value
|
* @return completion value
|
||||||
* Returned value must be free with ecma_FreeCompletionValue
|
* Returned value must be freed with ecma_free_completion_value
|
||||||
*/
|
*/
|
||||||
ecma_CompletionValue_t
|
ecma_CompletionValue_t
|
||||||
ecma_op_to_primitive( ecma_Value_t value) /**< ecma-value */
|
ecma_op_to_primitive( ecma_Value_t value) /**< ecma-value */
|
||||||
@@ -118,14 +118,58 @@ ecma_op_to_primitive( ecma_Value_t value) /**< ecma-value */
|
|||||||
JERRY_UNREACHABLE();
|
JERRY_UNREACHABLE();
|
||||||
} /* ecma_op_to_primitive */
|
} /* ecma_op_to_primitive */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ToNumber operation.
|
||||||
|
*
|
||||||
|
* See also:
|
||||||
|
* ECMA-262 v5, 9.3
|
||||||
|
*
|
||||||
|
* @return completion value
|
||||||
|
* Returned value must be freed with ecma_free_completion_value
|
||||||
|
*/
|
||||||
|
ecma_CompletionValue_t
|
||||||
|
ecma_op_to_number( ecma_Value_t value) /**< ecma-value */
|
||||||
|
{
|
||||||
|
switch ( (ecma_Type_t)value.m_ValueType )
|
||||||
|
{
|
||||||
|
case ECMA_TYPE_NUMBER:
|
||||||
|
{
|
||||||
|
return ecma_MakeCompletionValue( ECMA_COMPLETION_TYPE_NORMAL,
|
||||||
|
ecma_CopyValue( value),
|
||||||
|
ECMA_TARGET_ID_RESERVED);
|
||||||
|
}
|
||||||
|
case ECMA_TYPE_SIMPLE:
|
||||||
|
case ECMA_TYPE_STRING:
|
||||||
|
{
|
||||||
|
JERRY_UNIMPLEMENTED();
|
||||||
|
}
|
||||||
|
case ECMA_TYPE_OBJECT:
|
||||||
|
{
|
||||||
|
ecma_CompletionValue_t completion_to_primitive = ecma_op_to_primitive( value);
|
||||||
|
JERRY_ASSERT( ecma_is_completion_value_normal( completion_to_primitive) );
|
||||||
|
|
||||||
|
ecma_CompletionValue_t completion_to_number = ecma_op_to_number( completion_to_primitive.value);
|
||||||
|
ecma_free_completion_value( completion_to_primitive);
|
||||||
|
|
||||||
|
return completion_to_number;
|
||||||
|
}
|
||||||
|
case ECMA_TYPE__COUNT:
|
||||||
|
{
|
||||||
|
JERRY_UNREACHABLE();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JERRY_UNREACHABLE();
|
||||||
|
} /* ecma_op_to_number */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ToObject operation.
|
* ToObject operation.
|
||||||
*
|
*
|
||||||
* See also:
|
* See also:
|
||||||
* ECMA-262 v5, 9.10
|
* ECMA-262 v5, 9.9
|
||||||
*
|
*
|
||||||
* @return completion value
|
* @return completion value
|
||||||
* Returned value must be free with ecma_FreeCompletionValue
|
* Returned value must be freed with ecma_free_completion_value
|
||||||
*/
|
*/
|
||||||
ecma_CompletionValue_t
|
ecma_CompletionValue_t
|
||||||
ecma_op_to_object( ecma_Value_t value) /**< ecma-value */
|
ecma_op_to_object( ecma_Value_t value) /**< ecma-value */
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
extern ecma_CompletionValue_t ecma_op_check_object_coercible( ecma_Value_t value);
|
extern ecma_CompletionValue_t ecma_op_check_object_coercible( ecma_Value_t value);
|
||||||
extern ecma_CompletionValue_t ecma_op_to_primitive( ecma_Value_t value);
|
extern ecma_CompletionValue_t ecma_op_to_primitive( ecma_Value_t value);
|
||||||
|
extern ecma_CompletionValue_t ecma_op_to_number( ecma_Value_t value);
|
||||||
extern ecma_CompletionValue_t ecma_op_to_object( ecma_Value_t value);
|
extern ecma_CompletionValue_t ecma_op_to_object( ecma_Value_t value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user