Introduce new API functions to obtain detailed object type information (#4162)

- jerry_object_get_type
- jerry_function_get_type
- jerry_iterator_get_type
- jerry_value_is_async_function

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik
2020-08-28 12:53:56 +02:00
committed by GitHub
parent 4ed9e2c033
commit 6d0e948bef
7 changed files with 920 additions and 8 deletions
+224
View File
@@ -30,6 +30,56 @@ Enum that contains JerryScript API value types:
*New in version 2.0*.
## jerry_object_type_t
Enum that contains JerryScript **object** value types:
- JERRY_OBJECT_TYPE_NONE - Non-object type
- JERRY_OBJECT_TYPE_GENERIC - Generic JavaScript object without any internal property
- JERRY_OBJECT_TYPE_ARRAY - Array object
- JERRY_OBJECT_TYPE_PROXY - Proxy object
- JERRY_OBJECT_TYPE_FUNCTION - Function object (see [jerry_function_get_type](#jerry_function_get_type))
- JERRY_OBJECT_TYPE_TYPEDARRAY - %TypedArray% object (see [jerry_get_typedarray_type](#jerry_get_typedarray_type))
- JERRY_OBJECT_TYPE_ITERATOR - Iterator object (see [jerry_iterator_get_type](#jerry_get_typedarray_type))
- JERRY_OBJECT_TYPE_CONTAINER - Container object (see [jerry_get_container_type](#jerry_get_container_type))
- JERRY_OBJECT_TYPE_ARGUMENTS - Arguments object
- JERRY_OBJECT_TYPE_BOOLEAN - Boolean object
- JERRY_OBJECT_TYPE_DATE - Date object
- JERRY_OBJECT_TYPE_NUMBER - Number object
- JERRY_OBJECT_TYPE_REGEXP - RegExp object
- JERRY_OBJECT_TYPE_STRING - String object
- JERRY_OBJECT_TYPE_SYMBOL - Symbol object
- JERRY_OBJECT_TYPE_GENERATOR - Generator object
- JERRY_OBJECT_TYPE_BIGINT - BigInt object
*New in version [[NEXT_RELEASE]]*.
## jerry_function_type_t
Enum that contains JerryScript **function** value types:
- JERRY_FUNCTION_TYPE_NONE - Non-function type
- JERRY_FUNCTION_TYPE_GENERIC - Generic JavaScript function
- JERRY_FUNCTION_TYPE_ACCESSOR - Accessor function
- JERRY_FUNCTION_TYPE_BOUND - Bound function
- JERRY_FUNCTION_TYPE_ARROW - Arrow fuction
- JERRY_FUNCTION_TYPE_GENERATOR - Generator function object
*New in version [[NEXT_RELEASE]]*.
## jerry_iterator_type_t
Enum that contains JerryScript **iterator** value types:
- JERRY_ITERATOR_TYPE_NONE - Non-iterator type
- JERRY_ITERATOR_TYPE_ARRAY - Array iterator
- JERRY_ITERATOR_TYPE_STRING - String iterator
- JERRY_ITERATOR_TYPE_MAP - Map iterator
- JERRY_ITERATOR_TYPE_SET - Set iterator
*New in version [[NEXT_RELEASE]]*.
## jerry_error_t
Possible types of an error:
@@ -1717,6 +1767,44 @@ jerry_value_is_function (const jerry_value_t value)
- [jerry_release_value](#jerry_release_value)
## jerry_value_is_async_function
**Summary**
Returns whether the given `jerry_value_t` is an async function.
**Prototype**
```c
bool
jerry_value_is_async_function (const jerry_value_t value)
```
- `value` - api value
- return value
- true, if the given `jerry_value_t` is an async function
- false, otherwise
**Example**
```c
{
jerry_value_t value;
... // create or acquire value
if (jerry_value_is_async_function (value))
{
...
}
jerry_release_value (value);
}
```
**See also**
- [jerry_release_value](#jerry_release_value)
## jerry_value_is_number
**Summary**
@@ -2293,6 +2381,142 @@ jerry_value_get_type (const jerry_value_t value);
- [jerry_type_t](#jerry_type_t)
## jerry_object_get_type
**Summary**
Returns the **object** type
for a given value as a [jerry_object_type_t](#jerry_object_type_t) enum value.
Note: For non-object parameters `JERRY_OBJECT_TYPE_NONE` is returned.
Note: the returned type can be checked for more detailed type information in the following cases:
- `JERRY_OBJECT_TYPE_CONTAINER`, *see also:* [jerry_container_get_type](#jerry_container_get_type)
- `JERRY_OBJECT_TYPE_FUNCTION`, *see also:* [jerry_function_get_type](#jerry_function_get_type)
- `JERRY_OBJECT_TYPE_ITERATOR`, *see also:* [jerry_iterator_get_type](#jerry_iterator_get_type)
- `JERRY_OBJECT_TYPE_TYPEDARRAY`, *see also:* [jerry_get_typedarray_type](#jerry_get_typedarray_type)
**Prototype**
```c
jerry_object_type_t
jerry_object_get_type (const jerry_value_t value);
```
- `value` - JavaScript value to check.
- return value
- One of the [jerry_object_type_t](#jerry_object_type_t) value.
*New in version [[NEXT_RELEASE]]*.
**Example**
```c
{
jerry_value_t object = jerry_create_object ();
jerry_object_type_t object_type_info = jerry_object_get_type (object);
if (type_info == JERRY_OBJECT_TYPE_GENERIC)
{
/* ... */
}
jerry_release_value (object);
}
```
**See also**
- [jerry_object_type_t](#jerry_object_type_t)
## jerry_function_get_type
**Summary**
Returns the **function** type
for a given value as a [jerry_function_type_t](#jerry_function_type_t) enum value.
**Prototype**
```c
jerry_function_type_t
jerry_function_get_type (const jerry_value_t value);
```
- `value` - JavaScript value to check.
- return value
- One of the [jerry_function_type_t](#jerry_function_type_t) value.
Note: For non-function parameters `JERRY_FUNCTION_TYPE_NONE` is returned.
*New in version [[NEXT_RELEASE]]*.
**Example**
```c
{
const jerry_char_t script[] = "function f() {}; f";
jerry_value_t function_object = jerry_eval (script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS);
jerry_function_type_t function_type_info = jerry_function_get_type (function_object);
if (type_info == JERRY_FUNCTION_TYPE_GENERIC)
{
/* ... */
}
jerry_release_value (function_object);
}
```
**See also**
- [jerry_function_type_t](#jerry_function_type_t)
## jerry_iterator_get_type
**Summary**
Returns the **iterator** type
for a given value as a [jerry_iterator_type_t](#jerry_iterator_type_t) enum value.
**Prototype**
```c
jerry_iterator_type_t
jerry_iterator_get_type (const jerry_value_t value);
```
- `value` - JavaScript value to check.
- return value
- One of the [jerry_iterator_type_t](#jerry_iterator_type_t) value.
Note: For non-iterator parameters `JERRY_ITERATOR_TYPE_NONE` is returned.
*New in version [[NEXT_RELEASE]]*.
**Example**
```c
{
const jerry_char_t script[] = "[1, 2, 3].values()";
jerry_value_t iterator = jerry_eval (script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS);
jerry_iterator_type_t iterator_type_info = jerry_iterator_get_type (iterator);
if (type_info == JERRY_ITERATOR_TYPE_ARRAY)
{
/* ... */
}
jerry_release_value (iterator);
}
```
**See also**
- [jerry_iterator_type_t](#jerry_iterator_type_t)
## jerry_is_feature_enabled
**Summary**