summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-conformance.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-09-04 10:18:44 -0700
committerGitHub <noreply@github.com>2020-09-04 10:18:44 -0700
commit8f962894fd38edb47d782d303ac9ff87b3a3bb6a (patch)
tree449d0d58ca7d90a11759372c9dc82650a565f96a /source/slang/slang-check-conformance.cpp
parent5e10f1b4f0654515af1fcb29e8d1f35e691c8aa3 (diff)
Allow mixing unspecialized and specialized existential parameters. (#1533)
* Allow mixing unspecialized and specialized existential parameters. * Fixes.
Diffstat (limited to 'source/slang/slang-check-conformance.cpp')
-rw-r--r--source/slang/slang-check-conformance.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/source/slang/slang-check-conformance.cpp b/source/slang/slang-check-conformance.cpp
index 25a7ac4ee..6a397e8b6 100644
--- a/source/slang/slang-check-conformance.cpp
+++ b/source/slang/slang-check-conformance.cpp
@@ -180,8 +180,16 @@ namespace Slang
}
return true;
}
-
- if( auto aggTypeDeclRef = declRef.as<AggTypeDecl>() )
+ if (auto dynamicType = as<DynamicType>(subType))
+ {
+ // A __Dynamic type always conforms to the interface via its witness table.
+ if (outWitness)
+ {
+ *outWitness = m_astBuilder->create<DynamicSubtypeWitness>();
+ }
+ return true;
+ }
+ else if( auto aggTypeDeclRef = declRef.as<AggTypeDecl>() )
{
ensureDecl(aggTypeDeclRef, DeclCheckState::CanEnumerateBases);
@@ -363,7 +371,6 @@ namespace Slang
}
return true;
}
-
// default is failure
return false;
}