summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-decl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-decl.cpp')
-rw-r--r--source/slang/slang-check-decl.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index 1e3c6a361..8df5ae618 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -169,6 +169,8 @@ namespace Slang
void visitInheritanceDecl(InheritanceDecl* inheritanceDecl);
+ void visitThisTypeConstraintDecl(ThisTypeConstraintDecl* thisTypeConstraintDecl);
+
/// Validate that `decl` isn't illegally inheriting from a type in another module.
///
/// This call checks a single `inheritanceDecl` to make sure that it either
@@ -1600,6 +1602,22 @@ namespace Slang
// based on the declaration that is doing the inheriting.
}
+ void SemanticsDeclBasesVisitor::visitThisTypeConstraintDecl(ThisTypeConstraintDecl* thisTypeConstraintDecl)
+ {
+ // Make sure IFoo<T>.This.ThisIsIFooConstraint.base.type is properly set
+ // to DeclRefType(IFoo<T>) with default generic arguments.
+ if (!thisTypeConstraintDecl->base.type)
+ {
+ auto parentTypeDecl = getParentDecl(getParentDecl(thisTypeConstraintDecl));
+ thisTypeConstraintDecl->base.type = DeclRefType::create(
+ m_astBuilder,
+ createDefaultSubstitutionsIfNeeded(
+ m_astBuilder,
+ this,
+ getDefaultDeclRef(parentTypeDecl)));
+ }
+ }
+
// Concretize interface conformances so that we have witnesses as required for lookup.
// for lookup.
struct SemanticsDeclConformancesVisitor