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