diff options
| author | Yong He <yonghe@outlook.com> | 2023-07-05 14:37:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-05 14:37:48 -0700 |
| commit | 6c7120d684cc46caafbe348d658158c0060a7638 (patch) | |
| tree | e8ba738564b5cdceda22013900a0ed762c184bd3 /source/slang/slang-check-conformance.cpp | |
| parent | 6063304cb8d73d430e7ef81c62cd9822302fcc19 (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.cpp | 13 |
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); |
