Rework the public API (#4829)

Related to #4186.

Some notable changes:
  - The term 'Error' now strictly refers to native Error objects defined in
    the ECMA standard, which are ordinary objects. All other uses of
    'error' or 'error reference' where the term refers to a thrown value is
    now called 'exception'.

  - Simplified the naming scheme of many String API functions. These functions
    will now also take an 'encoding' argument to specify the desired
    encoding in which to operate.

  - Removed the substring-copy-to-buffer functions. These functions
    behaved awkwardly, as they use character index to specify the
    start/end positions, and were mostly used incorrectly with byte
    offsets instead. The functionality can still be replicated with
    other functions if necessary.

  - String-to-buffer functions will no longer fail if the buffer is not
    sufficiently large, the string will instead be cropped.

  - Fixed the usage of the '_sz' prefix in many API functions. The term
    'sz' means zero-terminated string in hungarian notation, this was
    used incorrectly in many cases.

  - Renamed most of the public API functions to have shorter, more on-point
    names, rather than the often too long descriptive names. Functions are now
    also grouped by the type of value they operate on, where this makes
    sense.

JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai dbatyai@inf.u-szeged.hu
This commit is contained in:
Dániel Bátyai
2021-12-06 10:20:09 +01:00
committed by GitHub
parent 81d2319144
commit 9860d66a56
180 changed files with 10738 additions and 11025 deletions
+3 -4
View File
@@ -27,8 +27,7 @@
jerry_value_t
jerryx_arg_js_iterator_pop (jerryx_arg_js_iterator_t *js_arg_iter_p) /**< the JS arg iterator */
{
return (js_arg_iter_p->js_arg_idx++ < js_arg_iter_p->js_arg_cnt ? *js_arg_iter_p->js_arg_p++
: jerry_create_undefined ());
return (js_arg_iter_p->js_arg_idx++ < js_arg_iter_p->js_arg_cnt ? *js_arg_iter_p->js_arg_p++ : jerry_undefined ());
} /* jerryx_arg_js_iterator_pop */
/**
@@ -42,7 +41,7 @@ jerryx_arg_js_iterator_restore (jerryx_arg_js_iterator_t *js_arg_iter_p) /**< th
{
if (js_arg_iter_p->js_arg_idx == 0)
{
return jerry_create_undefined ();
return jerry_undefined ();
}
--js_arg_iter_p->js_arg_idx;
@@ -63,7 +62,7 @@ jerryx_arg_js_iterator_restore (jerryx_arg_js_iterator_t *js_arg_iter_p) /**< th
jerry_value_t
jerryx_arg_js_iterator_peek (jerryx_arg_js_iterator_t *js_arg_iter_p) /**< the JS arg iterator */
{
return (js_arg_iter_p->js_arg_idx < js_arg_iter_p->js_arg_cnt ? *js_arg_iter_p->js_arg_p : jerry_create_undefined ());
return (js_arg_iter_p->js_arg_idx < js_arg_iter_p->js_arg_cnt ? *js_arg_iter_p->js_arg_p : jerry_undefined ());
} /* jerryx_arg_js_iterator_peek */
/**
+51 -62
View File
@@ -56,12 +56,12 @@ jerryx_arg_transform_number_strict_common (jerryx_arg_js_iterator_t *js_arg_iter
if (!jerry_value_is_number (js_arg))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "It is not a number.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "It is not a number.");
}
*number_p = jerry_get_number_value (js_arg);
*number_p = jerry_value_as_number (js_arg);
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_transform_number_strict_common */
/**
@@ -79,17 +79,17 @@ jerryx_arg_transform_number_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**
jerry_value_t to_number = jerry_value_to_number (js_arg);
if (jerry_value_is_error (to_number))
if (jerry_value_is_exception (to_number))
{
jerry_release_value (to_number);
jerry_value_free (to_number);
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "It can not be converted to a number.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "It can not be converted to a number.");
}
*number_p = jerry_get_number_value (to_number);
jerry_release_value (to_number);
*number_p = jerry_value_as_number (to_number);
jerry_value_free (to_number);
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_transform_number_common */
/**
@@ -133,14 +133,14 @@ jerryx_arg_helper_process_double (double *d, /**< [in, out] the number to be pro
{
if (*d != *d) /* isnan (*d) triggers conversion warning on clang<9 */
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "The number is NaN.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "The number is NaN.");
}
if (option.clamp == JERRYX_ARG_NO_CLAMP)
{
if (*d > max || *d < min)
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "The number is out of range.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "The number is out of range.");
}
}
else
@@ -162,7 +162,7 @@ jerryx_arg_helper_process_double (double *d, /**< [in, out] the number to be pro
*d = ceil (*d);
}
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_helper_process_double */
/**
@@ -174,18 +174,18 @@ jerryx_arg_helper_process_double (double *d, /**< [in, out] the number to be pro
{ \
double tmp = 0.0; \
jerry_value_t rv = jerryx_arg_transform_number##suffix##_common (js_arg_iter_p, &tmp); \
if (jerry_value_is_error (rv)) \
if (jerry_value_is_exception (rv)) \
{ \
return rv; \
} \
jerry_release_value (rv); \
jerry_value_free (rv); \
union \
{ \
jerryx_arg_int_option_t int_option; \
uintptr_t extra_info; \
} u = { .extra_info = c_arg_p->extra_info }; \
rv = jerryx_arg_helper_process_double (&tmp, min, max, u.int_option); \
if (jerry_value_is_error (rv)) \
if (jerry_value_is_exception (rv)) \
{ \
return rv; \
} \
@@ -220,13 +220,13 @@ jerryx_arg_transform_boolean_strict (jerryx_arg_js_iterator_t *js_arg_iter_p, /*
if (!jerry_value_is_boolean (js_arg))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "It is not a boolean.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "It is not a boolean.");
}
bool *dest = c_arg_p->dest;
*dest = jerry_value_is_true (js_arg);
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_transform_boolean_strict */
/**
@@ -246,7 +246,7 @@ jerryx_arg_transform_boolean (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< avai
bool *dest = c_arg_p->dest;
*dest = to_boolean;
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_transform_boolean */
/**
@@ -259,32 +259,22 @@ jerryx_arg_transform_boolean (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< avai
static jerry_value_t
jerryx_arg_string_to_buffer_common_routine (jerry_value_t js_arg, /**< JS arg */
const jerryx_arg_t *c_arg_p, /**< native arg */
bool is_utf8) /**< whether it is UTF-8 string */
jerry_encoding_t encoding) /**< string encoding */
{
jerry_char_t *target_p = (jerry_char_t *) c_arg_p->dest;
jerry_size_t target_buf_size = (jerry_size_t) c_arg_p->extra_info;
jerry_size_t size;
jerry_length_t len;
if (!is_utf8)
jerry_size_t size = jerry_string_size (js_arg, encoding);
if (size > target_buf_size - 1)
{
size = jerry_string_to_char_buffer (js_arg, target_p, target_buf_size);
len = jerry_get_string_length (js_arg);
}
else
{
size = jerry_string_to_utf8_char_buffer (js_arg, target_p, target_buf_size);
len = jerry_get_utf8_string_length (js_arg);
}
if ((size == target_buf_size) || (size == 0 && len != 0))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "Buffer size is not large enough.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "Buffer size is not large enough.");
}
jerry_string_to_buffer (js_arg, encoding, target_p, target_buf_size);
target_p[size] = '\0';
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_string_to_buffer_common_routine */
/**
@@ -296,16 +286,16 @@ jerryx_arg_string_to_buffer_common_routine (jerry_value_t js_arg, /**< JS arg */
static jerry_value_t
jerryx_arg_transform_string_strict_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
const jerryx_arg_t *c_arg_p, /**< the native arg */
bool is_utf8) /**< whether it is a UTF-8 string */
jerry_encoding_t encoding) /**< string encoding */
{
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
if (!jerry_value_is_string (js_arg))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "It is not a string.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "It is not a string.");
}
return jerryx_arg_string_to_buffer_common_routine (js_arg, c_arg_p, is_utf8);
return jerryx_arg_string_to_buffer_common_routine (js_arg, c_arg_p, encoding);
} /* jerryx_arg_transform_string_strict_common */
/**
@@ -317,21 +307,21 @@ jerryx_arg_transform_string_strict_common (jerryx_arg_js_iterator_t *js_arg_iter
static jerry_value_t
jerryx_arg_transform_string_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
const jerryx_arg_t *c_arg_p, /**< the native arg */
bool is_utf8) /**< whether it is a UTF-8 string */
jerry_encoding_t encoding) /**< string encoding */
{
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
jerry_value_t to_string = jerry_value_to_string (js_arg);
if (jerry_value_is_error (to_string))
if (jerry_value_is_exception (to_string))
{
jerry_release_value (to_string);
jerry_value_free (to_string);
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "It can not be converted to a string.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "It can not be converted to a string.");
}
jerry_value_t ret = jerryx_arg_string_to_buffer_common_routine (to_string, c_arg_p, is_utf8);
jerry_release_value (to_string);
jerry_value_t ret = jerryx_arg_string_to_buffer_common_routine (to_string, c_arg_p, encoding);
jerry_value_free (to_string);
return ret;
} /* jerryx_arg_transform_string_common */
@@ -340,7 +330,7 @@ jerryx_arg_transform_string_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**
* Transform a JS argument to a cesu8 char array. Type coercion is not allowed.
*
* Note:
* returned value must be freed with jerry_release_value, when it is no longer needed.
* returned value must be freed with jerry_value_free, when it is no longer needed.
*
* @return jerry undefined: the transformer passes,
* jerry error: the transformer fails.
@@ -349,14 +339,14 @@ jerry_value_t
jerryx_arg_transform_string_strict (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
const jerryx_arg_t *c_arg_p) /**< the native arg */
{
return jerryx_arg_transform_string_strict_common (js_arg_iter_p, c_arg_p, false);
return jerryx_arg_transform_string_strict_common (js_arg_iter_p, c_arg_p, JERRY_ENCODING_CESU8);
} /* jerryx_arg_transform_string_strict */
/**
* Transform a JS argument to a utf8 char array. Type coercion is not allowed.
*
* Note:
* returned value must be freed with jerry_release_value, when it is no longer needed.
* returned value must be freed with jerry_value_free, when it is no longer needed.
*
* @return jerry undefined: the transformer passes,
* jerry error: the transformer fails.
@@ -365,14 +355,14 @@ jerry_value_t
jerryx_arg_transform_utf8_string_strict (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
const jerryx_arg_t *c_arg_p) /**< the native arg */
{
return jerryx_arg_transform_string_strict_common (js_arg_iter_p, c_arg_p, true);
return jerryx_arg_transform_string_strict_common (js_arg_iter_p, c_arg_p, JERRY_ENCODING_UTF8);
} /* jerryx_arg_transform_utf8_string_strict */
/**
* Transform a JS argument to a cesu8 char array. Type coercion is allowed.
*
* Note:
* returned value must be freed with jerry_release_value, when it is no longer needed.
* returned value must be freed with jerry_value_free, when it is no longer needed.
*
* @return jerry undefined: the transformer passes,
* jerry error: the transformer fails.
@@ -381,14 +371,14 @@ jerry_value_t
jerryx_arg_transform_string (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
const jerryx_arg_t *c_arg_p) /**< the native arg */
{
return jerryx_arg_transform_string_common (js_arg_iter_p, c_arg_p, false);
return jerryx_arg_transform_string_common (js_arg_iter_p, c_arg_p, JERRY_ENCODING_CESU8);
} /* jerryx_arg_transform_string */
/**
* Transform a JS argument to a utf8 char array. Type coercion is allowed.
*
* Note:
* returned value must be freed with jerry_release_value, when it is no longer needed.
* returned value must be freed with jerry_value_free, when it is no longer needed.
*
* @return jerry undefined: the transformer passes,
* jerry error: the transformer fails.
@@ -397,7 +387,7 @@ jerry_value_t
jerryx_arg_transform_utf8_string (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
const jerryx_arg_t *c_arg_p) /**< the native arg */
{
return jerryx_arg_transform_string_common (js_arg_iter_p, c_arg_p, true);
return jerryx_arg_transform_string_common (js_arg_iter_p, c_arg_p, JERRY_ENCODING_UTF8);
} /* jerryx_arg_transform_utf8_string */
/**
@@ -414,13 +404,13 @@ jerryx_arg_transform_function (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< ava
if (!jerry_value_is_function (js_arg))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "It is not a function.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "It is not a function.");
}
jerry_value_t *func_p = c_arg_p->dest;
*func_p = jerry_acquire_value (js_arg);
*func_p = jerry_value_copy (js_arg);
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_transform_function */
/**
@@ -438,21 +428,20 @@ jerryx_arg_transform_native_pointer (jerryx_arg_js_iterator_t *js_arg_iter_p, /*
if (!jerry_value_is_object (js_arg))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "It is not an object.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "It is not an object.");
}
const jerry_object_native_info_t *expected_info_p;
expected_info_p = (const jerry_object_native_info_t *) c_arg_p->extra_info;
void **ptr_p = (void **) c_arg_p->dest;
bool is_ok = jerry_get_object_native_pointer (js_arg, ptr_p, expected_info_p);
*ptr_p = jerry_object_get_native_ptr (js_arg, expected_info_p);
if (!is_ok)
if (*ptr_p == NULL)
{
return jerry_create_error (JERRY_ERROR_TYPE,
(jerry_char_t *) "The object has no native pointer or type does not match.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "The object has no native pointer or type does not match.");
}
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_transform_native_pointer */
/**
@@ -543,5 +532,5 @@ jerryx_arg_transform_ignore (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< avail
(void) js_arg_iter_p; /* unused */
(void) c_arg_p; /* unused */
return jerry_create_undefined ();
return jerry_undefined ();
} /* jerryx_arg_transform_ignore */
+18 -18
View File
@@ -35,11 +35,11 @@ jerryx_arg_transform_args (const jerry_value_t *js_arg_p, /**< points to the arr
const jerryx_arg_t *c_arg_p, /**< points to the array of validation/transformation steps */
jerry_length_t c_arg_cnt) /**< the count of the `c_arg_p` array */
{
jerry_value_t ret = jerry_create_undefined ();
jerry_value_t ret = jerry_undefined ();
jerryx_arg_js_iterator_t iterator = { .js_arg_p = js_arg_p, .js_arg_cnt = js_arg_cnt, .js_arg_idx = 0 };
for (; c_arg_cnt != 0 && !jerry_value_is_error (ret); c_arg_cnt--, c_arg_p++)
for (; c_arg_cnt != 0 && !jerry_value_is_exception (ret); c_arg_cnt--, c_arg_p++)
{
ret = c_arg_p->func (&iterator, c_arg_p);
}
@@ -66,18 +66,18 @@ jerryx_arg_transform_this_and_args (const jerry_value_t this_val, /**< the this_
{
if (c_arg_cnt == 0)
{
return jerry_create_undefined ();
return jerry_undefined ();
}
jerryx_arg_js_iterator_t iterator = { .js_arg_p = &this_val, .js_arg_cnt = 1, .js_arg_idx = 0 };
jerry_value_t ret = c_arg_p->func (&iterator, c_arg_p);
if (jerry_value_is_error (ret))
if (jerry_value_is_exception (ret))
{
jerry_release_value (ret);
jerry_value_free (ret);
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "'this' validation failed.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "'this' validation failed.");
}
return jerryx_arg_transform_args (js_arg_p, js_arg_cnt, c_arg_p + 1, c_arg_cnt - 1);
@@ -99,22 +99,22 @@ jerryx_arg_transform_object_properties (const jerry_value_t obj_val, /**< the JS
{
if (!jerry_value_is_object (obj_val))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "Not an object.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "Not an object.");
}
JERRY_VLA (jerry_value_t, prop, name_cnt);
for (jerry_length_t i = 0; i < name_cnt; i++, name_p++)
{
const jerry_value_t name_str = jerry_create_string (*name_p);
prop[i] = jerry_get_property (obj_val, name_str);
jerry_release_value (name_str);
const jerry_value_t name_str = jerry_string_sz ((char *) (*name_p));
prop[i] = jerry_object_get (obj_val, name_str);
jerry_value_free (name_str);
if (jerry_value_is_error (prop[i]))
if (jerry_value_is_exception (prop[i]))
{
for (jerry_length_t j = 0; j < i; j++)
{
jerry_release_value (prop[j]);
jerry_value_free (prop[j]);
}
return prop[i];
@@ -125,7 +125,7 @@ jerryx_arg_transform_object_properties (const jerry_value_t obj_val, /**< the JS
for (jerry_length_t i = 0; i < name_cnt; i++)
{
jerry_release_value (prop[i]);
jerry_value_free (prop[i]);
}
return ret;
@@ -144,20 +144,20 @@ jerryx_arg_transform_array (const jerry_value_t array_val, /**< points to the JS
{
if (!jerry_value_is_array (array_val))
{
return jerry_create_error (JERRY_ERROR_TYPE, (jerry_char_t *) "Not an array.");
return jerry_throw_sz (JERRY_ERROR_TYPE, "Not an array.");
}
JERRY_VLA (jerry_value_t, arr, c_arg_cnt);
for (jerry_length_t i = 0; i < c_arg_cnt; i++)
{
arr[i] = jerry_get_property_by_index (array_val, i);
arr[i] = jerry_object_get_index (array_val, i);
if (jerry_value_is_error (arr[i]))
if (jerry_value_is_exception (arr[i]))
{
for (jerry_length_t j = 0; j < i; j++)
{
jerry_release_value (arr[j]);
jerry_value_free (arr[j]);
}
return arr[i];
@@ -168,7 +168,7 @@ jerryx_arg_transform_array (const jerry_value_t array_val, /**< points to the JS
for (jerry_length_t i = 0; i < c_arg_cnt; i++)
{
jerry_release_value (arr[i]);
jerry_value_free (arr[i]);
}
return ret;
+1 -1
View File
@@ -140,7 +140,7 @@ jerryx_debugger_rp_receive (jerry_debugger_transport_header_t *header_p, /**< he
bool
jerryx_debugger_rp_create (void)
{
const size_t interface_size = sizeof (jerry_debugger_transport_header_t);
const jerry_size_t interface_size = sizeof (jerry_debugger_transport_header_t);
jerry_debugger_transport_header_t *header_p;
header_p = (jerry_debugger_transport_header_t *) jerry_heap_alloc (interface_size);
+1 -1
View File
@@ -367,7 +367,7 @@ jerryx_debugger_serial_create (const char *config) /**< specify the configuratio
JERRYX_DEBUG_MSG ("Client connected\n");
size_t size = sizeof (jerryx_debugger_transport_serial_t);
jerry_size_t size = sizeof (jerryx_debugger_transport_serial_t);
jerry_debugger_transport_header_t *header_p;
header_p = (jerry_debugger_transport_header_t *) jerry_heap_alloc (size);
+1 -1
View File
@@ -364,7 +364,7 @@ jerryx_debugger_tcp_create (uint16_t port) /**< listening port */
JERRYX_DEBUG_MSG ("Connected from: %s\n", inet_ntoa (addr.sin_addr));
size_t size = sizeof (jerryx_debugger_transport_tcp_t);
jerry_size_t size = sizeof (jerryx_debugger_transport_tcp_t);
jerry_debugger_transport_header_t *header_p;
header_p = (jerry_debugger_transport_header_t *) jerry_heap_alloc (size);
+2 -2
View File
@@ -407,7 +407,7 @@ jerryx_debugger_ws_create (void)
{
bool is_handshake_ok = false;
const size_t buffer_size = 1024;
const jerry_size_t buffer_size = 1024;
uint8_t *request_buffer_p = (uint8_t *) jerry_heap_alloc (buffer_size);
if (!request_buffer_p)
@@ -424,7 +424,7 @@ jerryx_debugger_ws_create (void)
return false;
}
const size_t interface_size = sizeof (jerry_debugger_transport_header_t);
const jerry_size_t interface_size = sizeof (jerry_debugger_transport_header_t);
jerry_debugger_transport_header_t *header_p;
header_p = (jerry_debugger_transport_header_t *) jerry_heap_alloc (interface_size);
+2 -2
View File
@@ -47,7 +47,7 @@ jerryx_handle_scope_release_handles (jerryx_handle_scope scope)
jerryx_handle_t *a_handle = scope->handle_ptr;
while (a_handle != NULL)
{
jerry_release_value (a_handle->jval);
jerry_value_free (a_handle->jval);
jerryx_handle_t *sibling = a_handle->sibling;
jerry_heap_free (a_handle, sizeof (jerryx_handle_t));
a_handle = sibling;
@@ -58,7 +58,7 @@ jerryx_handle_scope_release_handles (jerryx_handle_scope scope)
for (size_t idx = 0; idx < prelist_handle_count; idx++)
{
jerry_release_value (scope->handle_prelist[idx]);
jerry_value_free (scope->handle_prelist[idx]);
}
scope->prelist_handle_count = 0;
} /* jerryx_handle_scope_release_handles */
+15 -26
View File
@@ -38,52 +38,41 @@ jerryx_handler_assert_fatal (const jerry_call_info_t *call_info_p, /**< call inf
if (args_cnt == 1 && jerry_value_is_true (args_p[0]))
{
return jerry_create_boolean (true);
return jerry_boolean (true);
}
/* Assert failed, print a bit of JS backtrace */
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Script Error: assertion failed\n");
if (jerry_is_feature_enabled (JERRY_FEATURE_LINE_INFO))
if (jerry_feature_enabled (JERRY_FEATURE_LINE_INFO))
{
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Script backtrace (top 5):\n");
/* If the line info feature is disabled an empty array will be returned. */
jerry_value_t backtrace_array = jerry_get_backtrace (5);
uint32_t array_length = jerry_get_array_length (backtrace_array);
jerry_value_t backtrace_array = jerry_backtrace (5);
uint32_t array_length = jerry_array_length (backtrace_array);
for (uint32_t idx = 0; idx < array_length; idx++)
{
jerry_value_t property = jerry_get_property_by_index (backtrace_array, idx);
jerry_length_t total_size = jerry_get_utf8_string_size (property);
jerry_length_t current_size = 0;
jerry_char_t string_buffer[64];
const jerry_length_t copy_size = (jerry_length_t) (sizeof (string_buffer) - 1);
jerry_value_t property = jerry_object_get_index (backtrace_array, idx);
/* On some systems the uint32_t values can't be printed with "%u" and
* on some systems it can be printed. To avoid differences in the uint32_t typdef
* The "PRIu32" macro is used to correctly add the formatter.
*/
jerry_port_log (JERRY_LOG_LEVEL_ERROR, " %" PRIu32 ": ", idx);
do
{
jerry_size_t copied_bytes = jerry_substring_to_utf8_char_buffer (property,
current_size,
current_size + copy_size,
string_buffer,
copy_size);
string_buffer[copied_bytes] = '\0';
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "%s", string_buffer);
current_size += copied_bytes;
} while (total_size != current_size);
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "\n");
jerry_char_t string_buffer[256];
const jerry_length_t buffer_size = (jerry_length_t) (sizeof (string_buffer) - 1);
jerry_release_value (property);
jerry_size_t copied_bytes = jerry_string_to_buffer (property, JERRY_ENCODING_UTF8, string_buffer, buffer_size);
string_buffer[copied_bytes] = '\0';
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "%s\n", string_buffer);
jerry_value_free (property);
}
jerry_release_value (backtrace_array);
jerry_value_free (backtrace_array);
}
jerry_port_fatal (ERR_FAILED_INTERNAL_ASSERTION);
@@ -104,10 +93,10 @@ jerryx_handler_assert_throw (const jerry_call_info_t *call_info_p, /**< call inf
if (args_cnt == 1 && jerry_value_is_true (args_p[0]))
{
return jerry_create_boolean (true);
return jerry_boolean (true);
}
return jerry_create_error (JERRY_ERROR_COMMON, (jerry_char_t *) "assertion failed");
return jerry_throw_sz (JERRY_ERROR_COMMON, "assertion failed");
} /* jerryx_handler_assert_throw */
/**
+2 -2
View File
@@ -30,6 +30,6 @@ jerryx_handler_gc (const jerry_call_info_t *call_info_p, /**< call information *
jerry_gc_mode_t mode =
((args_cnt > 0 && jerry_value_to_boolean (args_p[0])) ? JERRY_GC_PRESSURE_HIGH : JERRY_GC_PRESSURE_LOW);
jerry_gc (mode);
return jerry_create_undefined ();
jerry_heap_gc (mode);
return jerry_undefined ();
} /* jerryx_handler_gc */
+9 -51
View File
@@ -44,9 +44,7 @@ jerryx_handler_print (const jerry_call_info_t *call_info_p, /**< call informatio
{
(void) call_info_p; /* unused */
const char *const null_str = "\\u0000";
jerry_value_t ret_val = jerry_create_undefined ();
jerry_value_t ret_val = jerry_undefined ();
for (jerry_length_t arg_index = 0; arg_index < args_cnt; arg_index++)
{
@@ -54,69 +52,29 @@ jerryx_handler_print (const jerry_call_info_t *call_info_p, /**< call informatio
if (jerry_value_is_symbol (args_p[arg_index]))
{
str_val = jerry_get_symbol_descriptive_string (args_p[arg_index]);
str_val = jerry_symbol_descriptive_string (args_p[arg_index]);
}
else
{
str_val = jerry_value_to_string (args_p[arg_index]);
}
if (jerry_value_is_error (str_val))
if (jerry_value_is_exception (str_val))
{
/* There is no need to free the undefined value. */
ret_val = str_val;
break;
}
jerry_length_t length = jerry_get_utf8_string_length (str_val);
jerry_length_t substr_pos = 0;
jerry_char_t substr_buf[256];
do
if (arg_index > 0)
{
jerry_size_t substr_size = jerry_substring_to_utf8_char_buffer (str_val, substr_pos, length, substr_buf, 256 - 1);
jerry_port_print_char (' ');
}
jerry_char_t *buf_end_p = substr_buf + substr_size;
/* Update start position by the number of utf-8 characters. */
for (jerry_char_t *buf_p = substr_buf; buf_p < buf_end_p; buf_p++)
{
/* Skip intermediate utf-8 octets. */
if ((*buf_p & 0xc0) != 0x80)
{
substr_pos++;
}
}
if (substr_pos == length)
{
*buf_end_p++ = (arg_index < args_cnt - 1) ? ' ' : '\n';
}
for (jerry_char_t *buf_p = substr_buf; buf_p < buf_end_p; buf_p++)
{
char chr = (char) *buf_p;
if (chr != '\0')
{
jerry_port_print_char (chr);
continue;
}
for (jerry_size_t null_index = 0; null_str[null_index] != '\0'; null_index++)
{
jerry_port_print_char (null_str[null_index]);
}
}
} while (substr_pos < length);
jerry_release_value (str_val);
}
if (args_cnt == 0 || jerry_value_is_error (ret_val))
{
jerry_port_print_char ('\n');
jerry_string_print (str_val);
jerry_value_free (str_val);
}
jerry_port_print_char ('\n');
return ret_val;
} /* jerryx_handler_print */
+34 -34
View File
@@ -19,24 +19,24 @@
* Register a JavaScript function in the global object.
*
* Note:
* returned value must be freed with jerry_release_value, when it is no longer needed.
* returned value must be freed with jerry_value_free, when it is no longer needed.
*
* @return true value - if the operation was successful,
* error - otherwise.
*/
jerry_value_t
jerryx_handler_register_global (const jerry_char_t *name_p, /**< name of the function */
jerryx_handler_register_global (const char *name_p, /**< name of the function */
jerry_external_handler_t handler_p) /**< function callback */
{
jerry_value_t global_obj_val = jerry_get_global_object ();
jerry_value_t function_name_val = jerry_create_string (name_p);
jerry_value_t function_val = jerry_create_external_function (handler_p);
jerry_value_t global_obj_val = jerry_current_realm ();
jerry_value_t function_name_val = jerry_string_sz (name_p);
jerry_value_t function_val = jerry_function_external (handler_p);
jerry_value_t result_val = jerry_set_property (global_obj_val, function_name_val, function_val);
jerry_value_t result_val = jerry_object_set (global_obj_val, function_name_val, function_val);
jerry_release_value (function_val);
jerry_release_value (function_name_val);
jerry_release_value (global_obj_val);
jerry_value_free (function_val);
jerry_value_free (function_name_val);
jerry_value_free (global_obj_val);
return result_val;
} /* jerryx_handler_register_global */
@@ -66,20 +66,20 @@ jerryx_set_properties (const jerry_value_t target_object, /**< target object */
if (entries == NULL)
{
return JERRYX_SET_PROPERTIES_RESULT (jerry_create_undefined (), 0);
return JERRYX_SET_PROPERTIES_RESULT (jerry_undefined (), 0);
}
for (; (entries[idx].name != NULL); idx++)
{
const jerryx_property_entry *entry = &entries[idx];
jerry_value_t prop_name = jerry_create_string_from_utf8 ((const jerry_char_t *) entry->name);
jerry_value_t result = jerry_set_property (target_object, prop_name, entry->value);
jerry_value_t prop_name = jerry_string_sz (entry->name);
jerry_value_t result = jerry_object_set (target_object, prop_name, entry->value);
jerry_release_value (prop_name);
jerry_value_free (prop_name);
// By API definition:
// The jerry_set_property returns TRUE if there is no problem
// The jerry_object_set returns TRUE if there is no problem
// and error object if there is any problem.
// Thus there is no need to check if the boolean value is false or not.
if (!jerry_value_is_boolean (result))
@@ -87,11 +87,11 @@ jerryx_set_properties (const jerry_value_t target_object, /**< target object */
return JERRYX_SET_PROPERTIES_RESULT (result, idx);
}
jerry_release_value (entry->value);
jerry_release_value (result);
jerry_value_free (entry->value);
jerry_value_free (result);
}
return JERRYX_SET_PROPERTIES_RESULT (jerry_create_undefined (), idx);
return JERRYX_SET_PROPERTIES_RESULT (jerry_undefined (), idx);
#undef JERRYX_SET_PROPERTIES_RESULT
} /* jerryx_set_properties */
@@ -112,7 +112,7 @@ jerryx_release_property_entry (const jerryx_property_entry entries[], /**< list
for (uint32_t idx = register_result.registered; entries[idx].name != NULL; idx++)
{
jerry_release_value (entries[idx].value);
jerry_value_free (entries[idx].value);
}
} /* jerryx_release_property_entry */
@@ -120,10 +120,10 @@ jerryx_release_property_entry (const jerryx_property_entry entries[], /**< list
* Set a property to a specified value with a given name.
*
* Notes:
* - The operation performed is the same as what the `jerry_set_property` method.
* - The operation performed is the same as what the `jerry_object_set` method.
* - The property name must be a zero terminated UTF-8 string.
* - There should be no '\0' (NULL) character in the name excluding the string terminator.
* - Returned value must be freed with jerry_release_value, when it is no longer needed.
* - Returned value must be freed with jerry_value_free, when it is no longer needed.
*
* @return true value - if the operation was successful
* thrown error - otherwise
@@ -133,10 +133,10 @@ jerryx_set_property_str (const jerry_value_t target_object, /**< target object *
const char *name, /**< property name */
const jerry_value_t value) /**< value to set */
{
jerry_value_t property_name_val = jerry_create_string_from_utf8 ((const jerry_char_t *) name);
jerry_value_t result_val = jerry_set_property (target_object, property_name_val, value);
jerry_value_t property_name_val = jerry_string_sz (name);
jerry_value_t result_val = jerry_object_set (target_object, property_name_val, value);
jerry_release_value (property_name_val);
jerry_value_free (property_name_val);
return result_val;
} /* jerryx_set_property_str */
@@ -145,10 +145,10 @@ jerryx_set_property_str (const jerry_value_t target_object, /**< target object *
* Get a property value of a specified object.
*
* Notes:
* - The operation performed is the same as what the `jerry_get_property` method.
* - The operation performed is the same as what the `jerry_object_get` method.
* - The property name must be a zero terminated UTF-8 string.
* - There should be no '\0' (NULL) character in the name excluding the string terminator.
* - Returned value must be freed with jerry_release_value, when it is no longer needed.
* - Returned value must be freed with jerry_value_free, when it is no longer needed.
*
* @return jerry_value_t - the property value
*/
@@ -156,9 +156,9 @@ jerry_value_t
jerryx_get_property_str (const jerry_value_t target_object, /**< target object */
const char *name) /**< property name */
{
jerry_value_t prop_name = jerry_create_string_from_utf8 ((const jerry_char_t *) name);
jerry_value_t result_val = jerry_get_property (target_object, prop_name);
jerry_release_value (prop_name);
jerry_value_t prop_name = jerry_string_sz (name);
jerry_value_t result_val = jerry_object_get (target_object, prop_name);
jerry_value_free (prop_name);
return result_val;
} /* jerryx_get_property_str */
@@ -167,7 +167,7 @@ jerryx_get_property_str (const jerry_value_t target_object, /**< target object *
* Check if a property exists on an object.
*
* Notes:
* - The operation performed is the same as what the `jerry_has_property` method.
* - The operation performed is the same as what the `jerry_object_has` method.
* - The property name must be a zero terminated UTF-8 string.
* - There should be no '\0' (NULL) character in the name excluding the string terminator.
*
@@ -180,16 +180,16 @@ jerryx_has_property_str (const jerry_value_t target_object, /**< target object *
{
bool has_property = false;
jerry_value_t prop_name = jerry_create_string_from_utf8 ((const jerry_char_t *) name);
jerry_value_t has_prop_val = jerry_has_property (target_object, prop_name);
jerry_value_t prop_name = jerry_string_sz (name);
jerry_value_t has_prop_val = jerry_object_has (target_object, prop_name);
if (!jerry_value_is_error (has_prop_val))
if (!jerry_value_is_exception (has_prop_val))
{
has_property = jerry_value_is_true (has_prop_val);
}
jerry_release_value (has_prop_val);
jerry_release_value (prop_name);
jerry_value_free (has_prop_val);
jerry_value_free (prop_name);
return has_property;
} /* jerryx_has_property_str */
+9 -9
View File
@@ -18,7 +18,7 @@
/**
* Get the resource name (usually a file name) of the currently executed script or the given function object
*
* Note: returned value must be freed with jerry_release_value, when it is no longer needed
* Note: returned value must be freed with jerry_value_free, when it is no longer needed
*
* @return JS string constructed from
* - the currently executed function object's resource name, if the given value is undefined
@@ -26,15 +26,15 @@
* - "<anonymous>", otherwise
*/
jerry_value_t
jerryx_handler_resource_name (const jerry_call_info_t *call_info_p, /**< call information */
const jerry_value_t args_p[], /**< function arguments */
const jerry_length_t args_cnt) /**< number of function arguments */
jerryx_handler_source_name (const jerry_call_info_t *call_info_p, /**< call information */
const jerry_value_t args_p[], /**< function arguments */
const jerry_length_t args_cnt) /**< number of function arguments */
{
(void) call_info_p; /* unused */
jerry_value_t undefined_value = jerry_create_undefined ();
jerry_value_t resource_name = jerry_get_resource_name (args_cnt > 0 ? args_p[0] : undefined_value);
jerry_release_value (undefined_value);
jerry_value_t undefined_value = jerry_undefined ();
jerry_value_t source_name = jerry_source_name (args_cnt > 0 ? args_p[0] : undefined_value);
jerry_value_free (undefined_value);
return resource_name;
} /* jerryx_handler_resource_name */
return source_name;
} /* jerryx_handler_source_name */
@@ -21,25 +21,25 @@ JERRY_C_API_BEGIN
#include "autorelease.impl.h"
/*
* Macro for `const jerry_value_t` for which jerry_release_value () is
* Macro for `const jerry_value_t` for which jerry_value_free () is
* automatically called when the variable goes out of scope.
*
* Example usage:
* static void foo (bool enable)
* {
* JERRYX_AR_VALUE_T bar = jerry_create_string (...);
* JERRYX_AR_VALUE_T bar = jerry_string (...);
*
* if (enable) {
* JERRYX_AR_VALUE_T baz = jerry_get_global_object ();
* JERRYX_AR_VALUE_T baz = jerry_current_realm ();
*
* // ...
*
* // jerry_release_value (baz) and jerry_release_value (bar) is called automatically before
* // jerry_value_free (baz) and jerry_value_free (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,
* // jerry_value_free (bar) is called automatically when the function returns,
* // because `bar` goes out of scope.
* }
*/
@@ -20,7 +20,7 @@
#ifdef __GNUC__
/*
* Calls jerry_release_value (*value).
* Calls jerry_value_free (*value).
* The GCC __cleanup__ function must take a pointer to the variable to clean up.
*
* @return void
@@ -28,7 +28,7 @@
static inline void
jerryx_autorelease_cleanup (const jerry_value_t *value) /**< jerry value */
{
jerry_release_value (*value);
jerry_value_free (*value);
} /* jerryx_autorelease_cleanup */
#define __JERRYX_AR_VALUE_T_IMPL const jerry_value_t __attribute__ ((__cleanup__ (jerryx_autorelease_cleanup)))
+19 -19
View File
@@ -24,7 +24,7 @@ JERRY_C_API_BEGIN
* Handler registration helper
*/
jerry_value_t jerryx_handler_register_global (const jerry_char_t *name_p, jerry_external_handler_t handler_p);
jerry_value_t jerryx_handler_register_global (const char *name_p, jerry_external_handler_t handler_p);
/*
* Common external function handlers
@@ -44,9 +44,9 @@ jerryx_handler_gc (const jerry_call_info_t *call_info_p, const jerry_value_t arg
jerry_value_t jerryx_handler_print (const jerry_call_info_t *call_info_p,
const jerry_value_t args_p[],
const jerry_length_t args_cnt);
jerry_value_t jerryx_handler_resource_name (const jerry_call_info_t *call_info_p,
const jerry_value_t args_p[],
const jerry_length_t args_cnt);
jerry_value_t jerryx_handler_source_name (const jerry_call_info_t *call_info_p,
const jerry_value_t args_p[],
const jerry_length_t args_cnt);
/**
* Struct used by the `jerryx_set_functions` method to
@@ -61,32 +61,32 @@ typedef struct
#define JERRYX_PROPERTY_NUMBER(NAME, NUMBER) \
(jerryx_property_entry) \
{ \
NAME, jerry_create_number (NUMBER) \
NAME, jerry_number (NUMBER) \
}
#define JERRYX_PROPERTY_STRING(NAME, STR) \
(jerryx_property_entry) \
{ \
NAME, jerry_create_string_from_utf8 ((const jerry_char_t *) STR) \
#define JERRYX_PROPERTY_STRING(NAME, STR, SIZE) \
(jerryx_property_entry) \
{ \
NAME, jerry_string ((const jerry_char_t *) STR, SIZE, JERRY_ENCODING_UTF8) \
}
#define JERRYX_PROPERTY_STRING_SZ(NAME, STR, SIZE) \
(jerryx_property_entry) \
{ \
NAME, jerry_create_string_sz_from_utf8 ((const jerry_char_t *) STR, SIZE) \
#define JERRYX_PROPERTY_STRING_SZ(NAME, STR) \
(jerryx_property_entry) \
{ \
NAME, jerry_string_sz (STR) \
}
#define JERRYX_PROPERTY_BOOLEAN(NAME, VALUE) \
(jerryx_property_entry) \
{ \
NAME, jerry_create_boolean (VALUE) \
NAME, jerry_boolean (VALUE) \
}
#define JERRYX_PROPERTY_FUNCTION(NAME, FUNC) \
(jerryx_property_entry) \
{ \
NAME, jerry_create_external_function (FUNC) \
#define JERRYX_PROPERTY_FUNCTION(NAME, FUNC) \
(jerryx_property_entry) \
{ \
NAME, jerry_function_external (FUNC) \
}
#define JERRYX_PROPERTY_UNDEFINED(NAME) \
(jerryx_property_entry) \
{ \
NAME, jerry_create_undefined () \
NAME, jerry_undefined () \
}
#define JERRYX_PROPERTY_LIST_END() \
(jerryx_property_entry) \
+28 -32
View File
@@ -19,9 +19,9 @@
#include "jerryscript.h"
static const jerry_char_t *module_name_property_name = (jerry_char_t *) "moduleName";
static const jerry_char_t *module_not_found = (jerry_char_t *) "Module not found";
static const jerry_char_t *module_name_not_string = (jerry_char_t *) "Module name is not a string";
static const char *module_name_property_name = "moduleName";
static const char *module_not_found = "Module not found";
static const char *module_name_not_string = "Module name is not a string";
/**
* Create an error related to modules
@@ -33,19 +33,16 @@ static const jerry_char_t *module_name_not_string = (jerry_char_t *) "Module nam
*/
static jerry_value_t
jerryx_module_create_error (jerry_error_t error_type, /**< the type of error to create */
const jerry_char_t *message, /**< the error message */
const char *message, /**< the error message */
const jerry_value_t module_name) /**< the module name */
{
jerry_value_t ret = jerry_create_error (error_type, message);
jerry_value_t error_object = jerry_error_sz (error_type, message);
jerry_value_t property_name = jerry_string_sz (module_name_property_name);
jerry_value_t error_object = jerry_get_value_from_error (ret, false);
jerry_value_t property_name = jerry_create_string (module_name_property_name);
jerry_value_free (jerry_object_set (error_object, property_name, module_name));
jerry_release_value (jerry_set_property (error_object, property_name, module_name));
jerry_release_value (property_name);
jerry_release_value (error_object);
return ret;
jerry_value_free (property_name);
return jerry_throw_value (error_object, true);
} /* jerryx_module_create_error */
/**
@@ -54,7 +51,7 @@ jerryx_module_create_error (jerry_error_t error_type, /**< the type of error to
static void
jerryx_module_manager_init (void *user_data_p)
{
*((jerry_value_t *) user_data_p) = jerry_create_object ();
*((jerry_value_t *) user_data_p) = jerry_object ();
} /* jerryx_module_manager_init */
/**
@@ -63,7 +60,7 @@ jerryx_module_manager_init (void *user_data_p)
static void
jerryx_module_manager_deinit (void *user_data_p) /**< context pointer to deinitialize */
{
jerry_release_value (*(jerry_value_t *) user_data_p);
jerry_value_free (*(jerry_value_t *) user_data_p);
} /* jerryx_module_manager_deinit */
/**
@@ -118,10 +115,10 @@ jerryx_module_check_cache (jerry_value_t cache, /**< cache from which to attempt
bool ret = false;
/* Check if the cache has the module. */
jerry_value_t js_has_property = jerry_has_property (cache, module_name);
jerry_value_t js_has_property = jerry_object_has (cache, module_name);
/* If we succeed in getting an answer, we examine the answer. */
if (!jerry_value_is_error (js_has_property))
if (!jerry_value_is_exception (js_has_property))
{
bool has_property = jerry_value_is_true (js_has_property);
@@ -130,13 +127,13 @@ jerryx_module_check_cache (jerry_value_t cache, /**< cache from which to attempt
{
if (result != NULL)
{
(*result) = jerry_get_property (cache, module_name);
(*result) = jerry_object_get (cache, module_name);
}
ret = true;
}
}
jerry_release_value (js_has_property);
jerry_value_free (js_has_property);
return ret;
} /* jerryx_module_check_cache */
@@ -152,22 +149,22 @@ jerryx_module_add_to_cache (jerry_value_t cache, /**< cache to which to add the
jerry_value_t module_name, /**< key at which to cache the module */
jerry_value_t module) /**< the module to cache */
{
jerry_value_t ret = jerry_set_property (cache, module_name, module);
jerry_value_t ret = jerry_object_set (cache, module_name, module);
if (jerry_value_is_error (ret))
if (jerry_value_is_exception (ret))
{
jerry_release_value (module);
jerry_value_free (module);
}
else
{
jerry_release_value (ret);
jerry_value_free (ret);
ret = module;
}
return ret;
} /* jerryx_module_add_to_cache */
static const jerry_char_t *on_resolve_absent = (jerry_char_t *) "Module on_resolve () must not be NULL";
static const char *on_resolve_absent = "Module on_resolve () must not be NULL";
/**
* Declare and define the default module resolver - one which examines what modules are defined in the above linker
@@ -180,9 +177,9 @@ jerryx_resolve_native_module (const jerry_value_t canonical_name, /**< canonical
{
const jerryx_native_module_t *module_p = NULL;
jerry_size_t name_size = jerry_get_utf8_string_size (canonical_name);
jerry_size_t name_size = jerry_string_size (canonical_name, JERRY_ENCODING_UTF8);
JERRY_VLA (jerry_char_t, name_string, name_size);
jerry_string_to_utf8_char_buffer (canonical_name, name_string, name_size);
jerry_string_to_buffer (canonical_name, JERRY_ENCODING_UTF8, name_string, name_size);
/* Look for the module by its name in the list of module definitions. */
for (module_p = first_module_p; module_p != NULL; module_p = module_p->next_p)
@@ -226,7 +223,7 @@ jerryx_module_resolve_local (const jerry_value_t name, /**< name of the module t
goto done;
}
instances = *(jerry_value_t *) jerry_get_context_data (&jerryx_module_manager);
instances = *(jerry_value_t *) jerry_context_data (&jerryx_module_manager);
/**
* Establish the canonical name for the requested module. Each resolver presents its own canonical name. If one of
@@ -235,15 +232,14 @@ jerryx_module_resolve_local (const jerry_value_t name, /**< name of the module t
for (index = 0; index < resolver_count; index++)
{
get_canonical_name_p = (resolvers_p[index] == NULL ? NULL : resolvers_p[index]->get_canonical_name_p);
canonical_names[index] =
((get_canonical_name_p == NULL) ? jerry_acquire_value (name) : get_canonical_name_p (name));
canonical_names[index] = ((get_canonical_name_p == NULL) ? jerry_value_copy (name) : get_canonical_name_p (name));
canonical_names_used++;
if (jerryx_module_check_cache (instances, canonical_names[index], result))
{
/* A NULL for result indicates that we are to delete the module from the cache if found. Let's do that here.*/
if (result == NULL)
{
jerry_delete_property (instances, canonical_names[index]);
jerry_object_delete (instances, canonical_names[index]);
}
goto done;
}
@@ -263,7 +259,7 @@ jerryx_module_resolve_local (const jerry_value_t name, /**< name of the module t
resolve_p = (resolvers_p[index] == NULL ? NULL : resolvers_p[index]->resolve_p);
if (resolve_p != NULL && resolve_p (canonical_names[index], result))
{
if (!jerry_value_is_error (*result))
if (!jerry_value_is_exception (*result))
{
*result = jerryx_module_add_to_cache (instances, canonical_names[index], *result);
}
@@ -278,7 +274,7 @@ done:
/* Release the canonical names as returned by the various resolvers. */
for (index = 0; index < canonical_names_used; index++)
{
jerry_release_value (canonical_names[index]);
jerry_value_free (canonical_names[index]);
}
} /* jerryx_module_resolve_local */
@@ -311,7 +307,7 @@ jerryx_module_clear_cache (const jerry_value_t name, /**< name of the module to
const jerryx_module_resolver_t **resolvers_p, /**< list of resolvers */
size_t resolver_count) /**< number of resolvers in @p resolvers */
{
void *instances_p = jerry_get_context_data (&jerryx_module_manager);
void *instances_p = jerry_context_data (&jerryx_module_manager);
if (jerry_value_is_undefined (name))
{