summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-09-29 11:29:46 -0700
committerGitHub <noreply@github.com>2021-09-29 11:29:46 -0700
commit6736b0c1c5fa3e89bc561eb7965a1a0d17af3466 (patch)
treec1d0050e969ca8422eb38ec2036fda3bfafa6d57 /source
parentd8e452412e14a6a8ba137f2adcae13b398e5cecb (diff)
Add ISession::loadModuleFromSource. (#1950)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source')
-rwxr-xr-xsource/slang/slang-compiler.h4
-rw-r--r--source/slang/slang.cpp30
2 files changed, 34 insertions, 0 deletions
diff --git a/source/slang/slang-compiler.h b/source/slang/slang-compiler.h
index a7903dd5a..46f16f0d5 100755
--- a/source/slang/slang-compiler.h
+++ b/source/slang/slang-compiler.h
@@ -1415,6 +1415,10 @@ namespace Slang
SLANG_NO_THROW slang::IModule* SLANG_MCALL loadModule(
const char* moduleName,
slang::IBlob** outDiagnostics = nullptr) override;
+ SLANG_NO_THROW slang::IModule* SLANG_MCALL loadModuleFromSource(
+ const char* moduleName,
+ slang::IBlob* source,
+ slang::IBlob** outDiagnostics = nullptr) override;
SLANG_NO_THROW SlangResult SLANG_MCALL createCompositeComponentType(
slang::IComponentType* const* componentTypes,
SlangInt componentTypeCount,
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp
index 1362cb038..0fc5f6122 100644
--- a/source/slang/slang.cpp
+++ b/source/slang/slang.cpp
@@ -839,6 +839,36 @@ SLANG_NO_THROW slang::IModule* SLANG_MCALL Linkage::loadModule(
}
}
+SLANG_NO_THROW slang::IModule* SLANG_MCALL Linkage::loadModuleFromSource(
+ const char* moduleName,
+ slang::IBlob* source,
+ slang::IBlob** outDiagnostics)
+{
+ try
+ {
+ auto name = getNamePool()->getName(moduleName);
+ RefPtr<LoadedModule> loadedModule;
+ if (mapNameToLoadedModules.TryGetValue(name, loadedModule))
+ {
+ return loadedModule;
+ }
+ DiagnosticSink sink(getSourceManager(), Lexer::sourceLocationLexer);
+ auto module = loadModule(
+ name,
+ PathInfo::makeFromString(moduleName),
+ source,
+ SourceLoc(),
+ &sink);
+ sink.getBlobIfNeeded(outDiagnostics);
+ return asExternal(module);
+
+ }
+ catch (const AbortCompilationException&)
+ {
+ return nullptr;
+ }
+}
+
SLANG_NO_THROW SlangResult SLANG_MCALL Linkage::createCompositeComponentType(
slang::IComponentType* const* componentTypes,
SlangInt componentTypeCount,