summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-conformance.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-07-05 14:37:48 -0700
committerGitHub <noreply@github.com>2023-07-05 14:37:48 -0700
commit6c7120d684cc46caafbe348d658158c0060a7638 (patch)
treee8ba738564b5cdceda22013900a0ed762c184bd3 /source/slang/slang-check-conformance.cpp
parent6063304cb8d73d430e7ef81c62cd9822302fcc19 (diff)
Bottleneck DeclRef creation through ASTBuilder. (#2689)
* Bottleneck DeclRef creation through ASTBuilder. * Fix clang error. * Fix. * Fix. * More fix. * Rebase on top of tree. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-conformance.cpp')
-rw-r--r--source/slang/slang-check-conformance.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/source/slang/slang-check-conformance.cpp b/source/slang/slang-check-conformance.cpp
index 34d6c34cd..8df4631ac 100644
--- a/source/slang/slang-check-conformance.cpp
+++ b/source/slang/slang-check-conformance.cpp
@@ -13,8 +13,7 @@ namespace Slang
DeclaredSubtypeWitness* witness = m_astBuilder->getOrCreate<DeclaredSubtypeWitness>(
breadcrumb->sub,
breadcrumb->sup,
- breadcrumb->declRef.decl,
- breadcrumb->declRef.substitutions.substitutions);
+ m_astBuilder->getSpecializedDeclRef(breadcrumb->declRef.decl, breadcrumb->declRef.substitutions.substitutions));
return witness;
}
@@ -144,7 +143,7 @@ namespace Slang
{
DeclaredSubtypeWitness* declaredWitness =
m_astBuilder->getOrCreate<DeclaredSubtypeWitness>(
- bb->sub, bb->sup, bb->declRef.decl, bb->declRef.substitutions.substitutions);
+ bb->sub, bb->sup, m_astBuilder->getSpecializedDeclRef(bb->declRef.decl, bb->declRef.substitutions.substitutions));
TransitiveSubtypeWitness* transitiveWitness = m_astBuilder->getOrCreateWithDefaultCtor<TransitiveSubtypeWitness>();
transitiveWitness->sub = subType;
@@ -200,7 +199,7 @@ namespace Slang
bool SemanticsVisitor::isInterfaceSafeForTaggedUnion(
DeclRef<InterfaceDecl> interfaceDeclRef)
{
- for( auto memberDeclRef : getMembers(interfaceDeclRef) )
+ for( auto memberDeclRef : getMembers(m_astBuilder, interfaceDeclRef) )
{
if(!isInterfaceRequirementSafeForTaggedUnion(interfaceDeclRef, memberDeclRef))
return false;
@@ -328,7 +327,7 @@ namespace Slang
return true;
// if an inheritance decl is not found, try to find a GenericTypeConstraintDecl
- for (auto genConstraintDeclRef : getMembersOfType<GenericTypeConstraintDecl>(aggTypeDeclRef))
+ for (auto genConstraintDeclRef : getMembersOfType<GenericTypeConstraintDecl>(m_astBuilder, aggTypeDeclRef))
{
ensureDecl(genConstraintDeclRef, DeclCheckState::CanUseBaseOfInheritanceDecl);
auto inheritedType = getSup(m_astBuilder, genConstraintDeclRef);
@@ -348,10 +347,10 @@ namespace Slang
// We need to enumerate the constraints placed on this type by its outer
// generic declaration, and see if any of them guarantees that we
// satisfy the given interface..
- auto genericDeclRef = genericTypeParamDeclRef.getParent().as<GenericDecl>();
+ auto genericDeclRef = genericTypeParamDeclRef.getParent(m_astBuilder).as<GenericDecl>();
SLANG_ASSERT(genericDeclRef);
- for( auto constraintDeclRef : getMembersOfType<GenericTypeConstraintDecl>(genericDeclRef) )
+ for( auto constraintDeclRef : getMembersOfType<GenericTypeConstraintDecl>(m_astBuilder, genericDeclRef) )
{
ensureDecl(constraintDeclRef, DeclCheckState::CanUseBaseOfInheritanceDecl);
auto sub = getSub(m_astBuilder, constraintDeclRef);