Partially implementing ToNumber operation.
This commit is contained in:
@@ -35,7 +35,7 @@
|
||||
* ECMA-262 v5, 9.10
|
||||
*
|
||||
* @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_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.
|
||||
*
|
||||
* See also:
|
||||
* ECMA-262 v5, 9.10
|
||||
* ECMA-262 v5, 9.1
|
||||
*
|
||||
* @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_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();
|
||||
} /* 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.
|
||||
*
|
||||
* See also:
|
||||
* ECMA-262 v5, 9.10
|
||||
* ECMA-262 v5, 9.9
|
||||
*
|
||||
* @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_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_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);
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user