Implement other routines of Promise (#1729)

Add Promise.resolve, Promise.reject, Promise.race, Promise.all and
Promise.prototype.catch

Also it fixes the issue 1763

JerryScript-DCO-1.0-Signed-off-by: Zidong Jiang zidong.jiang@intel.com
This commit is contained in:
Zidong Jiang
2017-04-26 19:47:51 +08:00
committed by GitHub
parent 9d4123c3c4
commit 078f6e101d
20 changed files with 1044 additions and 138 deletions
@@ -58,6 +58,23 @@ typedef struct
ecma_collection_header_t *reject_reactions; /**< list of PromiseRejectReactions */
} ecma_promise_object_t;
/**
* Use symbolic constant to represent the internal property name of
* promise related structures.
*/
typedef enum
{
ECMA_PROMISE_PROPERTY_PROMISE, /**< [[Promise]] property */
ECMA_PROMISE_PROPERTY_RESOLVE, /**< [[Resolve]] property */
ECMA_PROMISE_PROPERTY_REJECT, /**< [[Reject]] property */
ECMA_PROMISE_PROPERTY_CAPABILITY, /**< [[Capability]] property */
ECMA_PROMISE_PROPERTY_HANDLER, /**< [[Handler]] property */
ECMA_PROMISE_PROPERTY_ALREADY_CALLED, /**< [[AlreadyCalled]] property */
ECMA_PROMISE_PROPERTY_INDEX, /**< [[Index]] property */
ECMA_PROMISE_PROPERTY_VALUE, /**< [[Values]] property */
ECMA_PROMISE_PROPERTY_REMAINING_ELEMENT /**< [[RemainingElement]] property */
} ecma_promise_property_symbolic_constant_t;
bool ecma_is_promise (ecma_object_t *obj_p);
ecma_value_t ecma_promise_get_result (ecma_object_t *obj_p);
void ecma_promise_set_result (ecma_object_t *obj_p, ecma_value_t result);
@@ -72,8 +89,8 @@ ecma_value_t ecma_promise_new_capability (void);
ecma_value_t
ecma_promise_then (ecma_value_t promise,
ecma_value_t on_fulfilled,
ecma_value_t on_rejected,
ecma_value_t result_capability);
ecma_value_t on_rejected);
/**
* @}
* @}