mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Update cppcheck (#5108)
Re-enable cppcheck CI job
Update cppcheck suppression list:
The new version of cppcheck raises warnings for many potential
issues that are guarded against, so those warnings have been
supressed.
Handle realloc failures:
- jerry-ext/util/sources.c
- jerry-port/common/jerry-port-io.c
Refactor test-snapshot: move each test to separate functions like some
others already were.
Rename `handler` variables inside `main` of `test-api.c` as they
shadowed the `handler` function in the same file.
JerryScript-DCO-1.0-Signed-off-by: Máté Tokodi mate.tokodi@szteszoftver.hu
This commit is contained in:
parent
ff9ff8f36c
commit
ef4cb2bf74
8
.github/workflows/gh-actions.yml
vendored
8
.github/workflows/gh-actions.yml
vendored
@ -17,8 +17,8 @@ jobs:
|
||||
python-version: '3.10'
|
||||
- run: sudo apt update
|
||||
# TODO: update checkers to current versions available in ubuntu 22.04
|
||||
# - run: sudo apt install clang-format-10 cppcheck python-serial
|
||||
- run: sudo apt install pylint doxygen
|
||||
# - run: sudo apt install clang-format-10 python-serial
|
||||
- run: sudo apt install pylint doxygen cppcheck
|
||||
- run: $RUNNER --check-signed-off=gh-actions
|
||||
if: ${{ always() }}
|
||||
- run: $RUNNER --check-doxygen
|
||||
@ -31,8 +31,8 @@ jobs:
|
||||
# if: ${{ always() }}
|
||||
- run: $RUNNER --check-pylint
|
||||
if: ${{ always() }}
|
||||
# - run: $RUNNER --check-cppcheck
|
||||
# if: ${{ always() }}
|
||||
- run: $RUNNER --check-cppcheck
|
||||
if: ${{ always() }}
|
||||
|
||||
Linux_x86-64_Build_Correctness_Debugger_Tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@ -143,7 +143,7 @@ ecma_errol0_dtoa (double val, /**< ecma number */
|
||||
int32_t *exp_p) /**< [out] exponent */
|
||||
{
|
||||
double power_of_10 = 1.0;
|
||||
int32_t exp = 1;
|
||||
int32_t exponent = 1;
|
||||
|
||||
/* normalize the midpoint */
|
||||
ecma_high_prec_t mid;
|
||||
@ -151,16 +151,16 @@ ecma_errol0_dtoa (double val, /**< ecma number */
|
||||
mid.value = val;
|
||||
mid.offset = 0.0;
|
||||
|
||||
while (((mid.value > 10.0) || ((mid.value == 10.0) && (mid.offset >= 0.0))) && (exp < 308))
|
||||
while (((mid.value > 10.0) || ((mid.value == 10.0) && (mid.offset >= 0.0))) && (exponent < 308))
|
||||
{
|
||||
exp++;
|
||||
exponent++;
|
||||
ecma_divide_high_prec_by_10 (&mid);
|
||||
power_of_10 /= 10.0;
|
||||
}
|
||||
|
||||
while (((mid.value < 1.0) || ((mid.value == 1.0) && (mid.offset < 0.0))) && (exp > -307))
|
||||
while (((mid.value < 1.0) || ((mid.value == 1.0) && (mid.offset < 0.0))) && (exponent > -307))
|
||||
{
|
||||
exp--;
|
||||
exponent--;
|
||||
ecma_multiply_high_prec_by_10 (&mid);
|
||||
power_of_10 *= 10.0;
|
||||
}
|
||||
@ -185,14 +185,14 @@ ecma_errol0_dtoa (double val, /**< ecma number */
|
||||
|
||||
while (high_bound.value > 10.0 || (high_bound.value == 10.0 && (high_bound.offset >= 0.0)))
|
||||
{
|
||||
exp++;
|
||||
exponent++;
|
||||
ecma_divide_high_prec_by_10 (&high_bound);
|
||||
ecma_divide_high_prec_by_10 (&low_bound);
|
||||
}
|
||||
|
||||
while (high_bound.value < 1.0 || (high_bound.value == 1.0 && (high_bound.offset < 0.0)))
|
||||
{
|
||||
exp--;
|
||||
exponent--;
|
||||
ecma_multiply_high_prec_by_10 (&high_bound);
|
||||
ecma_multiply_high_prec_by_10 (&low_bound);
|
||||
}
|
||||
@ -234,7 +234,7 @@ ecma_errol0_dtoa (double val, /**< ecma number */
|
||||
double mdig = (high_bound.value + low_bound.value) / 2.0 + 0.5;
|
||||
*dst_p++ = (lit_utf8_byte_t) ('0' + (uint8_t) mdig);
|
||||
|
||||
*exp_p = exp;
|
||||
*exp_p = exponent;
|
||||
|
||||
return (lit_utf8_size_t) (dst_p - buffer_p);
|
||||
} /* ecma_errol0_dtoa */
|
||||
|
||||
@ -254,10 +254,7 @@ jerryx_escape_handle_internal (jerryx_escapable_handle_scope scope,
|
||||
* Escape handle to parent scope
|
||||
*/
|
||||
*result = jerryx_handle_scope_add_handle_to (found_handle, parent);
|
||||
}
|
||||
|
||||
if (should_promote)
|
||||
{
|
||||
scope->escaped = true;
|
||||
}
|
||||
return jerryx_handle_scope_ok;
|
||||
|
||||
@ -146,6 +146,10 @@ jerryx_source_exec_stdin (void)
|
||||
|
||||
jerry_size_t new_size = source_size + line_size;
|
||||
source_p = realloc (source_p, new_size);
|
||||
if (source_p == NULL)
|
||||
{
|
||||
return jerry_throw_sz (JERRY_ERROR_COMMON, "Out of memory.");
|
||||
}
|
||||
|
||||
memcpy (source_p + source_size, line_p, line_size);
|
||||
jerry_port_line_free (line_p);
|
||||
|
||||
@ -71,6 +71,10 @@ jerry_port_line_read (jerry_size_t *out_size_p)
|
||||
{
|
||||
allocated += 64;
|
||||
line_p = realloc (line_p, allocated);
|
||||
if (line_p == NULL)
|
||||
{
|
||||
jerry_port_fatal (JERRY_FATAL_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
while (bytes < allocated - 1)
|
||||
{
|
||||
|
||||
@ -709,12 +709,12 @@ main (void)
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_PROXY))
|
||||
{
|
||||
jerry_value_t target = jerry_object ();
|
||||
jerry_value_t handler = jerry_object ();
|
||||
jerry_value_t proxy = jerry_proxy (target, handler);
|
||||
jerry_value_t proxy_handler = jerry_object ();
|
||||
jerry_value_t proxy = jerry_proxy (target, proxy_handler);
|
||||
jerry_value_t obj_proto = jerry_eval ((jerry_char_t *) "Object.prototype", 16, JERRY_PARSE_NO_OPTS);
|
||||
|
||||
jerry_value_free (target);
|
||||
jerry_value_free (handler);
|
||||
jerry_value_free (proxy_handler);
|
||||
proto_val = jerry_object_proto (proxy);
|
||||
TEST_ASSERT (!jerry_value_is_exception (proto_val));
|
||||
TEST_ASSERT (proto_val == obj_proto);
|
||||
@ -745,8 +745,8 @@ main (void)
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_PROXY))
|
||||
{
|
||||
jerry_value_t target = jerry_object ();
|
||||
jerry_value_t handler = jerry_object ();
|
||||
jerry_value_t proxy = jerry_proxy (target, handler);
|
||||
jerry_value_t proxy_handler = jerry_object ();
|
||||
jerry_value_t proxy = jerry_proxy (target, proxy_handler);
|
||||
new_proto = jerry_eval ((jerry_char_t *) "Function.prototype", 18, JERRY_PARSE_NO_OPTS);
|
||||
|
||||
res = jerry_object_set_proto (proxy, new_proto);
|
||||
@ -755,7 +755,7 @@ main (void)
|
||||
TEST_ASSERT (target_proto == new_proto);
|
||||
|
||||
jerry_value_free (target);
|
||||
jerry_value_free (handler);
|
||||
jerry_value_free (proxy_handler);
|
||||
jerry_value_free (proxy);
|
||||
jerry_value_free (new_proto);
|
||||
jerry_value_free (target_proto);
|
||||
|
||||
@ -41,10 +41,227 @@ static const jerry_char_t *magic_strings[] = { (const jerry_char_t *) " ",
|
||||
*/
|
||||
static const jerry_length_t magic_string_lengths[] = { 1, 1, 1, 1, 4, 4, 6, 8 };
|
||||
|
||||
static void
|
||||
test_exec_snapshot (uint32_t *snapshot_p, size_t snapshot_size, uint32_t exec_snapshot_flags)
|
||||
{
|
||||
char string_data[32];
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_register_magic_strings (magic_strings,
|
||||
sizeof (magic_string_lengths) / sizeof (jerry_length_t),
|
||||
magic_string_lengths);
|
||||
|
||||
jerry_value_t res = jerry_exec_snapshot (snapshot_p, snapshot_size, 0, exec_snapshot_flags, NULL);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (res));
|
||||
TEST_ASSERT (jerry_value_is_string (res));
|
||||
jerry_size_t sz = jerry_string_size (res, JERRY_ENCODING_CESU8);
|
||||
TEST_ASSERT (sz == 20);
|
||||
sz = jerry_string_to_buffer (res, JERRY_ENCODING_CESU8, (jerry_char_t *) string_data, sz);
|
||||
TEST_ASSERT (sz == 20);
|
||||
jerry_value_free (res);
|
||||
TEST_ASSERT (!strncmp (string_data, "string from snapshot", (size_t) sz));
|
||||
|
||||
jerry_cleanup ();
|
||||
} /* test_exec_snapshot */
|
||||
|
||||
static void
|
||||
test_static_snapshot (void)
|
||||
{
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_SAVE) && jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_EXEC))
|
||||
{
|
||||
static uint32_t snapshot_buffer[SNAPSHOT_BUFFER_SIZE];
|
||||
const jerry_char_t code_to_snapshot[] = TEST_STRING_LITERAL ("function func(a, b, c) {"
|
||||
" c = 'snapshot';"
|
||||
" return arguments[0] + ' ' + b + ' ' + arguments[2];"
|
||||
"};"
|
||||
"func('string', 'from');");
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
jerry_register_magic_strings (magic_strings,
|
||||
sizeof (magic_string_lengths) / sizeof (jerry_length_t),
|
||||
magic_string_lengths);
|
||||
|
||||
jerry_value_t parse_result = jerry_parse (code_to_snapshot, sizeof (code_to_snapshot) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
jerry_value_t generate_result =
|
||||
jerry_generate_snapshot (parse_result, JERRY_SNAPSHOT_SAVE_STATIC, snapshot_buffer, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result) && jerry_value_is_number (generate_result));
|
||||
|
||||
size_t snapshot_size = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
/* Static snapshots are not supported by default. */
|
||||
jerry_value_t exec_result = jerry_exec_snapshot (snapshot_buffer, snapshot_size, 0, 0, NULL);
|
||||
TEST_ASSERT (jerry_value_is_exception (exec_result));
|
||||
jerry_value_free (exec_result);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
test_exec_snapshot (snapshot_buffer, snapshot_size, JERRY_SNAPSHOT_EXEC_ALLOW_STATIC);
|
||||
}
|
||||
} /* test_static_snapshot */
|
||||
|
||||
static void
|
||||
test_merge_snapshot (void)
|
||||
{
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_SAVE) && jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_EXEC))
|
||||
{
|
||||
static uint32_t snapshot_buffer_0[SNAPSHOT_BUFFER_SIZE];
|
||||
static uint32_t snapshot_buffer_1[SNAPSHOT_BUFFER_SIZE];
|
||||
size_t snapshot_sizes[2];
|
||||
static uint32_t merged_snapshot_buffer[SNAPSHOT_BUFFER_SIZE];
|
||||
|
||||
const jerry_char_t code_to_snapshot1[] = "var a = 'hello'; 123";
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_value_t parse_result = jerry_parse (code_to_snapshot1, sizeof (code_to_snapshot1) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
jerry_value_t generate_result = jerry_generate_snapshot (parse_result, 0, snapshot_buffer_0, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result) && jerry_value_is_number (generate_result));
|
||||
|
||||
snapshot_sizes[0] = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
const jerry_char_t code_to_snapshot2[] = "var b = 'hello'; 456";
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
parse_result = jerry_parse (code_to_snapshot2, sizeof (code_to_snapshot2) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
generate_result = jerry_generate_snapshot (parse_result, 0, snapshot_buffer_1, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result) && jerry_value_is_number (generate_result));
|
||||
|
||||
snapshot_sizes[1] = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
const char *error_p;
|
||||
const uint32_t *snapshot_buffers[2];
|
||||
|
||||
snapshot_buffers[0] = snapshot_buffer_0;
|
||||
snapshot_buffers[1] = snapshot_buffer_1;
|
||||
|
||||
static uint32_t snapshot_buffer_0_bck[SNAPSHOT_BUFFER_SIZE];
|
||||
static uint32_t snapshot_buffer_1_bck[SNAPSHOT_BUFFER_SIZE];
|
||||
|
||||
memcpy (snapshot_buffer_0_bck, snapshot_buffer_0, SNAPSHOT_BUFFER_SIZE);
|
||||
memcpy (snapshot_buffer_1_bck, snapshot_buffer_1, SNAPSHOT_BUFFER_SIZE);
|
||||
|
||||
size_t merged_size = jerry_merge_snapshots (snapshot_buffers,
|
||||
snapshot_sizes,
|
||||
2,
|
||||
merged_snapshot_buffer,
|
||||
SNAPSHOT_BUFFER_SIZE,
|
||||
&error_p);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
TEST_ASSERT (0 == memcmp (snapshot_buffer_0_bck, snapshot_buffer_0, SNAPSHOT_BUFFER_SIZE));
|
||||
TEST_ASSERT (0 == memcmp (snapshot_buffer_1_bck, snapshot_buffer_1, SNAPSHOT_BUFFER_SIZE));
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_value_t res = jerry_exec_snapshot (merged_snapshot_buffer, merged_size, 0, 0, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (res));
|
||||
TEST_ASSERT (jerry_value_as_number (res) == 123);
|
||||
jerry_value_free (res);
|
||||
|
||||
res = jerry_exec_snapshot (merged_snapshot_buffer, merged_size, 1, 0, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (res));
|
||||
TEST_ASSERT (jerry_value_as_number (res) == 456);
|
||||
jerry_value_free (res);
|
||||
|
||||
jerry_cleanup ();
|
||||
}
|
||||
} /* test_merge_snapshot */
|
||||
|
||||
static void
|
||||
test_save_literals (void)
|
||||
{
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_SAVE))
|
||||
{
|
||||
/* C format generation */
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
static jerry_char_t literal_buffer_c[LITERAL_BUFFER_SIZE];
|
||||
static uint32_t literal_snapshot_buffer[SNAPSHOT_BUFFER_SIZE];
|
||||
static const jerry_char_t code_for_c_format[] = "var object = { aa:'fo\" o\\n \\\\', Bb:'max', aaa:'xzy0' };";
|
||||
|
||||
jerry_value_t parse_result = jerry_parse (code_for_c_format, sizeof (code_for_c_format) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
jerry_value_t generate_result =
|
||||
jerry_generate_snapshot (parse_result, 0, literal_snapshot_buffer, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result));
|
||||
TEST_ASSERT (jerry_value_is_number (generate_result));
|
||||
|
||||
size_t snapshot_size = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
const size_t lit_c_buf_sz = jerry_get_literals_from_snapshot (literal_snapshot_buffer,
|
||||
snapshot_size,
|
||||
literal_buffer_c,
|
||||
LITERAL_BUFFER_SIZE,
|
||||
true);
|
||||
TEST_ASSERT (lit_c_buf_sz == 239);
|
||||
|
||||
static const char *expected_c_format = ("jerry_length_t literal_count = 5;\n\n"
|
||||
"jerry_char_t *literals[5] =\n"
|
||||
"{\n"
|
||||
" \"Bb\",\n"
|
||||
" \"aa\",\n"
|
||||
" \"aaa\",\n"
|
||||
" \"xzy0\",\n"
|
||||
" \"fo\\\" o\\x0A \\\\\"\n"
|
||||
"};\n\n"
|
||||
"jerry_length_t literal_sizes[5] =\n"
|
||||
"{\n"
|
||||
" 2 /* Bb */,\n"
|
||||
" 2 /* aa */,\n"
|
||||
" 3 /* aaa */,\n"
|
||||
" 4 /* xzy0 */,\n"
|
||||
" 8 /* fo\" o\n \\ */\n"
|
||||
"};\n");
|
||||
|
||||
TEST_ASSERT (!strncmp ((char *) literal_buffer_c, expected_c_format, lit_c_buf_sz));
|
||||
|
||||
/* List format generation */
|
||||
static jerry_char_t literal_buffer_list[LITERAL_BUFFER_SIZE];
|
||||
const size_t lit_list_buf_sz = jerry_get_literals_from_snapshot (literal_snapshot_buffer,
|
||||
snapshot_size,
|
||||
literal_buffer_list,
|
||||
LITERAL_BUFFER_SIZE,
|
||||
false);
|
||||
TEST_ASSERT (lit_list_buf_sz == 34);
|
||||
TEST_ASSERT (
|
||||
!strncmp ((char *) literal_buffer_list, "2 Bb\n2 aa\n3 aaa\n4 xzy0\n8 fo\" o\n \\\n", lit_list_buf_sz));
|
||||
|
||||
jerry_cleanup ();
|
||||
}
|
||||
} /* test_save_literals */
|
||||
|
||||
static void
|
||||
test_function_snapshot (void)
|
||||
{
|
||||
/* function to snapshot */
|
||||
if (!jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_SAVE) || !jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_EXEC))
|
||||
{
|
||||
return;
|
||||
@ -156,31 +373,6 @@ test_function_arguments_snapshot (void)
|
||||
}
|
||||
} /* test_function_arguments_snapshot */
|
||||
|
||||
static void
|
||||
test_exec_snapshot (uint32_t *snapshot_p, size_t snapshot_size, uint32_t exec_snapshot_flags)
|
||||
{
|
||||
char string_data[32];
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_register_magic_strings (magic_strings,
|
||||
sizeof (magic_string_lengths) / sizeof (jerry_length_t),
|
||||
magic_string_lengths);
|
||||
|
||||
jerry_value_t res = jerry_exec_snapshot (snapshot_p, snapshot_size, 0, exec_snapshot_flags, NULL);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (res));
|
||||
TEST_ASSERT (jerry_value_is_string (res));
|
||||
jerry_size_t sz = jerry_string_size (res, JERRY_ENCODING_CESU8);
|
||||
TEST_ASSERT (sz == 20);
|
||||
sz = jerry_string_to_buffer (res, JERRY_ENCODING_CESU8, (jerry_char_t *) string_data, sz);
|
||||
TEST_ASSERT (sz == 20);
|
||||
jerry_value_free (res);
|
||||
TEST_ASSERT (!strncmp (string_data, "string from snapshot", (size_t) sz));
|
||||
|
||||
jerry_cleanup ();
|
||||
} /* test_exec_snapshot */
|
||||
|
||||
static void
|
||||
test_snapshot_with_user (void)
|
||||
{
|
||||
@ -249,189 +441,11 @@ main (void)
|
||||
{
|
||||
TEST_INIT ();
|
||||
|
||||
/* Static snapshot */
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_SAVE) && jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_EXEC))
|
||||
{
|
||||
static uint32_t snapshot_buffer[SNAPSHOT_BUFFER_SIZE];
|
||||
const jerry_char_t code_to_snapshot[] = TEST_STRING_LITERAL ("function func(a, b, c) {"
|
||||
" c = 'snapshot';"
|
||||
" return arguments[0] + ' ' + b + ' ' + arguments[2];"
|
||||
"};"
|
||||
"func('string', 'from');");
|
||||
test_static_snapshot ();
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
jerry_register_magic_strings (magic_strings,
|
||||
sizeof (magic_string_lengths) / sizeof (jerry_length_t),
|
||||
magic_string_lengths);
|
||||
test_merge_snapshot ();
|
||||
|
||||
jerry_value_t parse_result = jerry_parse (code_to_snapshot, sizeof (code_to_snapshot) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
jerry_value_t generate_result =
|
||||
jerry_generate_snapshot (parse_result, JERRY_SNAPSHOT_SAVE_STATIC, snapshot_buffer, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result) && jerry_value_is_number (generate_result));
|
||||
|
||||
size_t snapshot_size = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
/* Static snapshots are not supported by default. */
|
||||
jerry_value_t exec_result = jerry_exec_snapshot (snapshot_buffer, snapshot_size, 0, 0, NULL);
|
||||
TEST_ASSERT (jerry_value_is_exception (exec_result));
|
||||
jerry_value_free (exec_result);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
test_exec_snapshot (snapshot_buffer, snapshot_size, JERRY_SNAPSHOT_EXEC_ALLOW_STATIC);
|
||||
}
|
||||
|
||||
/* Merge snapshot */
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_SAVE) && jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_EXEC))
|
||||
{
|
||||
static uint32_t snapshot_buffer_0[SNAPSHOT_BUFFER_SIZE];
|
||||
static uint32_t snapshot_buffer_1[SNAPSHOT_BUFFER_SIZE];
|
||||
size_t snapshot_sizes[2];
|
||||
static uint32_t merged_snapshot_buffer[SNAPSHOT_BUFFER_SIZE];
|
||||
|
||||
const jerry_char_t code_to_snapshot1[] = "var a = 'hello'; 123";
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_value_t parse_result = jerry_parse (code_to_snapshot1, sizeof (code_to_snapshot1) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
jerry_value_t generate_result = jerry_generate_snapshot (parse_result, 0, snapshot_buffer_0, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result) && jerry_value_is_number (generate_result));
|
||||
|
||||
snapshot_sizes[0] = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
const jerry_char_t code_to_snapshot2[] = "var b = 'hello'; 456";
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
parse_result = jerry_parse (code_to_snapshot2, sizeof (code_to_snapshot2) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
generate_result = jerry_generate_snapshot (parse_result, 0, snapshot_buffer_1, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result) && jerry_value_is_number (generate_result));
|
||||
|
||||
snapshot_sizes[1] = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
const char *error_p;
|
||||
const uint32_t *snapshot_buffers[2];
|
||||
|
||||
snapshot_buffers[0] = snapshot_buffer_0;
|
||||
snapshot_buffers[1] = snapshot_buffer_1;
|
||||
|
||||
static uint32_t snapshot_buffer_0_bck[SNAPSHOT_BUFFER_SIZE];
|
||||
static uint32_t snapshot_buffer_1_bck[SNAPSHOT_BUFFER_SIZE];
|
||||
|
||||
memcpy (snapshot_buffer_0_bck, snapshot_buffer_0, SNAPSHOT_BUFFER_SIZE);
|
||||
memcpy (snapshot_buffer_1_bck, snapshot_buffer_1, SNAPSHOT_BUFFER_SIZE);
|
||||
|
||||
size_t merged_size = jerry_merge_snapshots (snapshot_buffers,
|
||||
snapshot_sizes,
|
||||
2,
|
||||
merged_snapshot_buffer,
|
||||
SNAPSHOT_BUFFER_SIZE,
|
||||
&error_p);
|
||||
|
||||
jerry_cleanup ();
|
||||
|
||||
TEST_ASSERT (0 == memcmp (snapshot_buffer_0_bck, snapshot_buffer_0, SNAPSHOT_BUFFER_SIZE));
|
||||
TEST_ASSERT (0 == memcmp (snapshot_buffer_1_bck, snapshot_buffer_1, SNAPSHOT_BUFFER_SIZE));
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_value_t res = jerry_exec_snapshot (merged_snapshot_buffer, merged_size, 0, 0, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (res));
|
||||
TEST_ASSERT (jerry_value_as_number (res) == 123);
|
||||
jerry_value_free (res);
|
||||
|
||||
res = jerry_exec_snapshot (merged_snapshot_buffer, merged_size, 1, 0, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (res));
|
||||
TEST_ASSERT (jerry_value_as_number (res) == 456);
|
||||
jerry_value_free (res);
|
||||
|
||||
jerry_cleanup ();
|
||||
}
|
||||
|
||||
/* Save literals */
|
||||
if (jerry_feature_enabled (JERRY_FEATURE_SNAPSHOT_SAVE))
|
||||
{
|
||||
/* C format generation */
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
static jerry_char_t literal_buffer_c[LITERAL_BUFFER_SIZE];
|
||||
static uint32_t literal_snapshot_buffer[SNAPSHOT_BUFFER_SIZE];
|
||||
static const jerry_char_t code_for_c_format[] = "var object = { aa:'fo\" o\\n \\\\', Bb:'max', aaa:'xzy0' };";
|
||||
|
||||
jerry_value_t parse_result = jerry_parse (code_for_c_format, sizeof (code_for_c_format) - 1, NULL);
|
||||
TEST_ASSERT (!jerry_value_is_exception (parse_result));
|
||||
|
||||
jerry_value_t generate_result =
|
||||
jerry_generate_snapshot (parse_result, 0, literal_snapshot_buffer, SNAPSHOT_BUFFER_SIZE);
|
||||
jerry_value_free (parse_result);
|
||||
|
||||
TEST_ASSERT (!jerry_value_is_exception (generate_result));
|
||||
TEST_ASSERT (jerry_value_is_number (generate_result));
|
||||
|
||||
size_t snapshot_size = (size_t) jerry_value_as_number (generate_result);
|
||||
jerry_value_free (generate_result);
|
||||
|
||||
const size_t lit_c_buf_sz = jerry_get_literals_from_snapshot (literal_snapshot_buffer,
|
||||
snapshot_size,
|
||||
literal_buffer_c,
|
||||
LITERAL_BUFFER_SIZE,
|
||||
true);
|
||||
TEST_ASSERT (lit_c_buf_sz == 239);
|
||||
|
||||
static const char *expected_c_format = ("jerry_length_t literal_count = 5;\n\n"
|
||||
"jerry_char_t *literals[5] =\n"
|
||||
"{\n"
|
||||
" \"Bb\",\n"
|
||||
" \"aa\",\n"
|
||||
" \"aaa\",\n"
|
||||
" \"xzy0\",\n"
|
||||
" \"fo\\\" o\\x0A \\\\\"\n"
|
||||
"};\n\n"
|
||||
"jerry_length_t literal_sizes[5] =\n"
|
||||
"{\n"
|
||||
" 2 /* Bb */,\n"
|
||||
" 2 /* aa */,\n"
|
||||
" 3 /* aaa */,\n"
|
||||
" 4 /* xzy0 */,\n"
|
||||
" 8 /* fo\" o\n \\ */\n"
|
||||
"};\n");
|
||||
|
||||
TEST_ASSERT (!strncmp ((char *) literal_buffer_c, expected_c_format, lit_c_buf_sz));
|
||||
|
||||
/* List format generation */
|
||||
static jerry_char_t literal_buffer_list[LITERAL_BUFFER_SIZE];
|
||||
const size_t lit_list_buf_sz = jerry_get_literals_from_snapshot (literal_snapshot_buffer,
|
||||
snapshot_size,
|
||||
literal_buffer_list,
|
||||
LITERAL_BUFFER_SIZE,
|
||||
false);
|
||||
TEST_ASSERT (lit_list_buf_sz == 34);
|
||||
TEST_ASSERT (
|
||||
!strncmp ((char *) literal_buffer_list, "2 Bb\n2 aa\n3 aaa\n4 xzy0\n8 fo\" o\n \\\n", lit_list_buf_sz));
|
||||
|
||||
jerry_cleanup ();
|
||||
}
|
||||
test_save_literals ();
|
||||
|
||||
test_function_snapshot ();
|
||||
|
||||
|
||||
@ -110,11 +110,11 @@ main (void)
|
||||
TEST_ASSERT (num == ecma_number_make_infinity (false));
|
||||
|
||||
/* 5 */
|
||||
ecma_value_t floor = ecma_make_number_value (3.001f);
|
||||
ecma_value_t floor_val = ecma_make_number_value (3.001f);
|
||||
|
||||
result = ecma_op_to_integer (floor, &num);
|
||||
result = ecma_op_to_integer (floor_val, &num);
|
||||
|
||||
ecma_free_value (floor);
|
||||
ecma_free_value (floor_val);
|
||||
|
||||
TEST_ASSERT (!ECMA_IS_VALUE_ERROR (result));
|
||||
TEST_ASSERT (num == 3);
|
||||
|
||||
@ -1,5 +1,44 @@
|
||||
wrongmathcall:tests/unit-math/test-math.inc.h
|
||||
variableScope:jerry-math/*.c
|
||||
invalidPointerCast:jerry-math/*.c
|
||||
|
||||
ConfigurationNotChecked:jerry-core/*.inc.h
|
||||
arrayIndexOutOfBoundsCond:jerry-core/*.c
|
||||
autoVariables:jerry-core/*.c
|
||||
constParameter:jerry-core/*.c
|
||||
constParameter:jerry-ext/*.c
|
||||
constParameter:jerry-math/*.c
|
||||
constParameter:tests/unit-core/*.c
|
||||
duplicateValueTernary:jerry-core/*.c
|
||||
incorrectStringBooleanError:tests/unit-core/test-newtarget.c
|
||||
integerOverflowCond:jerry-math/*.c
|
||||
invalidFunctionArg:tests/unit-math/test-math.inc.h
|
||||
invalidPointerCast:jerry-math/*.c
|
||||
knownConditionTrueFalse:jerry-core/*.c
|
||||
knownConditionTrueFalse:jerry-math/*.c
|
||||
negativeIndex:jerry-core/*.c
|
||||
nullPointerArithmetic:jerry-core/parser/js/js-parser-line-info-create.c:572
|
||||
nullPointerArithmetic:jerry-core/parser/js/js-scanner-util.c:2345
|
||||
nullPointerArithmeticRedundantCheck:jerry-core/*.c
|
||||
nullPointerRedundantCheck:jerry-core/*.c
|
||||
nullPointerRedundantCheck:jerry-ext/*.c
|
||||
nullPointerRedundantCheck:jerry-main/*.c
|
||||
nullPointerRedundantCheck:tests/unit-core/*.c
|
||||
oppositeInnerCondition:jerry-core/*.c
|
||||
redundantAssignment:jerry-core/*.c
|
||||
redundantAssignment:tests/unit-core/test-container-operation.c:129
|
||||
redundantInitialization:jerry-core/*.c
|
||||
redundantInitialization:tests/unit-core/test-from-property-descriptor.c:42
|
||||
shiftNegative:jerry-core/*.c
|
||||
shiftNegative:jerry-math/*.c
|
||||
shiftNegativeLHS:jerry-math/*.c
|
||||
shiftTooManyBits:jerry-core/*.c
|
||||
shiftTooManyBitsSigned:jerry-math/*.c
|
||||
signConversionCond:jerry-core/*.c
|
||||
uninitvar:jerry-core/parser/js/js-parser-expr.c:3420
|
||||
uninitvar:tests/unit-core/test-api-objecttype.c:119
|
||||
unmatchedSuppression:jerry-core/*.inc.h
|
||||
unreadVariable:jerry-core/*.c
|
||||
unreadVariable:jerry-port/*.c
|
||||
unusedStructMember:jerry-ext/arg/arg-transform-functions.c
|
||||
unusedStructMember:jerry-main/*.c
|
||||
unusedStructMember:tests/unit-core/*.c
|
||||
variableScope:jerry-math/*.c
|
||||
wrongmathcall:tests/unit-math/test-math.inc.h
|
||||
zerodivcond:jerry-core/*.c
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user