private JsValue EvaluateModuleInternal(string code, string path, out JsValue moduleNamespace) { JsModuleRecord invalidModule = JsModuleRecord.Invalid; string modulePath = path; string moduleFullPath = GetModuleFullPath(invalidModule, modulePath); JsValue result; lock (_evaluationSynchronizer) { JsModuleRecord module = JsModuleRecord.Create(invalidModule, modulePath, moduleFullPath); module.SetFetchImportedModuleCallback(_fetchImportedModuleCallback); module.SetNotifyModuleReadyCallback(_notifyModuleReadyCallback); ModuleJob job = new ModuleJob { Module = module, Script = code, SourceUrl = moduleFullPath, IsParsed = false }; _moduleJobQueue.Enqueue(job); try { result = EvaluateModulesTree(out moduleNamespace); JsValue exception = module.Exception; if (exception.IsValid) { JsValue metadata = JsValue.Invalid; if (!JsContext.HasException) { JsErrorHelpers.SetException(exception); } metadata = JsContext.GetAndClearExceptionWithMetadata(); throw JsErrorHelpers.CreateScriptExceptionFromMetadata(metadata); } } finally { _moduleJobQueue.Clear(); module.Release(); } } return(result); }