From f8bf75cf1ae0aeee155996a917c2925bc500f3e2 Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 25 Oct 2023 07:45:23 -0700 Subject: Support generic interfaces. (#3278) * Initial support for generic interfaces. * Cleanup. * Add generic syntax for interfaces. --------- Co-authored-by: Yong He --- source/slang/slang-check-decl.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'source/slang/slang-check-decl.cpp') 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.This.ThisIsIFooConstraint.base.type is properly set + // to DeclRefType(IFoo) 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 -- cgit v1.2.3