diff options
Diffstat (limited to 'source/slang/slang.cpp')
| -rw-r--r-- | source/slang/slang.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index 1aa014a4b..dc9f86b48 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -1161,13 +1161,29 @@ slang::IModule* Linkage::loadModuleFromBlob( try { - auto name = getNamePool()->getName(moduleName); + auto getDigestStr = [](auto x) + { + DigestBuilder<SHA1> digestBuilder; + digestBuilder.append(x); + return digestBuilder.finalize().toString(); + }; + + String moduleNameStr = moduleName; + if (!moduleName) + moduleNameStr = getDigestStr(source); + + auto name = getNamePool()->getName(moduleNameStr); RefPtr<LoadedModule> loadedModule; if (mapNameToLoadedModules.tryGetValue(name, loadedModule)) { return loadedModule; } String pathStr = path; + if (pathStr.getLength() == 0) + { + // If path is empty, use a digest from source as path. + pathStr = getDigestStr(source); + } auto pathInfo = PathInfo::makeFromString(pathStr); if (File::exists(pathStr)) { @@ -1205,6 +1221,16 @@ SLANG_NO_THROW slang::IModule* SLANG_MCALL Linkage::loadModuleFromSource( return loadModuleFromBlob(moduleName, path, source, ModuleBlobType::Source, outDiagnostics); } +SLANG_NO_THROW slang::IModule* SLANG_MCALL Linkage::loadModuleFromSourceString( + const char* moduleName, + const char* path, + const char* source, + slang::IBlob** outDiagnostics) +{ + auto sourceBlob = StringBlob::create(UnownedStringSlice(source)); + return loadModuleFromSource(moduleName, path, sourceBlob.get(), outDiagnostics); +} + SLANG_NO_THROW slang::IModule* SLANG_MCALL Linkage::loadModuleFromIRBlob( const char* moduleName, const char* path, |
