static JSInternalPromise* rejectPromise(ExecState* exec, JSGlobalObject* globalObject) { ASSERT(exec->hadException()); JSValue exception = exec->exception()->value(); exec->clearException(); JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::create(exec, globalObject); deferred->reject(exec, exception); return deferred->promise(); }
JSInternalPromise* ModuleLoaderObject::fetch(ExecState* exec, JSValue key) { if (Options::dumpModuleLoadingState()) dataLog("Loader [fetch] ", printableModuleKey(exec, key), "\n"); JSGlobalObject* globalObject = exec->lexicalGlobalObject(); if (globalObject->globalObjectMethodTable()->moduleLoaderFetch) return globalObject->globalObjectMethodTable()->moduleLoaderFetch(globalObject, exec, key); JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::create(exec, globalObject); String moduleKey = key.toString(exec)->value(exec); if (exec->hadException()) { JSValue exception = exec->exception()->value(); exec->clearException(); deferred->reject(exec, exception); return deferred->promise(); } deferred->reject(exec, createError(exec, makeString("Could not open the module '", moduleKey, "'."))); return deferred->promise(); }
static JSInternalPromise* rejectPromise(ExecState* exec, JSGlobalObject* globalObject) { VM& vm = exec->vm(); auto scope = DECLARE_CATCH_SCOPE(vm); ASSERT(scope.exception()); JSValue exception = scope.exception()->value(); scope.clearException(); JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::create(exec, globalObject); deferred->reject(exec, exception); return deferred->promise(); }
JSInternalPromise* JSModuleLoader::fetch(ExecState* exec, JSValue key, JSValue scriptFetcher) { if (Options::dumpModuleLoadingState()) dataLog("Loader [fetch] ", printableModuleKey(exec, key), "\n"); JSGlobalObject* globalObject = exec->lexicalGlobalObject(); VM& vm = globalObject->vm(); auto scope = DECLARE_CATCH_SCOPE(vm); if (globalObject->globalObjectMethodTable()->moduleLoaderFetch) return globalObject->globalObjectMethodTable()->moduleLoaderFetch(globalObject, exec, this, key, scriptFetcher); JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::create(exec, globalObject); String moduleKey = key.toWTFString(exec); if (UNLIKELY(scope.exception())) { JSValue exception = scope.exception()->value(); scope.clearException(); deferred->reject(exec, exception); return deferred->promise(); } deferred->reject(exec, createError(exec, makeString("Could not open the module '", moduleKey, "'."))); return deferred->promise(); }
JSInternalPromise* evaluateModule(ExecState* exec, const SourceCode& source) { JSLockHolder lock(exec); RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); RELEASE_ASSERT(!exec->vm().isCollectorBusy()); JSGlobalObject* globalObject = exec->vmEntryGlobalObject(); // Generate the unique key for the source-provided module. PrivateName privateName(PrivateName::Description, "EntryPointModule"); Symbol* key = Symbol::create(exec->vm(), *privateName.uid()); // Insert the given source code to the ModuleLoader registry as the fetched registry entry. globalObject->moduleLoader()->provide(exec, key, ModuleLoaderObject::Status::Fetch, source.toString()); if (exec->hadException()) { JSValue exception = exec->exception()->value(); exec->clearException(); JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::create(exec, globalObject); deferred->reject(exec, exception); return deferred->promise(); } return evaluateModule(lock, exec, globalObject, key, jsUndefined()); }