summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-syntax.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-02-06 16:30:31 -0800
committerGitHub <noreply@github.com>2024-02-06 16:30:31 -0800
commitab41d548db376c6b52869004d1b6e21b88b4c9c8 (patch)
tree61aacddad8b8c56d77cf63ab3b650fdb28bbe0e6 /source/slang/slang-syntax.cpp
parent6365e00179179f2bc0bc25af3d51d528501498d5 (diff)
Improve Capability System (#3555)
* Improve capability system. * Update documentation. * Tuning semantics. * LSP: hierarchical diagnostics. * Fix test. * Fix test.
Diffstat (limited to 'source/slang/slang-syntax.cpp')
-rw-r--r--source/slang/slang-syntax.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/source/slang/slang-syntax.cpp b/source/slang/slang-syntax.cpp
index ab0dfcd74..b6fd8936e 100644
--- a/source/slang/slang-syntax.cpp
+++ b/source/slang/slang-syntax.cpp
@@ -17,7 +17,10 @@ void printDiagnosticArg(StringBuilder& sb, Decl* decl)
{
if (!decl)
return;
- sb << getText(decl->getName());
+ if (decl->getName() && decl->getName()->text.getLength())
+ sb << getText(decl->getName());
+ else
+ printDiagnosticArg(sb, decl->astNodeType);
}
void printDiagnosticArg(StringBuilder& sb, DeclRefBase* declRefBase)
@@ -92,6 +95,7 @@ void printDiagnosticArg(StringBuilder& sb, ASTNodeType nodeType)
case ASTNodeType::EmptyDecl: sb << "empty"; break;
case ASTNodeType::SyntaxDecl: sb << "syntax"; break;
case ASTNodeType::DeclGroup: sb << "decl-group"; break;
+ case ASTNodeType::RequireCapabilityDecl: sb << "__require_capability"; break;
default: sb << "decl"; break;
}
}
@@ -862,6 +866,18 @@ Decl* getParentDecl(Decl* decl)
return decl;
}
+Decl* getParentAggTypeDecl(Decl* decl)
+{
+ decl = decl->parentDecl;
+ while (decl)
+ {
+ if (as<AggTypeDecl>(decl))
+ return decl;
+ decl = decl->parentDecl;
+ }
+ return nullptr;
+}
+
Decl* getParentFunc(Decl* decl)
{
while (decl)