1425bb815Sopenharmony_ci/* Copyright JS Foundation and other contributors, http://js.foundation
2425bb815Sopenharmony_ci *
3425bb815Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4425bb815Sopenharmony_ci * you may not use this file except in compliance with the License.
5425bb815Sopenharmony_ci * You may obtain a copy of the License at
6425bb815Sopenharmony_ci *
7425bb815Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8425bb815Sopenharmony_ci *
9425bb815Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10425bb815Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS
11425bb815Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12425bb815Sopenharmony_ci * See the License for the specific language governing permissions and
13425bb815Sopenharmony_ci * limitations under the License.
14425bb815Sopenharmony_ci */
15425bb815Sopenharmony_ci
16425bb815Sopenharmony_ci#ifndef ECMA_JOB_QUEUE_H
17425bb815Sopenharmony_ci#define ECMA_JOB_QUEUE_H
18425bb815Sopenharmony_ci
19425bb815Sopenharmony_ci#if ENABLED (JERRY_ES2015_BUILTIN_PROMISE)
20425bb815Sopenharmony_ci
21425bb815Sopenharmony_ci/** \addtogroup ecma ECMA
22425bb815Sopenharmony_ci * @{
23425bb815Sopenharmony_ci *
24425bb815Sopenharmony_ci * \addtogroup ecmajobqueue ECMA Job Queue related routines
25425bb815Sopenharmony_ci * @{
26425bb815Sopenharmony_ci */
27425bb815Sopenharmony_ci
28425bb815Sopenharmony_ci/**
29425bb815Sopenharmony_ci * Job queue item types.
30425bb815Sopenharmony_ci */
31425bb815Sopenharmony_citypedef enum
32425bb815Sopenharmony_ci{
33425bb815Sopenharmony_ci  ECMA_JOB_PROMISE_REACTION, /**< promise reaction job */
34425bb815Sopenharmony_ci  ECMA_JOB_PROMISE_THENABLE, /**< promise thenable job */
35425bb815Sopenharmony_ci} ecma_job_queue_item_type_t;
36425bb815Sopenharmony_ci
37425bb815Sopenharmony_ci/**
38425bb815Sopenharmony_ci * Description of the job queue item.
39425bb815Sopenharmony_ci */
40425bb815Sopenharmony_citypedef struct
41425bb815Sopenharmony_ci{
42425bb815Sopenharmony_ci  uintptr_t next_and_type; /**< next and type members of a queue item */
43425bb815Sopenharmony_ci} ecma_job_queue_item_t;
44425bb815Sopenharmony_ci
45425bb815Sopenharmony_civoid ecma_job_queue_init (void);
46425bb815Sopenharmony_ci
47425bb815Sopenharmony_civoid ecma_enqueue_promise_reaction_job (ecma_value_t capability, ecma_value_t handler, ecma_value_t argument);
48425bb815Sopenharmony_civoid ecma_enqueue_promise_resolve_thenable_job (ecma_value_t promise, ecma_value_t thenable, ecma_value_t then);
49425bb815Sopenharmony_civoid ecma_free_all_enqueued_jobs (void);
50425bb815Sopenharmony_ci
51425bb815Sopenharmony_ciecma_value_t ecma_process_all_enqueued_jobs (void);
52425bb815Sopenharmony_ci
53425bb815Sopenharmony_ci/**
54425bb815Sopenharmony_ci * @}
55425bb815Sopenharmony_ci * @}
56425bb815Sopenharmony_ci */
57425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_ES2015_BUILTIN_PROMISE) */
58425bb815Sopenharmony_ci#endif /* !ECMA_JOB_QUEUE_H */
59