00f93bc287
Markdown files in the docs/ directory can now be annotated to turn
fenced C code blocks into unit tests. The recognized syntax is:
[doctest]: # (name="test.c", test="run")
```c
// unit test code
```
The commit also fixes the issues revealed during the initial
annotation.
JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu
51 lines
1.2 KiB
Markdown
51 lines
1.2 KiB
Markdown
# Autorelease values
|
|
|
|
## JERRYX_AR_VALUE_T
|
|
|
|
**Summary**
|
|
|
|
Macro for `const jerry_value_t` for which jerry_release_value() is
|
|
automatically called when the variable goes out of scope.
|
|
|
|
*Note*: The macro depends on compiler support. For GCC and LLVM/clang, the macro is implemented
|
|
using the `__cleanup__` variable attribute. For other compilers, no support has been added yet.
|
|
|
|
**Example**
|
|
|
|
[doctest]: # (test="compile")
|
|
|
|
```c
|
|
#include "jerryscript.h"
|
|
#include "jerryscript-ext/autorelease.h"
|
|
|
|
static void
|
|
foo (bool enable)
|
|
{
|
|
JERRYX_AR_VALUE_T bar = jerry_create_string ((const jerry_char_t *) "...");
|
|
|
|
if (enable)
|
|
{
|
|
JERRYX_AR_VALUE_T baz = jerry_get_global_object ();
|
|
|
|
/* bar and baz can now be used. */
|
|
|
|
/*
|
|
* jerry_release_value (baz) and jerry_release_value (bar) is called automatically before
|
|
* returning, because `baz` and `bar` go out of scope.
|
|
*/
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* jerry_release_value (bar) is called automatically when the function returns,
|
|
* because `bar` goes out of scope.
|
|
*/
|
|
}
|
|
```
|
|
|
|
**See also**
|
|
|
|
- [jerry_value_t](../docs/02.API-REFERENCE.md#jerry_value_t)
|
|
- [jerry_acquire_value](../docs/02.API-REFERENCE.md#jerry_acquire_value)
|
|
- [jerry_release_value](../docs/02.API-REFERENCE.md#jerry_release_value)
|