diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-language-server.cpp | 16 | ||||
| -rw-r--r-- | source/slang/slang.cpp | 14 |
2 files changed, 28 insertions, 2 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index 3cc093ad7..d52c5d855 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; } @@ -2616,6 +2624,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 e149058b1..e98187c85 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -4131,8 +4131,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. |
