diff options
| author | Yong He <yonghe@outlook.com> | 2025-07-16 23:43:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-17 06:43:06 +0000 |
| commit | 020a16072923a66ae0985be618fd32310aa87242 (patch) | |
| tree | 92eafa62d59c2fed44aa1afd47a14a31b88a22fe /source/slang/slang-check-inheritance.cpp | |
| parent | 5937e1e6bb3afcf84b01abadcf1eb527933449f3 (diff) | |
Improve lookup performance. (#7798)
* Improve lookup performance.
* Cleanup.
* Improve autocompletion latency.
Diffstat (limited to 'source/slang/slang-check-inheritance.cpp')
| -rw-r--r-- | source/slang/slang-check-inheritance.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/source/slang/slang-check-inheritance.cpp b/source/slang/slang-check-inheritance.cpp index 2554553de..164828bac 100644 --- a/source/slang/slang-check-inheritance.cpp +++ b/source/slang/slang-check-inheritance.cpp @@ -218,8 +218,13 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo( // TypeEqualityWitness* selfIsSelf = selfType ? visitor.createTypeEqualityWitness(selfType) : nullptr; - Facet selfFacet = new (arena) - Facet::Impl(selfFacetKind, Facet::Directness::Self, declRef, selfType, selfIsSelf); + Facet selfFacet = new (arena) Facet::Impl( + astBuilder, + selfFacetKind, + Facet::Directness::Self, + declRef, + selfType, + selfIsSelf); allFacets.add(selfFacet); // After the self facet will come a list of facets formed @@ -253,8 +258,13 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo( // the base in the linearized inheritance list // we are building. // - baseInfo->facetImpl = - FacetImpl(kind, Facet::Directness::Direct, baseDeclRef, baseType, selfIsBaseWitness); + baseInfo->facetImpl = FacetImpl( + astBuilder, + kind, + Facet::Directness::Direct, + baseDeclRef, + baseType, + selfIsBaseWitness); Facet baseFacet(&baseInfo->facetImpl); // // Second, we have a list of the facets in the @@ -852,7 +862,7 @@ void SharedSemanticsContext::_mergeFacetLists( selfIsSubtypeOfBase, baseIsSubtypeOfFacet); - indirectFacet->subtypeWitness = selfIsSubtypeOfFacet; + indirectFacet->setSubtypeWitness(_getASTBuilder(), selfIsSubtypeOfFacet); ioMergedFacets.add(indirectFacet); } @@ -1105,6 +1115,7 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo( // DirectBaseInfo leftBaseInfo; leftBaseInfo.facetImpl = FacetImpl( + astBuilder, Facet::Kind::Type, Facet::Directness::Direct, DeclRef<Decl>(), @@ -1114,6 +1125,7 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo( DirectBaseInfo rightBaseInfo; rightBaseInfo.facetImpl = FacetImpl( + astBuilder, Facet::Kind::Type, Facet::Directness::Direct, DeclRef<Decl>(), @@ -1143,6 +1155,7 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo( getInheritanceInfo(eachType->getElementType(), circularityInfo); SemanticsVisitor visitor(this); auto directFacet = new (arena) Facet::Impl( + astBuilder, Facet::Kind::Type, Facet::Directness::Self, DeclRef<Decl>(), @@ -1154,6 +1167,7 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo( if (facet->directness == Facet::Directness::Direct) { auto eachFacet = new (arena) Facet::Impl( + astBuilder, Facet::Kind::Type, Facet::Directness::Direct, facet->origin.declRef, @@ -1182,6 +1196,7 @@ InheritanceInfo SharedSemanticsContext::_calcInheritanceInfo( // SemanticsVisitor visitor(this); auto directFacet = new (arena) Facet::Impl( + astBuilder, Facet::Kind::Type, Facet::Directness::Self, DeclRef<Decl>(), |
