summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-type.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-type.cpp')
-rw-r--r--source/slang/slang-check-type.cpp22
1 files changed, 6 insertions, 16 deletions
diff --git a/source/slang/slang-check-type.cpp b/source/slang/slang-check-type.cpp
index c59e1b308..d402dde03 100644
--- a/source/slang/slang-check-type.cpp
+++ b/source/slang/slang-check-type.cpp
@@ -171,15 +171,16 @@ namespace Slang
DeclRef<GenericDecl> genericDeclRef,
List<Expr*> const& args)
{
- GenericSubstitution* subst = m_astBuilder->create<GenericSubstitution>();
- subst->genericDecl = genericDeclRef.getDecl();
- subst->outer = genericDeclRef.substitutions.substitutions;
+ List<Val*> evaledArgs;
for (auto argExpr : args)
{
- subst->args.add(ExtractGenericArgVal(argExpr));
+ evaledArgs.add(ExtractGenericArgVal(argExpr));
}
+ GenericSubstitution* subst = m_astBuilder->getOrCreateGenericSubstitution(
+ genericDeclRef.getDecl(), evaledArgs, genericDeclRef.substitutions.substitutions);
+
DeclRef<Decl> innerDeclRef;
innerDeclRef.decl = getInner(genericDeclRef);
innerDeclRef.substitutions = SubstitutionSet(subst);
@@ -403,18 +404,7 @@ namespace Slang
Type* elementType,
IntVal* elementCount)
{
- auto vectorGenericDecl = as<GenericDecl>(m_astBuilder->getSharedASTBuilder()->findMagicDecl("Vector"));
-
- auto vectorTypeDecl = vectorGenericDecl->inner;
-
- auto substitutions = m_astBuilder->create<GenericSubstitution>();
- substitutions->genericDecl = vectorGenericDecl;
- substitutions->args.add(elementType);
- substitutions->args.add(elementCount);
-
- auto declRef = DeclRef<Decl>(vectorTypeDecl, substitutions);
-
- return as<VectorExpressionType>(DeclRefType::create(m_astBuilder, declRef));
+ return m_astBuilder->getVectorType(elementType, elementCount);
}
Expr* SemanticsExprVisitor::visitSharedTypeExpr(SharedTypeExpr* expr)