summaryrefslogtreecommitdiffstats
path: root/source/slang/slang.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-05-29 08:05:57 -0700
committerGitHub <noreply@github.com>2025-05-29 08:05:57 -0700
commitfaf042ecc3e688a1a3ffbe1ac44d18dd7ddf441a (patch)
treeb54abb2e65b7791d74335ead396cf762f805ab5c /source/slang/slang.cpp
parent45d794f57d453a5564a7360400c5bfc04bf12b31 (diff)
Language version + tuple syntax. (#7230)
* Language version + tuple syntax. * Fix compile error. * regenerate documentation Table of Contents * Fix. * regenerate command line reference * Fix. * Fix. * Fix more test failures. * revert empty line change, * Retrigger CI * #version->#lang * Update source/core/slang-type-text-util.cpp Co-authored-by: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> * Remove comments. * Fix parsing logic. * Fix parser. * Fix parser. * update test comment * Update options. * regenerate documentation Table of Contents * regenerate command line reference --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> Co-authored-by: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com>
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(),