Implement the core of Proxy object (#3562)

- Internal routines of the of the proxy object are unimplemented
 - For-in enumerate with proxy target is currently not supported

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik
2020-02-28 14:41:59 +01:00
committed by GitHub
parent 9b393ee2ea
commit 4e136c8973
57 changed files with 3017 additions and 397 deletions
+115 -6
View File
@@ -70,6 +70,7 @@ Possible compile time enabled feature types:
- JERRY_FEATURE_LOGGING - logging
- JERRY_FEATURE_SYMBOL - symbol support
- JERRY_FEATURE_DATAVIEW - DataView support
- JERRY_FEATURE_PROXY - Proxy support
*New in version 2.0*.
@@ -1865,6 +1866,55 @@ jerry_value_is_promise (const jerry_value_t value)
- [jerry_create_promise](#jerry_create_promise)
## jerry_value_is_proxy
**Summary**
Returns whether the given `jerry_value_t` is a proxy value.
*Notes*:
- This API depends on a build option (`JERRY_ES2015_BUILTIN_PROXY`) and can be checked
in runtime with the `JERRY_FEATURE_PROXY` feature enum value,
see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
- The ES2015-subset profile enables this by default.
**Prototype**
```c
bool
jerry_value_is_proxy (const jerry_value_t value)
```
- `value` - api value
- return value
- true, if the given `jerry_value_t` is a proxy object
- false, otherwise
**Example**
*New in version [next_version]*.
```c
{
jerry_value_t value;
... // create or acquire value
if (jerry_value_is_proxy (value))
{
...
}
jerry_release_value (value);
}
```
**See also**
- [jerry_release_value](#jerry_release_value)
- [jerry_create_proxy](#jerry_create_proxy)
## jerry_value_is_string
**Summary**
@@ -4212,6 +4262,65 @@ jerry_create_promise (void)
- [jerry_release_value](#jerry_release_value)
## jerry_create_proxy
**Summary**
Create a new Proxy object with the given target and handler.
*Note*:
- This API depends on the ES2015-subset profile.
- Returned value must be freed with [jerry_release_value](#jerry_release_value)
when it is no longer needed.
**Prototype**
```c
jerry_value_t
jerry_create_proxy (const jerry_value_t target,
const jerry_value_t handler)
```
- `target` - proxy target
- `handler` - proxy handler
- return thrown error - if the Proxy construction fails
value of the newly created proxy object - otherwise
**Example**
*New in version [next_version]*.
[doctest]: # ()
```c
#include "jerryscript.h"
int
main (void)
{
jerry_init (JERRY_INIT_EMPTY);
jerry_value_t target = jerry_create_object ();
jerry_value_t handler = jerry_create_object ();
jerry_value_t proxy = jerry_create_proxy (target, handler);
jerry_release_value (target);
jerry_release_value (handler);
// usage of the proxy
jerry_release_value (proxy);
jerry_cleanup ();
}
```
**See also**
- [jerry_value_is_proxy](#jerry_value_is_proxy)
- [jerry_release_value](#jerry_release_value)
## jerry_create_string
**Summary**
@@ -4746,9 +4855,9 @@ jerry_has_property (const jerry_value_t obj_val,
- `obj_val` - object value
- `prop_name_val` - property name
- return value - JavaScript boolean value that evaluates to
- true, if the property exists
- false, otherwise
- return value - JavaScript value that evaluates to
- raised error - if the operation fail
- true/false API value - depend on whether the property exists
*Changed in version 2.0*: The return value type is now a JavaScript value and not a primitive boolean value.
@@ -4805,9 +4914,9 @@ jerry_has_own_property (const jerry_value_t obj_val,
- `obj_val` - object value
- `prop_name_val` - property name
- return value - JavaScript boolean value that evaluates to
- true, if the property exists
- false, otherwise
- return value - JavaScript value that evaluates to
- raised error - if the operation fails
- true/false API value - depend on whether the property exists
*Changed in version 2.0*: The return value type is now a JavaScript value and not a primitive boolean value.