From 72d8c38d772de6c37ba6dc0bf2bc7f0a7139605b Mon Sep 17 00:00:00 2001 From: Ilyong Cho Date: Mon, 6 Apr 2015 11:25:40 +0900 Subject: [PATCH] Reimplementation of `jerry_api_is_funciton` and `jerry_api_is_constructor` --- jerry-core/ecma/base/ecma-helpers-value.cpp | 8 ++++---- jerry-core/ecma/base/ecma-helpers.h | 8 ++++---- jerry-core/jerry.cpp | 11 ++++++----- jerry-core/mem/mem-allocator.cpp | 2 +- jerry-core/mem/mem-allocator.h | 2 +- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/jerry-core/ecma/base/ecma-helpers-value.cpp b/jerry-core/ecma/base/ecma-helpers-value.cpp index f6392b62c..583341e51 100644 --- a/jerry-core/ecma/base/ecma-helpers-value.cpp +++ b/jerry-core/ecma/base/ecma-helpers-value.cpp @@ -210,7 +210,7 @@ ecma_check_value_type_is_spec_defined (const ecma_value_t& value) /**< ecma-valu * Simple value constructor */ ecma_value_t __attr_const___ __attr_always_inline___ -ecma_make_simple_value (ecma_simple_value_t value) /**< simple value */ +ecma_make_simple_value (const ecma_simple_value_t value) /**< simple value */ { ecma_value_t ret_value = 0; @@ -224,7 +224,7 @@ ecma_make_simple_value (ecma_simple_value_t value) /**< simple value */ * Number value constructor */ ecma_value_t __attr_const___ -ecma_make_number_value (ecma_number_t* num_p) /**< number to reference in value */ +ecma_make_number_value (const ecma_number_t* num_p) /**< number to reference in value */ { JERRY_ASSERT(num_p != NULL); @@ -243,7 +243,7 @@ ecma_make_number_value (ecma_number_t* num_p) /**< number to reference in value * String value constructor */ ecma_value_t __attr_const___ -ecma_make_string_value (ecma_string_t* ecma_string_p) /**< string to reference in value */ +ecma_make_string_value (const ecma_string_t* ecma_string_p) /**< string to reference in value */ { JERRY_ASSERT(ecma_string_p != NULL); @@ -262,7 +262,7 @@ ecma_make_string_value (ecma_string_t* ecma_string_p) /**< string to reference i * object value constructor */ ecma_value_t __attr_const___ -ecma_make_object_value (ecma_object_t* object_p) /**< object to reference in value */ +ecma_make_object_value (const ecma_object_t* object_p) /**< object to reference in value */ { JERRY_ASSERT(object_p != NULL); diff --git a/jerry-core/ecma/base/ecma-helpers.h b/jerry-core/ecma/base/ecma-helpers.h index 55884b92d..a51367141 100644 --- a/jerry-core/ecma/base/ecma-helpers.h +++ b/jerry-core/ecma/base/ecma-helpers.h @@ -79,10 +79,10 @@ extern bool ecma_is_value_object (const ecma_value_t& value); extern void ecma_check_value_type_is_spec_defined (const ecma_value_t& value); -extern ecma_value_t ecma_make_simple_value (ecma_simple_value_t value); -extern ecma_value_t ecma_make_number_value (ecma_number_t* num_p); -extern ecma_value_t ecma_make_string_value (ecma_string_t* ecma_string_p); -extern ecma_value_t ecma_make_object_value (ecma_object_t* object_p); +extern ecma_value_t ecma_make_simple_value (const ecma_simple_value_t value); +extern ecma_value_t ecma_make_number_value (const ecma_number_t* num_p); +extern ecma_value_t ecma_make_string_value (const ecma_string_t* ecma_string_p); +extern ecma_value_t ecma_make_object_value (const ecma_object_t* object_p); extern ecma_number_t* __attr_pure___ ecma_get_number_from_value (const ecma_value_t& value); extern ecma_string_t* __attr_pure___ ecma_get_string_from_value (const ecma_value_t& value); extern ecma_object_t* __attr_pure___ ecma_get_object_from_value (const ecma_value_t& value); diff --git a/jerry-core/jerry.cpp b/jerry-core/jerry.cpp index 80b9a5ad8..4c55f9db2 100644 --- a/jerry-core/jerry.cpp +++ b/jerry-core/jerry.cpp @@ -435,9 +435,9 @@ jerry_api_is_function (const jerry_api_object_t* object_p) /**< an object */ { JERRY_ASSERT (object_p != NULL); - return (ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_FUNCTION - || ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_BOUND_FUNCTION - || ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION); + ecma_value_t obj_val = ecma_make_object_value (object_p); + + return ecma_op_is_callable (obj_val); } /* jerry_api_is_function */ /** @@ -451,8 +451,9 @@ jerry_api_is_constructor (const jerry_api_object_t* object_p) /**< an object */ { JERRY_ASSERT (object_p != NULL); - return (ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_FUNCTION - || ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_BOUND_FUNCTION); + ecma_value_t obj_val = ecma_make_object_value (object_p); + + return ecma_is_constructor (obj_val); } /* jerry_api_is_constructor */ /** diff --git a/jerry-core/mem/mem-allocator.cpp b/jerry-core/mem/mem-allocator.cpp index 254c1ea1a..b1f650dc1 100644 --- a/jerry-core/mem/mem-allocator.cpp +++ b/jerry-core/mem/mem-allocator.cpp @@ -96,7 +96,7 @@ mem_get_base_pointer (void) * Compress pointer. */ uintptr_t -mem_compress_pointer (void *pointer) /**< pointer to compress */ +mem_compress_pointer (const void *pointer) /**< pointer to compress */ { JERRY_ASSERT(pointer != NULL); diff --git a/jerry-core/mem/mem-allocator.h b/jerry-core/mem/mem-allocator.h index c0de8652e..cb872ca0a 100644 --- a/jerry-core/mem/mem-allocator.h +++ b/jerry-core/mem/mem-allocator.h @@ -83,7 +83,7 @@ typedef void (*mem_try_give_memory_back_callback_t) (mem_try_give_memory_back_se extern void mem_init (void); extern void mem_finalize (bool is_show_mem_stats); -extern uintptr_t mem_compress_pointer (void *pointer); +extern uintptr_t mem_compress_pointer (const void *pointer); extern void* mem_decompress_pointer (uintptr_t compressed_pointer); extern void mem_register_a_try_give_memory_back_callback (mem_try_give_memory_back_callback_t callback);