summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-syntax.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-12-11 16:13:32 -0800
committerGitHub <noreply@github.com>2023-12-11 16:13:32 -0800
commitec0224edc3a867bbf059e790ad7b2a1a881a0705 (patch)
tree9c56c3fd2dd11f79f597c152326d555d81414fc3 /source/slang/slang-syntax.cpp
parent12fcffaaaf2d1ffa2eefa680e2d7c9971e38a5db (diff)
Diagnose for invalid decl nesting + namespace lookup fixes. (#3397)
* Diagnose for invalid decl nesting. * Fix. * Fix. * Fix. * Fix `namespace` lookup and `using` resolution. * fix project files. * revert project files. * Enhance namespace syntax, docs. * Fixes. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-syntax.cpp')
-rw-r--r--source/slang/slang-syntax.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/source/slang/slang-syntax.cpp b/source/slang/slang-syntax.cpp
index 6350a7e4d..ab0dfcd74 100644
--- a/source/slang/slang-syntax.cpp
+++ b/source/slang/slang-syntax.cpp
@@ -25,6 +25,77 @@ void printDiagnosticArg(StringBuilder& sb, DeclRefBase* declRefBase)
printDiagnosticArg(sb, declRefBase->getDecl());
}
+void printDiagnosticArg(StringBuilder& sb, ASTNodeType nodeType)
+{
+ // TODO: this can be generated.
+
+ switch (nodeType)
+ {
+ case ASTNodeType::Decl: sb << "Decl"; break;
+ case ASTNodeType::UnresolvedDecl: sb << "UnresolvedDecl"; break;
+ case ASTNodeType::ContainerDecl: sb << "ContainerDecl"; break;
+ case ASTNodeType::AggTypeDeclBase: sb << "AggTypeDeclBase"; break;
+ case ASTNodeType::ExtensionDecl: sb << "extension"; break;
+ case ASTNodeType::AggTypeDecl: sb << "AggTypeDecl"; break;
+ case ASTNodeType::StructDecl: sb << "struct"; break;
+ case ASTNodeType::ClassDecl: sb << "class"; break;
+ case ASTNodeType::GLSLInterfaceBlockDecl: sb << "GLSL interface block"; break;
+ case ASTNodeType::EnumDecl: sb << "enum"; break;
+ case ASTNodeType::ThisTypeDecl: sb << "This"; break;
+ case ASTNodeType::InterfaceDecl: sb << "interface"; break;
+ case ASTNodeType::AssocTypeDecl: sb << "associatedtype"; break;
+ case ASTNodeType::GlobalGenericParamDecl: sb << "global generic param"; break;
+ case ASTNodeType::ScopeDecl: sb << "scope"; break;
+ case ASTNodeType::CallableDecl: sb << "CallableDecl"; break;
+ case ASTNodeType::FunctionDeclBase: sb << "FunctionDeclBase"; break;
+ case ASTNodeType::ConstructorDecl: sb << "__init"; break;
+ case ASTNodeType::AccessorDecl: sb << "accessor"; break;
+ case ASTNodeType::GetterDecl: sb << "getter"; break;
+ case ASTNodeType::SetterDecl: sb << "setter"; break;
+ case ASTNodeType::RefAccessorDecl: sb << "ref accessor"; break;
+ case ASTNodeType::FuncDecl: sb << "function"; break;
+ case ASTNodeType::DerivativeRequirementDecl: sb << "DerivativeRequirementDecl"; break;
+ case ASTNodeType::ForwardDerivativeRequirementDecl: sb << "ForwardDerivativeRequirementDecl"; break;
+ case ASTNodeType::BackwardDerivativeRequirementDecl: sb << "BackwardDerivativeRequirementDecl"; break;
+ case ASTNodeType::DerivativeRequirementReferenceDecl: sb << "DerivativeRequirementReferenceDecl"; break;
+ case ASTNodeType::SubscriptDecl: sb << "__subscript"; break;
+ case ASTNodeType::PropertyDecl: sb << "property"; break;
+ case ASTNodeType::NamespaceDeclBase: sb << "NamespaceDeclBase"; break;
+ case ASTNodeType::NamespaceDecl: sb << "namespace"; break;
+ case ASTNodeType::ModuleDecl: sb << "module"; break;
+ case ASTNodeType::FileDecl: sb << "included file"; break;
+ case ASTNodeType::GenericDecl: sb << "generic"; break;
+ case ASTNodeType::AttributeDecl: sb << "attribute"; break;
+ case ASTNodeType::VarDeclBase: sb << "variable definition"; break;
+ case ASTNodeType::VarDecl: sb << "variable definition"; break;
+ case ASTNodeType::LetDecl: sb << "immutable value definition"; break;
+ case ASTNodeType::GlobalGenericValueParamDecl: sb << "GlobalGenericValueParamDecl"; break;
+ case ASTNodeType::ParamDecl: sb << "parameter"; break;
+ case ASTNodeType::ModernParamDecl: sb << "parameter"; break;
+ case ASTNodeType::GenericValueParamDecl: sb << "GenericValueParamDecl"; break;
+ case ASTNodeType::EnumCaseDecl: sb << "enum case"; break;
+ case ASTNodeType::TypeConstraintDecl: sb << "TypeConstraintDecl"; break;
+ case ASTNodeType::ThisTypeConstraintDecl: sb << "ThisTypeConstraintDecl"; break;
+ case ASTNodeType::InheritanceDecl: sb << "InheritanceDecl"; break;
+ case ASTNodeType::GenericTypeConstraintDecl: sb << "GenericTypeConstraintDecl"; break;
+ case ASTNodeType::SimpleTypeDecl: sb << "SimpleTypeDecl"; break;
+ case ASTNodeType::TypeDefDecl: sb << "typedef"; break;
+ case ASTNodeType::TypeAliasDecl: sb << "typealias"; break;
+ case ASTNodeType::GenericTypeParamDecl: sb << "GenericTypeParamDecl"; break;
+ case ASTNodeType::UsingDecl: sb << "using"; break;
+ case ASTNodeType::FileReferenceDeclBase: sb << "FileReferenceDeclBase"; break;
+ case ASTNodeType::ImportDecl: sb << "import"; break;
+ case ASTNodeType::IncludeDeclBase: sb << "IncludeDeclBase"; break;
+ case ASTNodeType::IncludeDecl: sb << "__include"; break;
+ case ASTNodeType::ImplementingDecl: sb << "implementing"; break;
+ case ASTNodeType::ModuleDeclarationDecl: sb << "module"; break;
+ case ASTNodeType::EmptyDecl: sb << "empty"; break;
+ case ASTNodeType::SyntaxDecl: sb << "syntax"; break;
+ case ASTNodeType::DeclGroup: sb << "decl-group"; break;
+ default: sb << "decl"; break;
+ }
+}
+
void printDiagnosticArg(StringBuilder& sb, Type* type)
{
if (!type)