Skip to content

Commit

Permalink
Added JsCreatePromise and JsCreateThenPromise to JsRT
Browse files Browse the repository at this point in the history
  • Loading branch information
kfarnung committed Feb 16, 2017
1 parent 4a02bc8 commit c1810a5
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 0 deletions.
13 changes: 13 additions & 0 deletions lib/Jsrt/ChakraCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -2378,6 +2378,19 @@ typedef unsigned short uint16_t;
_In_ JsPromiseContinuationCallback promiseContinuationCallback,
_In_opt_ void *callbackState);

CHAKRA_API
JsCreatePromise(
_Out_ JsValueRef *promise,
_Out_ JsValueRef *resolve,
_Out_ JsValueRef *reject);

CHAKRA_API
JsCreateThenPromise(
_In_ JsValueRef sourcePromise,
_In_ JsValueRef fulfillmentHandler,
_In_ JsValueRef rejectionHandler,
_Out_ JsValueRef *thenPromise);

#ifdef _WIN32
#include "ChakraCommonWindows.h"
#endif // _WIN32
Expand Down
58 changes: 58 additions & 0 deletions lib/Jsrt/Jsrt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "Common/ByteSwap.h"
#include "Library/DataView.h"
#include "Library/JavascriptSymbol.h"
#include "Library/JavascriptPromise.h"
#include "Base/ThreadContextTlsEntry.h"
#include "Codex/Utf8Helper.h"

Expand Down Expand Up @@ -4508,4 +4509,61 @@ CHAKRA_API JsRunSerialized(
sourceContext, // use the same user provided sourceContext as scriptLoadSourceContext
buffer, bufferVal, sourceContext, url, false, result);
}

CHAKRA_API JsCreatePromise(_Out_ JsValueRef *promise, _Out_ JsValueRef *resolve, _Out_ JsValueRef *reject)
{
return ContextAPIWrapper<true>([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode {
PARAM_NOT_NULL(promise);
PARAM_NOT_NULL(resolve);
PARAM_NOT_NULL(reject);
*promise = nullptr;
*resolve = nullptr;
*reject = nullptr;

Js::JavascriptPromiseResolveOrRejectFunction *jsResolve;
Js::JavascriptPromiseResolveOrRejectFunction *jsReject;
Js::JavascriptPromise *jsPromise = scriptContext->GetLibrary()->CreatePromise();
Js::JavascriptPromise::InitializePromise(jsPromise, &jsResolve, &jsReject, scriptContext);

*promise = (JsValueRef)jsPromise;
*resolve = (JsValueRef)jsResolve;
*reject = (JsValueRef)jsReject;

return JsNoError;
});
}

CHAKRA_API JsCreateThenPromise(_In_ JsValueRef sourcePromise, _In_ JsValueRef fulfillmentHandler, _In_ JsValueRef rejectionHandler, _Out_ JsValueRef *thenPromise)
{
return ContextAPIWrapper<true>([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode {
PARAM_NOT_NULL(sourcePromise);
PARAM_NOT_NULL(fulfillmentHandler);
PARAM_NOT_NULL(rejectionHandler);
PARAM_NOT_NULL(thenPromise);
*thenPromise = nullptr;

if (!Js::JavascriptPromise::Is(sourcePromise))
{
return JsErrorInvalidArgument;
}

if (!Js::JavascriptFunction::Is(fulfillmentHandler))
{
return JsErrorInvalidArgument;
}

if (!Js::JavascriptFunction::Is(rejectionHandler))
{
return JsErrorInvalidArgument;
}

Js::JavascriptPromise* jsPromise = Js::JavascriptPromise::FromVar(sourcePromise);
Js::RecyclableObject* jsFulfillment = Js::RecyclableObject::FromVar(fulfillmentHandler);
Js::RecyclableObject* jsRejection = Js::RecyclableObject::FromVar(rejectionHandler);

*thenPromise = Js::JavascriptPromise::CreateThenPromise(jsPromise, jsFulfillment, jsRejection, scriptContext);

return JsNoError;
});
}
#endif // CHAKRACOREBUILD_
2 changes: 2 additions & 0 deletions lib/Jsrt/JsrtCommonExports.inc
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@
JsGetRuntime
JsIdle
JsSetPromiseContinuationCallback
JsCreatePromise
JsCreateThenPromise
#ifndef NTBUILD
JsCreateString
JsCreateStringUtf16
Expand Down

0 comments on commit c1810a5

Please sign in to comment.