From 7b047d4b2008fe9e5099664db9ffbf97da46631f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Baldassari?= Date: Tue, 8 Mar 2016 12:34:20 -0800 Subject: [PATCH] Add acquire_value API to simplify caller code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JerryScript-DCO-1.0-Signed-off-by: François Baldassari francois@pebble.com --- jerry-core/jerry-api.h | 1 + jerry-core/jerry.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/jerry-core/jerry-api.h b/jerry-core/jerry-api.h index 1ee3969463..3752ee6eae 100644 --- a/jerry-core/jerry-api.h +++ b/jerry-core/jerry-api.h @@ -272,6 +272,7 @@ jerry_api_value_t jerry_api_create_string_value (jerry_api_string_t *value); jerry_api_size_t jerry_api_string_to_char_buffer (const jerry_api_string_t *, jerry_api_char_t *, jerry_api_size_t); jerry_api_string_t *jerry_api_acquire_string (jerry_api_string_t *); jerry_api_object_t *jerry_api_acquire_object (jerry_api_object_t *); +jerry_api_value_t *jerry_api_acquire_value (jerry_api_value_t *); void jerry_api_release_object (jerry_api_object_t *); void jerry_api_release_string (jerry_api_string_t *); diff --git a/jerry-core/jerry.c b/jerry-core/jerry.c index f796ba385e..eb6343341d 100644 --- a/jerry-core/jerry.c +++ b/jerry-core/jerry.c @@ -634,8 +634,41 @@ jerry_api_release_object (jerry_api_object_t *object_p) /**< pointer acquired th ecma_deref_object (object_p); } /* jerry_api_release_object */ +/** + * Acquire specified Jerry API value. + * + * Note: + * For values of string and object types this acquires the underlying data, + * for all other types it is a no-op. + * + * Warning: + * Acquired pointer should be released with jerry_api_release_value + * + * @return pointer that may be used outside of the engine + */ +jerry_api_value_t * +jerry_api_acquire_value (jerry_api_value_t *value_p) /**< API value */ +{ + jerry_assert_api_available (); + + if (value_p->type == JERRY_API_DATA_TYPE_STRING) + { + jerry_api_acquire_string (value_p->u.v_string); + } + else if (value_p->type == JERRY_API_DATA_TYPE_OBJECT) + { + jerry_api_acquire_object (value_p->u.v_object); + } + + return value_p; +} /* jerry_api_acquire_value */ + /** * Release specified Jerry API value + * + * Note: + * For values of string and object types this releases the underlying data, + * for all other types it is a no-op. */ void jerry_api_release_value (jerry_api_value_t *value_p) /**< API value */