diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index 6daeb75ad5d..d1c951b270f 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -247,6 +247,14 @@ SlangResult LanguageServerCore::didOpenTextDocument(const DidOpenTextDocumentPar { String canonicalPath = uriToCanonicalPath(args.textDocument.uri); m_workspace->openDoc(canonicalPath, args.textDocument.text); + + auto version = m_workspace->getCurrentVersion(); + Module* parsedModule = version->getOrLoadModule(canonicalPath); + if (!parsedModule) + { + return SLANG_FAIL; + } + return SLANG_OK; } @@ -2605,6 +2613,14 @@ SlangResult LanguageServerCore::didChangeTextDocument(const DidChangeTextDocumen String canonicalPath = uriToCanonicalPath(args.textDocument.uri); for (auto change : args.contentChanges) m_workspace->changeDoc(canonicalPath, change.range, change.text); + + auto version = m_workspace->getCurrentVersion(); + Module* parsedModule = version->getOrLoadModule(canonicalPath); + if (!parsedModule) + { + return SLANG_FAIL; + } + return SLANG_OK; } diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index f2f28e3e3f5..8b31b3c1d5b 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -4161,8 +4161,18 @@ void Linkage::loadParsedModule( auto sink = translationUnit->compileRequest->getSink(); int errorCountBefore = sink->getErrorCount(); - compileRequest->checkAllTranslationUnits(); - int errorCountAfter = sink->getErrorCount(); + int errorCountAfter; + try + { + compileRequest->checkAllTranslationUnits(); + } + catch (...) + { + mapPathToLoadedModule.remove(mostUniqueIdentity); + mapNameToLoadedModules.remove(name); + throw; + } + errorCountAfter = sink->getErrorCount(); if (isInLanguageServer()) { // Don't generate IR as language server.