CHAKRA_API JsModuleEvaluation( _In_ JsModuleRecord requestModule, _Outptr_result_maybenull_ JsValueRef* result) { if (!Js::SourceTextModuleRecord::Is(requestModule)) { return JsErrorInvalidArgument; } Js::SourceTextModuleRecord* moduleRecord = Js::SourceTextModuleRecord::FromHost(requestModule); if (moduleRecord->WasEvaluated()) { return JsErrorModuleEvaluated; } if (result != nullptr) { *result = JS_INVALID_REFERENCE; } Js::ScriptContext* scriptContext = moduleRecord->GetScriptContext(); JsrtContext* jsrtContext = (JsrtContext*)scriptContext->GetLibrary()->GetJsrtContext(); JsErrorCode errorCode = SetContextAPIWrapper(jsrtContext, [&](Js::ScriptContext *scriptContext) -> JsErrorCode { SmartFPUControl smartFpuControl; if (smartFpuControl.HasErr()) { return JsErrorBadFPUState; } JsValueRef returnRef = moduleRecord->ModuleEvaluation(); if (result != nullptr) { *result = returnRef; } return JsNoError; }); return errorCode; }
CHAKRA_API JsGetModuleHostInfo( _In_ JsModuleRecord requestModule, _In_ JsModuleHostInfoKind moduleHostInfo, _Outptr_result_maybenull_ void** hostInfo) { if (!Js::SourceTextModuleRecord::Is(requestModule) || (hostInfo == nullptr)) { return JsErrorInvalidArgument; } *hostInfo = nullptr; Js::SourceTextModuleRecord* moduleRecord = Js::SourceTextModuleRecord::FromHost(requestModule); Js::ScriptContext* scriptContext = moduleRecord->GetScriptContext(); JsrtContext* jsrtContext = (JsrtContext*)scriptContext->GetLibrary()->GetJsrtContext(); JsErrorCode errorCode = SetContextAPIWrapper(jsrtContext, [&](Js::ScriptContext *scriptContext) -> JsErrorCode { JsrtContextCore* currentContext = static_cast<JsrtContextCore*>(JsrtContextCore::GetCurrent()); switch (moduleHostInfo) { case JsModuleHostInfo_Exception: if (moduleRecord->GetErrorObject() != nullptr) { *hostInfo = moduleRecord->GetErrorObject(); } break; case JsModuleHostInfo_HostDefined: *hostInfo = moduleRecord->GetHostDefined(); break; case JsModuleHostInfo_FetchImportedModuleCallback: *hostInfo = reinterpret_cast<void*>(currentContext->GetHostScriptContext()->GetFetchImportedModuleCallback()); break; case JsModuleHostInfo_FetchImportedModuleFromScriptCallback: *hostInfo = reinterpret_cast<void*>(currentContext->GetHostScriptContext()->GetFetchImportedModuleFromScriptCallback()); break; case JsModuleHostInfo_NotifyModuleReadyCallback: *hostInfo = reinterpret_cast<void*>(currentContext->GetHostScriptContext()->GetNotifyModuleReadyCallback()); break; default: return JsInvalidModuleHostInfoKind; }; return JsNoError; }); return errorCode; }
CHAKRA_API JsSetModuleHostInfo( _In_ JsModuleRecord requestModule, _In_ JsModuleHostInfoKind moduleHostInfo, _In_ void* hostInfo) { if (!Js::SourceTextModuleRecord::Is(requestModule)) { return JsErrorInvalidArgument; } Js::SourceTextModuleRecord* moduleRecord = Js::SourceTextModuleRecord::FromHost(requestModule); Js::ScriptContext* scriptContext = moduleRecord->GetScriptContext(); JsrtContext* jsrtContext = (JsrtContext*)scriptContext->GetLibrary()->GetJsrtContext(); JsErrorCode errorCode = SetContextAPIWrapper(jsrtContext, [&](Js::ScriptContext *scriptContext) -> JsErrorCode { JsrtContextCore* currentContext = static_cast<JsrtContextCore*>(JsrtContextCore::GetCurrent()); switch (moduleHostInfo) { case JsModuleHostInfo_Exception: moduleRecord->OnHostException(hostInfo); break; case JsModuleHostInfo_HostDefined: moduleRecord->SetHostDefined(hostInfo); break; case JsModuleHostInfo_FetchImportedModuleCallback: currentContext->GetHostScriptContext()->SetFetchImportedModuleCallback(reinterpret_cast<FetchImportedModuleCallBack>(hostInfo)); break; case JsModuleHostInfo_FetchImportedModuleFromScriptCallback: currentContext->GetHostScriptContext()->SetFetchImportedModuleFromScriptCallback(reinterpret_cast<FetchImportedModuleFromScriptCallBack>(hostInfo)); break; case JsModuleHostInfo_NotifyModuleReadyCallback: currentContext->GetHostScriptContext()->SetNotifyModuleReadyCallback(reinterpret_cast<NotifyModuleReadyCallback>(hostInfo)); break; default: return JsInvalidModuleHostInfoKind; }; return JsNoError; }); return errorCode; }