diff options
| author | Yong He <yonghe@outlook.com> | 2023-07-18 08:08:11 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-18 15:08:11 +0000 |
| commit | 4cb3eeb832b5fb29a61f2934b3daa5e42a3d6cde (patch) | |
| tree | 89713b5d83b4fee0dad6aa52b72d5ca695f4e8f1 /source/slang/slang-check-overload.cpp | |
| parent | 138a44ef272841cb555fa0eb5c49cc889bf1d64a (diff) | |
Simplify Lookup and improve compiler performance. (#2996)
* Simplify lookup.
* Various bug fixes.
* Report type dictionary size in perf benchmark.
* Remove type duplication.
* increase initial dict size.
* Bug fix.
* Fix bugs.
* Fixup.
* Revert type legalization looping.
* Fix specialization pass.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-overload.cpp')
| -rw-r--r-- | source/slang/slang-check-overload.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp index 38856d7bf..1d2f82ac7 100644 --- a/source/slang/slang-check-overload.cpp +++ b/source/slang/slang-check-overload.cpp @@ -215,10 +215,7 @@ namespace Slang // to represent the arguments that have been coerced to // appropriate forms. // - auto genSubst = m_astBuilder->create<GenericSubstitution>(); - genSubst->genericDecl = genericDeclRef.getDecl(); - candidate.subst = genSubst; - auto& checkedArgs = (List<Val*>&)genSubst->getArgs(); + List<Val*> checkedArgs; // Rather than bail out as soon as we hit a problem, // we are going to process *all* of the parameters of the @@ -348,6 +345,9 @@ namespace Slang } } + auto genSubst = m_astBuilder->getOrCreateGenericSubstitution(nullptr, genericDeclRef.getDecl(), checkedArgs.getArrayView()); + candidate.subst = genSubst; + // Once we are done processing the parameters of the generic, // we will have build up a usable `checkedArgs` array and // can return to the caller a report of whether we @@ -515,8 +515,8 @@ namespace Slang auto subst = as<GenericSubstitution>(candidate.subst); SLANG_ASSERT(subst); - subst->genericDecl = genericDeclRef.getDecl(); - subst->outer = genericDeclRef.getSubst(); + subst = getASTBuilder()->getOrCreateGenericSubstitution( + genericDeclRef.getSubst(), genericDeclRef.getDecl(), subst->getArgs()); List<Val*> newArgs = subst->getArgs(); @@ -544,7 +544,7 @@ namespace Slang } } - candidate.subst = m_astBuilder->getOrCreateGenericSubstitution(genericDeclRef.getDecl(), newArgs, genericDeclRef.getSubst()); + candidate.subst = m_astBuilder->getOrCreateGenericSubstitution(nullptr, genericDeclRef.getDecl(), newArgs); // Done checking all the constraints, hooray. return true; @@ -594,8 +594,7 @@ namespace Slang return CreateErrorExpr(originalExpr); } - subst->genericDecl = baseGenericRef.getDecl(); - subst->outer = baseGenericRef.getSubst(); + subst = m_astBuilder->getOrCreateGenericSubstitution(baseGenericRef.getSubst(), baseGenericRef.getDecl(), subst->getArgs()); DeclRef<Decl> innerDeclRef = m_astBuilder->getSpecializedDeclRef<Decl>(getInner(baseGenericRef), subst); |
