summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ast-builder.cpp')
-rw-r--r--source/slang/slang-ast-builder.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/source/slang/slang-ast-builder.cpp b/source/slang/slang-ast-builder.cpp
index ab161065d..03725901e 100644
--- a/source/slang/slang-ast-builder.cpp
+++ b/source/slang/slang-ast-builder.cpp
@@ -290,13 +290,18 @@ PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, char const* ptrTypeName)
ArrayExpressionType* ASTBuilder::getArrayType(Type* elementType, IntVal* elementCount)
{
- ArrayExpressionType* arrayType = getOrCreateWithDefaultCtor<ArrayExpressionType>(elementType, elementCount);
- if (!arrayType->baseType)
+ if (!elementCount)
+ elementCount = getIntVal(getIntType(), kUnsizedArrayMagicLength);
+
+ auto result = getOrCreate<ArrayExpressionType>(elementType, elementCount);
+ if (!result->declRef.decl)
{
- arrayType->baseType = elementType;
- arrayType->arrayLength = elementCount;
+ auto arrayGenericDecl = as<GenericDecl>(m_sharedASTBuilder->findMagicDecl("ArrayType"));
+ auto arrayTypeDecl = arrayGenericDecl->inner;
+ auto substitutions = getOrCreate<GenericSubstitution>(arrayGenericDecl, elementType, elementCount);
+ result->declRef = DeclRef<Decl>(arrayTypeDecl, substitutions);
}
- return arrayType;
+ return result;
}
VectorExpressionType* ASTBuilder::getVectorType(