# 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", name="11.EXT-REFERENCE-AUTORELEASE.c") ```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)