From ab41d548db376c6b52869004d1b6e21b88b4c9c8 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 6 Feb 2024 16:30:31 -0800 Subject: Improve Capability System (#3555) * Improve capability system. * Update documentation. * Tuning semantics. * LSP: hierarchical diagnostics. * Fix test. * Fix test. --- source/slang/slang-syntax.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-syntax.cpp') 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(decl)) + return decl; + decl = decl->parentDecl; + } + return nullptr; +} + Decl* getParentFunc(Decl* decl) { while (decl) -- cgit v1.2.3