Skip to content

Commit ae11182

Browse files
committed
Add two new API functions: jerry_create_number_infinity and jerry_create_number_nan
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg [email protected]
1 parent b6f174c commit ae11182

File tree

4 files changed

+124
-1
lines changed

4 files changed

+124
-1
lines changed

docs/02.API-REFERENCE.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1758,6 +1758,77 @@ jerry_create_number (double value);
17581758
**See also**
17591759

17601760
- [jerry_release_value](#jerry_release_value)
1761+
- [jerry_create_number_infinity](#jerry_create_number_infinity)
1762+
- [jerry_create_number_nan](#jerry_create_number_nan)
1763+
1764+
1765+
## jerry_create_number_infinity
1766+
1767+
**Summary**
1768+
1769+
Creates a `jerry_value_t` representing a positive or negative infinity value.
1770+
1771+
**Prototype**
1772+
1773+
```c
1774+
jerry_value_t
1775+
jerry_create_number_infinity (bool sign);
1776+
```
1777+
1778+
- `sign` - true for negative Infinity and false for positive Infinity
1779+
- return value - a `jerry_value_t` representing the infinity value
1780+
1781+
**Example**
1782+
1783+
```c
1784+
{
1785+
jerry_value_t positive_inf_value = jerry_create_number_infinity (false);
1786+
1787+
... // usage of the positive_inf_value
1788+
1789+
jerry_release_value (positive_inf_value);
1790+
}
1791+
```
1792+
1793+
**See also**
1794+
1795+
- [jerry_release_value](#jerry_release_value)
1796+
- [jerry_create_number](#jerry_create_number)
1797+
- [jerry_create_number_nan](#jerry_create_number_nan)
1798+
1799+
1800+
## jerry_create_number_nan
1801+
1802+
**Summary**
1803+
1804+
Creates a `jerry_value_t` representing a not-a-number value.
1805+
1806+
**Prototype**
1807+
1808+
```c
1809+
jerry_value_t
1810+
jerry_create_number_nan (void);
1811+
```
1812+
1813+
- return value - a `jerry_value_t` representing the not-a-number value
1814+
1815+
**Example**
1816+
1817+
```c
1818+
{
1819+
jerry_value_t nan_value = jerry_create_number_nan ();
1820+
1821+
... // usage of the nan_value
1822+
1823+
jerry_release_value (nan_value);
1824+
}
1825+
```
1826+
1827+
**See also**
1828+
1829+
- [jerry_release_value](#jerry_release_value)
1830+
- [jerry_create_number](#jerry_create_number)
1831+
- [jerry_create_number_infinity](#jerry_create_number_infinity)
17611832

17621833

17631834
## jerry_create_null

jerry-core/jerry-api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ jerry_value_t jerry_create_error (jerry_error_t, const jerry_char_t *);
244244
jerry_value_t jerry_create_error_sz (jerry_error_t, const jerry_char_t *, jerry_size_t);
245245
jerry_value_t jerry_create_external_function (jerry_external_handler_t);
246246
jerry_value_t jerry_create_number (double);
247+
jerry_value_t jerry_create_number_infinity (bool);
248+
jerry_value_t jerry_create_number_nan (void);
247249
jerry_value_t jerry_create_null (void);
248250
jerry_value_t jerry_create_object (void);
249251
jerry_value_t jerry_create_string (const jerry_char_t *);

jerry-core/jerry.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,39 @@ jerry_create_number (double value) /**< double value from which a jerry_value_t
853853
return ecma_make_number_value ((ecma_number_t) value);
854854
} /* jerry_create_number */
855855

856+
/**
857+
* Creates a jerry_value_t representing a positive or negative infinity value.
858+
*
859+
* Note:
860+
* returned value must be freed with jerry_release_value, when it is no longer needed.
861+
*
862+
* @return jerry_value_t representing an infinity value.
863+
*/
864+
jerry_value_t
865+
jerry_create_number_infinity (bool sign) /**< true for negative Infinity
866+
* false for positive Infinity */
867+
{
868+
jerry_assert_api_available ();
869+
870+
return ecma_make_number_value (ecma_number_make_infinity (sign));
871+
} /* jerry_create_number_infinity */
872+
873+
/**
874+
* Creates a jerry_value_t representing a not-a-number value.
875+
*
876+
* Note:
877+
* returned value must be freed with jerry_release_value, when it is no longer needed.
878+
*
879+
* @return jerry_value_t representing a not-a-number value.
880+
*/
881+
jerry_value_t
882+
jerry_create_number_nan (void)
883+
{
884+
jerry_assert_api_available ();
885+
886+
return ecma_make_nan_value ();
887+
} /* jerry_create_number_nan */
888+
856889
/**
857890
* Creates and returns a jerry_value_t with type null object.
858891
*

tests/unit/test-api.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ main (void)
309309
jerry_value_t throw_test_handler_val;
310310
jerry_value_t parsed_code_val, proto_val, prim_val;
311311
jerry_value_t res, args[2];
312+
double number_val;
312313
char buffer[32];
313314

314315
is_ok = test_run_simple ("print ('Hello, World!');");
@@ -700,9 +701,25 @@ main (void)
700701
// cleanup.
701702
jerry_release_value (global_obj_val);
702703

703-
// TEST: run gc.
704+
// Test: run gc.
704705
jerry_gc ();
705706

707+
// Test: number
708+
val_t = jerry_create_number (6.25);
709+
number_val = jerry_get_number_value (val_t);
710+
TEST_ASSERT (number_val * 3 == 18.75);
711+
jerry_release_value (val_t);
712+
713+
val_t = jerry_create_number_infinity (true);
714+
number_val = jerry_get_number_value (val_t);
715+
TEST_ASSERT (number_val * 3 == number_val && number_val != 0.0);
716+
jerry_release_value (val_t);
717+
718+
val_t = jerry_create_number_nan ();
719+
number_val = jerry_get_number_value (val_t);
720+
TEST_ASSERT (number_val != number_val);
721+
jerry_release_value (val_t);
722+
706723
jerry_cleanup ();
707724

708725
TEST_ASSERT (test_api_is_free_callback_was_called);

0 commit comments

Comments
 (0)