diff options
| author | Yong He <yonghe@outlook.com> | 2021-09-29 11:29:46 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-29 11:29:46 -0700 |
| commit | 6736b0c1c5fa3e89bc561eb7965a1a0d17af3466 (patch) | |
| tree | c1d0050e969ca8422eb38ec2036fda3bfafa6d57 /source | |
| parent | d8e452412e14a6a8ba137f2adcae13b398e5cecb (diff) | |
Add ISession::loadModuleFromSource. (#1950)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source')
| -rwxr-xr-x | source/slang/slang-compiler.h | 4 | ||||
| -rw-r--r-- | source/slang/slang.cpp | 30 |
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, |
