summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-modifier.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-04-01 18:44:44 -0700
committerGitHub <noreply@github.com>2024-04-01 18:44:44 -0700
commitabb7f1a7790544010d6eaac0f137e6b39349cf76 (patch)
tree922ca0d837d426f42a09ebec0a9a8492964c4781 /source/slang/slang-check-modifier.cpp
parent2c4f9810327d58023e9ec44f579cd78adf56317b (diff)
Support `[RequirePrelude]` attribute on types. (#3867)
Diffstat (limited to 'source/slang/slang-check-modifier.cpp')
-rw-r--r--source/slang/slang-check-modifier.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp
index 942afd559..1587fa1b0 100644
--- a/source/slang/slang-check-modifier.cpp
+++ b/source/slang/slang-check-modifier.cpp
@@ -848,6 +848,35 @@ namespace Slang
}
requireCapAttr->capabilitySet = CapabilitySet(capabilityNames);
}
+ else if (auto requirePreludeAttr = as<RequirePreludeAttribute>(attr))
+ {
+ if (attr->args.getCount() > 2)
+ {
+ getSink()->diagnose(attr, Diagnostics::tooManyArguments, attr->args.getCount(), 0);
+ return false;
+ }
+ else if (attr->args.getCount() < 2)
+ {
+ getSink()->diagnose(attr, Diagnostics::notEnoughArguments, attr->args.getCount(), 2);
+ return false;
+ }
+ CapabilityName capName;
+ if (!checkCapabilityName(attr->args[0], capName))
+ {
+ return false;
+ }
+ requirePreludeAttr->capabilitySet = CapabilitySet(capName);
+ if (auto stringLitExpr = as<StringLiteralExpr>(attr->args[1]))
+ {
+ requirePreludeAttr->prelude = getStringLiteralTokenValue(stringLitExpr->token);
+ }
+ else
+ {
+ getSink()->diagnose(attr->args[1], Diagnostics::expectedAStringLiteral);
+ return false;
+ }
+ return true;
+ }
else
{
if(attr->args.getCount() == 0)