summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-language-server.cpp16
-rw-r--r--source/slang/slang.cpp14
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.