mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Implementing several unimplemented cases in ecma conversion routines.
This commit is contained in:
parent
aa86a3643b
commit
c9f954ec2e
@ -17,10 +17,12 @@
|
|||||||
* Implementation of ECMA-defined conversion routines
|
* Implementation of ECMA-defined conversion routines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "ecma-alloc.h"
|
||||||
#include "ecma-conversion.h"
|
#include "ecma-conversion.h"
|
||||||
#include "ecma-exceptions.h"
|
#include "ecma-exceptions.h"
|
||||||
#include "ecma-globals.h"
|
#include "ecma-globals.h"
|
||||||
#include "ecma-magic-strings.h"
|
#include "ecma-magic-strings.h"
|
||||||
|
#include "ecma-objects.h"
|
||||||
#include "ecma-try-catch-macro.h"
|
#include "ecma-try-catch-macro.h"
|
||||||
#include "jerry-libc.h"
|
#include "jerry-libc.h"
|
||||||
|
|
||||||
@ -122,11 +124,21 @@ ecma_op_same_value (ecma_value_t x, /**< ecma-value */
|
|||||||
|
|
||||||
if (is_x_number)
|
if (is_x_number)
|
||||||
{
|
{
|
||||||
TODO(Implement according to ECMA);
|
|
||||||
|
|
||||||
ecma_number_t *x_num_p = (ecma_number_t*)ECMA_GET_POINTER(x.value);
|
ecma_number_t *x_num_p = (ecma_number_t*)ECMA_GET_POINTER(x.value);
|
||||||
ecma_number_t *y_num_p = (ecma_number_t*)ECMA_GET_POINTER(y.value);
|
ecma_number_t *y_num_p = (ecma_number_t*)ECMA_GET_POINTER(y.value);
|
||||||
|
|
||||||
|
if (ecma_number_is_nan (*x_num_p)
|
||||||
|
&& ecma_number_is_nan (*y_num_p))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (ecma_number_is_zero (*x_num_p)
|
||||||
|
&& ecma_number_is_zero (*y_num_p)
|
||||||
|
&& ecma_number_is_negative (*x_num_p) != ecma_number_is_negative (*y_num_p))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return (*x_num_p == *y_num_p);
|
return (*x_num_p == *y_num_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +184,9 @@ ecma_op_to_primitive (ecma_value_t value, /**< ecma-value */
|
|||||||
|
|
||||||
case ECMA_TYPE_OBJECT:
|
case ECMA_TYPE_OBJECT:
|
||||||
{
|
{
|
||||||
JERRY_UNIMPLEMENTED_REF_UNUSED_VARS(preferred_type);
|
ecma_object_t *obj_p = ECMA_GET_POINTER (value.value);
|
||||||
|
|
||||||
|
return ecma_op_object_default_value (obj_p, preferred_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,10 +212,15 @@ ecma_op_to_boolean (ecma_value_t value) /**< ecma-value */
|
|||||||
{
|
{
|
||||||
ecma_number_t *num_p = ECMA_GET_POINTER(value.value);
|
ecma_number_t *num_p = ECMA_GET_POINTER(value.value);
|
||||||
|
|
||||||
TODO(Implement according to ECMA);
|
if (ecma_number_is_nan (*num_p)
|
||||||
|
|| ecma_number_is_zero (*num_p))
|
||||||
return ecma_make_simple_completion_value ((*num_p == 0) ? ECMA_SIMPLE_VALUE_FALSE
|
{
|
||||||
: ECMA_SIMPLE_VALUE_TRUE);
|
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -262,9 +281,48 @@ ecma_op_to_number (ecma_value_t value) /**< ecma-value */
|
|||||||
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
|
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
|
||||||
}
|
}
|
||||||
case ECMA_TYPE_SIMPLE:
|
case ECMA_TYPE_SIMPLE:
|
||||||
|
{
|
||||||
|
ecma_number_t *num_p = ecma_alloc_number ();
|
||||||
|
|
||||||
|
switch ((ecma_simple_value_t)value.value)
|
||||||
|
{
|
||||||
|
case ECMA_SIMPLE_VALUE_UNDEFINED:
|
||||||
|
{
|
||||||
|
*num_p = ecma_number_make_nan ();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ECMA_SIMPLE_VALUE_NULL:
|
||||||
|
case ECMA_SIMPLE_VALUE_FALSE:
|
||||||
|
{
|
||||||
|
*num_p = ECMA_NUMBER_ZERO;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ECMA_SIMPLE_VALUE_TRUE:
|
||||||
|
{
|
||||||
|
*num_p = ECMA_NUMBER_ONE;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ECMA_SIMPLE_VALUE_EMPTY:
|
||||||
|
case ECMA_SIMPLE_VALUE_ARRAY_REDIRECT:
|
||||||
|
case ECMA_SIMPLE_VALUE__COUNT:
|
||||||
|
{
|
||||||
|
JERRY_UNREACHABLE ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ecma_make_normal_completion_value (ecma_make_number_value (num_p));
|
||||||
|
}
|
||||||
case ECMA_TYPE_STRING:
|
case ECMA_TYPE_STRING:
|
||||||
{
|
{
|
||||||
JERRY_UNIMPLEMENTED();
|
ecma_string_t *str_p = ECMA_GET_POINTER (value.value);
|
||||||
|
|
||||||
|
ecma_number_t *num_p = ecma_alloc_number ();
|
||||||
|
*num_p = ecma_string_to_number (str_p);
|
||||||
|
|
||||||
|
return ecma_make_normal_completion_value (ecma_make_number_value (num_p));
|
||||||
}
|
}
|
||||||
case ECMA_TYPE_OBJECT:
|
case ECMA_TYPE_OBJECT:
|
||||||
{
|
{
|
||||||
@ -388,12 +446,41 @@ ecma_op_to_object (ecma_value_t value) /**< ecma-value */
|
|||||||
switch ((ecma_type_t)value.value_type)
|
switch ((ecma_type_t)value.value_type)
|
||||||
{
|
{
|
||||||
case ECMA_TYPE_SIMPLE:
|
case ECMA_TYPE_SIMPLE:
|
||||||
case ECMA_TYPE_NUMBER:
|
|
||||||
case ECMA_TYPE_STRING:
|
|
||||||
{
|
{
|
||||||
|
switch ((ecma_simple_value_t)value.value)
|
||||||
|
{
|
||||||
|
case ECMA_SIMPLE_VALUE_UNDEFINED:
|
||||||
|
case ECMA_SIMPLE_VALUE_NULL:
|
||||||
|
{
|
||||||
|
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||||
|
}
|
||||||
|
|
||||||
|
case ECMA_SIMPLE_VALUE_FALSE:
|
||||||
|
case ECMA_SIMPLE_VALUE_TRUE:
|
||||||
|
{
|
||||||
|
/* return Boolean object with [[PrimitiveValue]] set to the value */
|
||||||
|
JERRY_UNIMPLEMENTED ();
|
||||||
|
}
|
||||||
|
case ECMA_SIMPLE_VALUE_EMPTY:
|
||||||
|
case ECMA_SIMPLE_VALUE_ARRAY_REDIRECT:
|
||||||
|
case ECMA_SIMPLE_VALUE__COUNT:
|
||||||
|
{
|
||||||
|
JERRY_UNREACHABLE ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JERRY_UNREACHABLE ();
|
||||||
|
}
|
||||||
|
case ECMA_TYPE_NUMBER:
|
||||||
|
{
|
||||||
|
/* return Number object with [[PrimitiveValue]] set to the value */
|
||||||
|
JERRY_UNIMPLEMENTED ();
|
||||||
|
}
|
||||||
|
case ECMA_TYPE_STRING:
|
||||||
|
{
|
||||||
|
/* return String object with [[PrimitiveValue]] set to the value */
|
||||||
JERRY_UNIMPLEMENTED ();
|
JERRY_UNIMPLEMENTED ();
|
||||||
}
|
}
|
||||||
|
|
||||||
case ECMA_TYPE_OBJECT:
|
case ECMA_TYPE_OBJECT:
|
||||||
{
|
{
|
||||||
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
|
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user