Add non-standard behaviour support for Proxies (#4562)

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2021-02-04 15:58:16 +01:00
committed by GitHub
parent e9df2ca814
commit 9ca046b670
12 changed files with 292 additions and 21 deletions
+78 -1
View File
@@ -83,6 +83,17 @@ Enum that contains JerryScript **iterator** value types:
*New in version 2.4*.
## jerry_proxy_object_options_t
These option bits allow specializing Proxies with non-standard behaviour.
These flags are recommended only for those trusted Proxies, whose handlers
produce correct results.
- JERRY_PROXY_SKIP_GET_CHECKS - skip [[Get]] result checks
- JERRY_PROXY_SKIP_GET_OWN_PROPERTY_CHECKS - skip [[GetOwnProperty]] result checks
*New in version [[NEXT_RELEASE]]*.
## jerry_property_filter_t
Enum that contains JerryScript **property filter** options bits:
@@ -2132,6 +2143,7 @@ jerry_value_is_proxy (const jerry_value_t value)
- [jerry_release_value](#jerry_release_value)
- [jerry_create_proxy](#jerry_create_proxy)
- [jerry_create_special_proxy](#jerry_create_special_proxy)
## jerry_value_is_string
@@ -4641,6 +4653,7 @@ jerry_get_proxy_target (jerry_value_t proxy_value)
**See also**
- [jerry_create_proxy](#jerry_create_proxy)
- [jerry_create_special_proxy](#jerry_create_special_proxy)
# Acquire and release API values
@@ -5352,7 +5365,7 @@ Create a new Proxy object with the given target and handler.
```c
jerry_value_t
jerry_create_proxy (const jerry_value_t target,
const jerry_value_t handler)
const jerry_value_t handler);
```
- `target` - proxy target
@@ -5392,6 +5405,70 @@ main (void)
**See also**
- [jerry_value_is_proxy](#jerry_value_is_proxy)
- [jerry_create_special_proxy](#jerry_create_special_proxy)
- [jerry_release_value](#jerry_release_value)
## jerry_create_special_proxy
**Summary**
Create a new Proxy object with the given target and handler.
The behaviour of the Proxy can be specialized with an options argument.
*Note*:
- This API depends on the es.next 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_special_proxy (const jerry_value_t target,
const jerry_value_t handler,
uint32_t options);
```
- `target` - proxy target
- `handler` - proxy handler
- `options` - any combination of [jerry_proxy_object_options_t](#jerry_proxy_object_options_t) options
- return thrown error - if the Proxy construction fails
value of the newly created proxy object - otherwise
*New in version [[NEXT_RELEASE]]*.
**Example**
[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_special_proxy (target, handler, JERRY_PROXY_SKIP_GET_CHECKS);
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_create_special_proxy](#jerry_create_special_proxy)
- [jerry_release_value](#jerry_release_value)