summaryrefslogtreecommitdiffstats
path: root/source/slang/slang.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang.cpp')
-rw-r--r--source/slang/slang.cpp51
1 files changed, 35 insertions, 16 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp
index ed0e87045..c7171d835 100644
--- a/source/slang/slang.cpp
+++ b/source/slang/slang.cpp
@@ -1348,6 +1348,18 @@ int FrontEndCompileRequest::addTranslationUnit(SourceLanguage language, Name* mo
{
Index result = translationUnits.getCount();
+ if (!moduleName)
+ {
+ // We want to ensure that symbols defined in different translation
+ // units get unique mangled names, so that we can, e.g., tell apart
+ // a `main()` function in `vertex.slang` and a `main()` in `fragment.slang`,
+ // even when they are being compiled together.
+ //
+ String generatedName = "tu";
+ generatedName.append(translationUnits.getCount());
+ moduleName = getNamePool()->getName(generatedName);
+ }
+
RefPtr<TranslationUnitRequest> translationUnit = new TranslationUnitRequest(this);
translationUnit->compileRequest = this;
translationUnit->sourceLanguage = SourceLanguage(language);
@@ -1359,18 +1371,6 @@ int FrontEndCompileRequest::addTranslationUnit(SourceLanguage language, Name* mo
return (int) result;
}
-int FrontEndCompileRequest::addTranslationUnit(SourceLanguage language)
-{
- // We want to ensure that symbols defined in different translation
- // units get unique mangled names, so that we can, e.g., tell apart
- // a `main()` function in `vertex.slang` and a `main()` in `fragment.slang`,
- // even when they are being compiled together.
- //
- String generatedName = "tu";
- generatedName.append(translationUnits.getCount());
- return addTranslationUnit(language, getNamePool()->getName(generatedName));
-}
-
void FrontEndCompileRequest::addTranslationUnitSourceFile(
int translationUnitIndex,
SourceFile* sourceFile)
@@ -3009,17 +3009,36 @@ SLANG_API SlangResult spGetDiagnosticOutputBlob(
SLANG_API int spAddTranslationUnit(
SlangCompileRequest* request,
SlangSourceLanguage language,
- char const* name)
+ char const* inName)
{
- SLANG_UNUSED(name);
-
auto req = Slang::asInternal(request);
auto frontEndReq = req->getFrontEndReq();
+ Slang::NamePool* namePool = req->getFrontEndReq()->getNamePool();
+
+ // Work out a module name. Can be nullptr if so will generate a name
+ Slang::Name* moduleName = inName ? namePool->getName(inName) : frontEndReq->m_defaultModuleName;
+
+ // If moduleName is nullptr a name will be generated
+
return frontEndReq->addTranslationUnit(
- Slang::SourceLanguage(language));
+ Slang::SourceLanguage(language),
+ moduleName);
+}
+
+SLANG_API void spSetDefaultModuleName(
+ SlangCompileRequest* request,
+ const char* defaultModuleName)
+{
+ auto req = Slang::asInternal(request);
+ auto frontEndReq = req->getFrontEndReq();
+
+ Slang::NamePool* namePool = req->getFrontEndReq()->getNamePool();
+
+ frontEndReq->m_defaultModuleName = namePool->getName(defaultModuleName);
}
+
SLANG_API void spTranslationUnit_addPreprocessorDefine(
SlangCompileRequest* request,
int translationUnitIndex,