diff options
| author | Yong He <yonghe@outlook.com> | 2024-04-01 18:44:44 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-01 18:44:44 -0700 |
| commit | abb7f1a7790544010d6eaac0f137e6b39349cf76 (patch) | |
| tree | 922ca0d837d426f42a09ebec0a9a8492964c4781 /source/slang/slang-check-modifier.cpp | |
| parent | 2c4f9810327d58023e9ec44f579cd78adf56317b (diff) | |
Support `[RequirePrelude]` attribute on types. (#3867)
Diffstat (limited to 'source/slang/slang-check-modifier.cpp')
| -rw-r--r-- | source/slang/slang-check-modifier.cpp | 29 |
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) |
