void __cdecl JavascriptExternalFunction::DeferredInitializer(DynamicObject* instance, DeferredTypeHandlerBase* typeHandler, DeferredInitializeMode mode) { JavascriptExternalFunction* object = static_cast<JavascriptExternalFunction*>(instance); HRESULT hr = E_FAIL; ScriptContext* scriptContext = object->GetScriptContext(); AnalysisAssert(scriptContext); // Don't call the implicit call if disable implicit call if (scriptContext->GetThreadContext()->IsDisableImplicitCall()) { scriptContext->GetThreadContext()->AddImplicitCallFlags(ImplicitCall_External); //we will return if we get call further into implicitcalls. return; } if (scriptContext->IsClosed() || scriptContext->IsInvalidatedForHostObjects()) { Js::JavascriptError::MapAndThrowError(scriptContext, E_ACCESSDENIED); } ThreadContext* threadContext = scriptContext->GetThreadContext(); typeHandler->Convert(instance, mode, object->typeSlots, object->hasAccessors); BEGIN_LEAVE_SCRIPT_INTERNAL(scriptContext) { ASYNC_HOST_OPERATION_START(threadContext); hr = object->initMethod(instance); ASYNC_HOST_OPERATION_END(threadContext); } END_LEAVE_SCRIPT_INTERNAL(scriptContext); if (FAILED(hr)) { Js::JavascriptError::MapAndThrowError(scriptContext, hr); } JavascriptString * functionName = nullptr; if (scriptContext->GetConfig()->IsES6FunctionNameEnabled() && object->GetFunctionName(&functionName)) { object->SetPropertyWithAttributes(PropertyIds::name, functionName, PropertyConfigurable, nullptr); } }