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.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp
index 7fc519c03..bda847815 100644
--- a/source/slang/slang.cpp
+++ b/source/slang/slang.cpp
@@ -2730,7 +2730,8 @@ Expr* Linkage::parseTermString(String typeStr, Scope* scope)
// We need to temporarily replace the SourceManager for this CompileRequest
ScopeReplaceSourceManager scopeReplaceSourceManager(this, &localSourceManager);
- SourceLanguage sourceLanguage;
+ SourceLanguage sourceLanguage = SourceLanguage::Slang;
+ SlangLanguageVersion languageVersion = m_optionSet.getLanguageVersion();
auto tokens = preprocessSource(
srcFile,
@@ -2738,7 +2739,8 @@ Expr* Linkage::parseTermString(String typeStr, Scope* scope)
nullptr,
Dictionary<String, String>(),
this,
- sourceLanguage);
+ sourceLanguage,
+ languageVersion);
if (sourceLanguage == SourceLanguage::Unknown)
sourceLanguage = SourceLanguage::Slang;
@@ -3411,7 +3413,9 @@ void FrontEndCompileRequest::parseTranslationUnit(TranslationUnitRequest* transl
for (auto sourceFile : translationUnit->getSourceFiles())
{
- SourceLanguage sourceLanguage = SourceLanguage::Unknown;
+ SourceLanguage sourceLanguage = translationUnit->sourceLanguage;
+ SlangLanguageVersion languageVersion =
+ translationUnit->compileRequest->optionSet.getLanguageVersion();
auto tokens = preprocessSource(
sourceFile,
getSink(),
@@ -3419,8 +3423,11 @@ void FrontEndCompileRequest::parseTranslationUnit(TranslationUnitRequest* transl
combinedPreprocessorDefinitions,
getLinkage(),
sourceLanguage,
+ languageVersion,
&preprocessorHandler);
+ translationUnitSyntax->languageVersion = languageVersion;
+
if (sourceLanguage == SourceLanguage::Unknown)
sourceLanguage = translationUnit->sourceLanguage;
@@ -4915,11 +4922,13 @@ Linkage::IncludeResult Linkage::findAndIncludeFile(
// Create a transparent FileDecl to hold all children from the included file.
auto fileDecl = module->getASTBuilder()->create<FileDecl>();
fileDecl->nameAndLoc.name = name;
+ fileDecl->parentDecl = module->getModuleDecl();
module->getIncludedSourceFileMap().add(sourceFile, fileDecl);
FrontEndPreprocessorHandler preprocessorHandler(module, module->getASTBuilder(), sink);
auto combinedPreprocessorDefinitions = translationUnit->getCombinedPreprocessorDefinitions();
- SourceLanguage sourceLanguage = SourceLanguage::Unknown;
+ SourceLanguage sourceLanguage = translationUnit->sourceLanguage;
+ SlangLanguageVersion slangLanguageVersion = module->getModuleDecl()->languageVersion;
auto tokens = preprocessSource(
sourceFile,
sink,
@@ -4927,11 +4936,19 @@ Linkage::IncludeResult Linkage::findAndIncludeFile(
combinedPreprocessorDefinitions,
this,
sourceLanguage,
+ slangLanguageVersion,
&preprocessorHandler);
if (sourceLanguage == SourceLanguage::Unknown)
sourceLanguage = translationUnit->sourceLanguage;
+ if (slangLanguageVersion != module->getModuleDecl()->languageVersion)
+ {
+ sink->diagnose(
+ tokens.begin()->getLoc(),
+ Diagnostics::languageVersionDiffersFromIncludingModule);
+ }
+
auto outerScope = module->getModuleDecl()->ownedScope;
parseSourceFile(
module->getASTBuilder(),