Skip to content

Commit 7b047d4

Browse files
author
François Baldassari
committed
Add acquire_value API to simplify caller code
JerryScript-DCO-1.0-Signed-off-by: François Baldassari [email protected]
1 parent 66c94b7 commit 7b047d4

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

jerry-core/jerry-api.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ jerry_api_value_t jerry_api_create_string_value (jerry_api_string_t *value);
272272
jerry_api_size_t jerry_api_string_to_char_buffer (const jerry_api_string_t *, jerry_api_char_t *, jerry_api_size_t);
273273
jerry_api_string_t *jerry_api_acquire_string (jerry_api_string_t *);
274274
jerry_api_object_t *jerry_api_acquire_object (jerry_api_object_t *);
275+
jerry_api_value_t *jerry_api_acquire_value (jerry_api_value_t *);
275276

276277
void jerry_api_release_object (jerry_api_object_t *);
277278
void jerry_api_release_string (jerry_api_string_t *);

jerry-core/jerry.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,8 +634,41 @@ jerry_api_release_object (jerry_api_object_t *object_p) /**< pointer acquired th
634634
ecma_deref_object (object_p);
635635
} /* jerry_api_release_object */
636636

637+
/**
638+
* Acquire specified Jerry API value.
639+
*
640+
* Note:
641+
* For values of string and object types this acquires the underlying data,
642+
* for all other types it is a no-op.
643+
*
644+
* Warning:
645+
* Acquired pointer should be released with jerry_api_release_value
646+
*
647+
* @return pointer that may be used outside of the engine
648+
*/
649+
jerry_api_value_t *
650+
jerry_api_acquire_value (jerry_api_value_t *value_p) /**< API value */
651+
{
652+
jerry_assert_api_available ();
653+
654+
if (value_p->type == JERRY_API_DATA_TYPE_STRING)
655+
{
656+
jerry_api_acquire_string (value_p->u.v_string);
657+
}
658+
else if (value_p->type == JERRY_API_DATA_TYPE_OBJECT)
659+
{
660+
jerry_api_acquire_object (value_p->u.v_object);
661+
}
662+
663+
return value_p;
664+
} /* jerry_api_acquire_value */
665+
637666
/**
638667
* Release specified Jerry API value
668+
*
669+
* Note:
670+
* For values of string and object types this releases the underlying data,
671+
* for all other types it is a no-op.
639672
*/
640673
void
641674
jerry_api_release_value (jerry_api_value_t *value_p) /**< API value */

0 commit comments

Comments
 (0)