typedef struct njs_vm_shared_s njs_vm_shared_t;
typedef struct njs_object_init_s njs_object_init_t;
typedef struct njs_object_prop_s njs_object_prop_t;
+typedef struct njs_promise_data_s njs_promise_data_t;
typedef struct njs_object_prop_init_s njs_object_prop_init_t;
typedef struct njs_object_type_init_s njs_object_type_init_t;
typedef struct njs_external_s njs_external_t;
} njs_wellknown_symbol_t;
+typedef enum {
+ NJS_PROMISE_PENDING = 0,
+ NJS_PROMISE_FULFILL,
+ NJS_PROMISE_REJECTED
+} njs_promise_type_t;
+
+
typedef enum {
#define njs_object_enum_kind(flags) (flags & 7)
NJS_ENUM_KEYS = 1,
NJS_EXPORT njs_int_t njs_value_is_function(const njs_value_t *value);
NJS_EXPORT njs_int_t njs_value_is_buffer(const njs_value_t *value);
NJS_EXPORT njs_int_t njs_value_is_data_view(const njs_value_t *value);
+NJS_EXPORT njs_int_t njs_value_is_promise(const njs_value_t *value);
+NJS_EXPORT njs_promise_type_t njs_promise_state(const njs_value_t *value);
+NJS_EXPORT njs_value_t *njs_promise_result(const njs_value_t *value);
NJS_EXPORT njs_int_t njs_vm_object_alloc(njs_vm_t *vm, njs_value_t *retval,
...);
}
+njs_promise_type_t
+njs_promise_state(const njs_value_t *value)
+{
+ njs_promise_data_t *promise_data;
+
+ promise_data = njs_data(&njs_promise(value)->value);
+
+ return promise_data->state;
+}
+
+
+njs_value_t *
+njs_promise_result(const njs_value_t *value)
+{
+ njs_promise_data_t *promise_data;
+
+ promise_data = njs_data(&njs_promise(value)->value);
+
+ return &promise_data->result;
+}
+
+
static njs_int_t
njs_promise_prototype_catch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
njs_index_t unused, njs_value_t *retval)
#define _NJS_PROMISE_H_INCLUDED_
-typedef enum {
- NJS_PROMISE_PENDING = 0,
- NJS_PROMISE_FULFILL,
- NJS_PROMISE_REJECTED
-} njs_promise_type_t;
-
typedef struct {
njs_value_t promise;
njs_value_t resolve;
njs_value_t reject;
} njs_promise_capability_t;
-typedef struct {
+
+struct njs_promise_data_s {
njs_promise_type_t state;
njs_value_t result;
njs_queue_t fulfill_queue;
njs_queue_t reject_queue;
njs_bool_t is_handled;
-} njs_promise_data_t;
+};
njs_int_t njs_promise_constructor(njs_vm_t *vm, njs_value_t *args,
}
+njs_int_t
+njs_value_is_promise(const njs_value_t *value)
+{
+ return njs_is_promise(value);
+}
+
+
/*
* ES5.1, 8.12.1: [[GetOwnProperty]], [[GetProperty]].
* The njs_property_query() returns values