From f9bcad35562c1f08638e6d3eb397d370d7d2f8f8 Mon Sep 17 00:00:00 2001 From: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Date: Fri, 19 Apr 2024 23:18:40 -0400 Subject: Initial pass to add capability declarations to stdlib intrinsics. (#3912) --- source/slang/slang-check-modifier.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'source/slang/slang-check-modifier.cpp') diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp index 6d39f977c..13ad8be3a 100644 --- a/source/slang/slang-check-modifier.cpp +++ b/source/slang/slang-check-modifier.cpp @@ -1613,6 +1613,37 @@ namespace Slang } } + void postProcessingOnModifiers(Modifiers& modifiers) + { + // compress all `require` nodes into 1 `require` modifier + RequireCapabilityAttribute* firstRequire = nullptr; + Modifier* previous = nullptr; + Modifier* next = nullptr; + for (auto m = modifiers.first; m != nullptr; m = next) + { + next = m->next; + // + + if (auto req = as(m)) + { + if (!firstRequire) + { + firstRequire = req; + previous = m; + continue; + } + for(auto& con : req->capabilitySet.getExpandedAtoms()) + firstRequire->capabilitySet.unionWith(con); + if(previous) + previous->next = next; + continue; + } + + // + previous = m; + } + } + void SemanticsVisitor::checkModifiers(ModifiableSyntaxNode* syntaxNode) { // TODO(tfoley): need to make sure this only @@ -1685,6 +1716,8 @@ namespace Slang // Whether we actually re-wrote anything or note, lets // install the new list of modifiers on the declaration syntaxNode->modifiers.first = resultModifiers; + + postProcessingOnModifiers(syntaxNode->modifiers); } -- cgit v1.2.3