Implement asInteger, asUint32 and asInt32 jerry api methods (#4325)

JerryScript-DCO-1.0-Signed-off-by: bence gabor kis kisbg@inf.u-szeged.hu
This commit is contained in:
kisbg
2020-11-18 07:37:56 +01:00
committed by GitHub
parent 5d916fb8d4
commit 7de7c2168e
4 changed files with 304 additions and 0 deletions
+78
View File
@@ -14,6 +14,7 @@
*/
#include <stdio.h>
#include <math.h>
#include "debugger.h"
#include "ecma-alloc.h"
@@ -1722,6 +1723,83 @@ jerry_value_to_bigint (const jerry_value_t value) /**< input value */
#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
} /* jerry_value_to_bigint */
/**
* Convert any number to integer number.
*
* Note:
* For non-number values 0 is returned.
*
* @return integer representation of the number.
*/
double
jerry_value_as_integer (const jerry_value_t value) /**< input value */
{
jerry_assert_api_available ();
if (!ecma_is_value_number (value))
{
return 0;
}
double number = ecma_get_number_from_value (value);
if (ecma_number_is_nan (number))
{
return ECMA_NUMBER_ZERO;
}
if (ecma_number_is_zero (number) || ecma_number_is_infinity (number))
{
return number;
}
ecma_number_t floor_fabs = (ecma_number_t) floor (fabs (number));
return ecma_number_is_negative (number) ? -floor_fabs : floor_fabs;
} /* jerry_value_as_integer */
/**
* Convert any number to int32 number.
*
* Note:
* For non-number values 0 is returned.
*
* @return int32 representation of the number.
*/
int32_t
jerry_value_as_int32 (const jerry_value_t value) /**< input value */
{
jerry_assert_api_available ();
if (!ecma_is_value_number (value))
{
return 0;
}
return ecma_number_to_int32 (ecma_get_number_from_value (value));
} /* jerry_value_as_int32 */
/**
* Convert any number to uint32 number.
*
* Note:
* For non-number values 0 is returned.
*
* @return uint32 representation of the number.
*/
uint32_t
jerry_value_as_uint32 (const jerry_value_t value) /**< input value */
{
jerry_assert_api_available ();
if (!ecma_is_value_number (value))
{
return 0;
}
return ecma_number_to_uint32 (ecma_get_number_from_value (value));
} /* jerry_value_as_uint32 */
/**
* Acquire specified Jerry API value.
*