diff options
| author | Yong He <yonghe@outlook.com> | 2023-12-11 16:13:32 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-11 16:13:32 -0800 |
| commit | ec0224edc3a867bbf059e790ad7b2a1a881a0705 (patch) | |
| tree | 9c56c3fd2dd11f79f597c152326d555d81414fc3 /source/slang/slang-syntax.cpp | |
| parent | 12fcffaaaf2d1ffa2eefa680e2d7c9971e38a5db (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.cpp | 71 |
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) |
