Update jerry_run_all_enqueued_jobs() function and documentation (#4283)

Make sure it always returns an error or an undefined value.

JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu
This commit is contained in:
Daniel Balla
2020-10-10 09:03:52 +02:00
committed by GitHub
parent e3481d431b
commit 596964ae0d
2 changed files with 32 additions and 3 deletions
+24 -1
View File
@@ -1364,6 +1364,9 @@ jerry_eval (const jerry_char_t *source_p,
Run enqueued Promise jobs until the first thrown error or until all get executed.
*Important Note*: The job queue is not guaranteed to be empty, after the function call has returned a value.
Therefore, this function is best used in a while loop, handling each error it returns, until the job queue is empty.
*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
is no longer needed.
@@ -1394,7 +1397,27 @@ main (void)
jerry_value_t parsed_code = jerry_parse (NULL, 0, script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS);
jerry_value_t script_value = jerry_run (parsed_code);
jerry_value_t job_value = jerry_run_all_enqueued_jobs ();
jerry_value_t job_value;
while (true)
{
job_value = jerry_run_all_enqueued_jobs ();
if (jerry_value_is_error (job_value))
{
if (jerry_value_is_abort (job_value))
{
// Terminate the engine
}
// Handle the error here
}
else
{
// The queue should be empty now
break;
}
}
jerry_release_value (job_value);
jerry_release_value (script_value);
+8 -2
View File
@@ -498,7 +498,7 @@ ecma_process_all_enqueued_jobs (void)
{
ecma_value_t ret = ECMA_VALUE_UNDEFINED;
while (JERRY_CONTEXT (job_queue_head_p) != NULL && !ECMA_IS_VALUE_ERROR (ret))
while (JERRY_CONTEXT (job_queue_head_p) != NULL)
{
ecma_job_queue_item_t *job_p = JERRY_CONTEXT (job_queue_head_p);
JERRY_CONTEXT (job_queue_head_p) = ecma_job_queue_get_next (job_p);
@@ -531,9 +531,15 @@ ecma_process_all_enqueued_jobs (void)
break;
}
}
if (ECMA_IS_VALUE_ERROR (ret))
{
return ret;
}
}
return ret;
ecma_free_value (ret);
return ECMA_VALUE_UNDEFINED;
} /* ecma_process_all_enqueued_jobs */
/**