summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-overload.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-07-18 08:08:11 -0700
committerGitHub <noreply@github.com>2023-07-18 15:08:11 +0000
commit4cb3eeb832b5fb29a61f2934b3daa5e42a3d6cde (patch)
tree89713b5d83b4fee0dad6aa52b72d5ca695f4e8f1 /source/slang/slang-check-overload.cpp
parent138a44ef272841cb555fa0eb5c49cc889bf1d64a (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.cpp17
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);