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:
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user