summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rwxr-xr-xsource/slang/slang-compiler.h6
-rw-r--r--source/slang/slang.cpp13
2 files changed, 15 insertions, 4 deletions
diff --git a/source/slang/slang-compiler.h b/source/slang/slang-compiler.h
index 1a0e61aee..74929d7da 100755
--- a/source/slang/slang-compiler.h
+++ b/source/slang/slang-compiler.h
@@ -1754,7 +1754,8 @@ namespace Slang
const PathInfo& filePathInfo,
ISlangBlob* fileContentsBlob,
SourceLoc const& loc,
- DiagnosticSink* sink);
+ DiagnosticSink* sink,
+ const LoadedModuleDictionary* additionalLoadedModules);
void loadParsedModule(
RefPtr<FrontEndCompileRequest> compileRequest,
@@ -1938,6 +1939,9 @@ namespace Slang
// Translation units we are being asked to compile
List<RefPtr<TranslationUnitRequest> > translationUnits;
+ // Additional modules that needs to be made visible to `import` while checking.
+ const LoadedModuleDictionary* additionalLoadedModules = nullptr;
+
RefPtr<TranslationUnitRequest> getTranslationUnit(UInt index) { return translationUnits[index]; }
// Compile flags to be shared by all translation units
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp
index 2ddef9e3e..5d4e61cc0 100644
--- a/source/slang/slang.cpp
+++ b/source/slang/slang.cpp
@@ -960,7 +960,8 @@ SLANG_NO_THROW slang::IModule* SLANG_MCALL Linkage::loadModuleFromSource(
PathInfo::makeFromString(moduleName),
source,
SourceLoc(),
- &sink);
+ &sink,
+ nullptr);
sink.getBlobIfNeeded(outDiagnostics);
return asExternal(module);
@@ -2003,6 +2004,8 @@ RefPtr<ComponentType> createSpecializedGlobalAndEntryPointsComponentType(
void FrontEndCompileRequest::checkAllTranslationUnits()
{
LoadedModuleDictionary loadedModules;
+ if (additionalLoadedModules)
+ loadedModules = *additionalLoadedModules;
// Iterate over all translation units and
// apply the semantic checking logic.
@@ -2604,10 +2607,13 @@ RefPtr<Module> Linkage::loadModule(
const PathInfo& filePathInfo,
ISlangBlob* sourceBlob,
SourceLoc const& srcLoc,
- DiagnosticSink* sink)
+ DiagnosticSink* sink,
+ const LoadedModuleDictionary* additionalLoadedModules)
{
RefPtr<FrontEndCompileRequest> frontEndReq = new FrontEndCompileRequest(this, nullptr, sink);
+ frontEndReq->additionalLoadedModules = additionalLoadedModules;
+
RefPtr<TranslationUnitRequest> translationUnit = new TranslationUnitRequest(frontEndReq);
translationUnit->compileRequest = frontEndReq;
translationUnit->moduleName = name;
@@ -2767,7 +2773,8 @@ RefPtr<Module> Linkage::findOrImportModule(
filePathInfo,
fileContents,
loc,
- sink);
+ sink,
+ loadedModules);
}
//