From 499b0253c224e68ceed6e5b6b1ee9cd7d65aad0f Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 30 Jan 2023 19:24:09 -0800 Subject: Make ArrayExpressionType a DeclRefType and define its autodiff extension in stdlib. (#2615) * Allow array parameters in forward diff. * Use type canonicalization instead of coersion. * Reimplement array type. * Fix. * Update test case. --------- Co-authored-by: Yong He --- source/slang/slang-ast-builder.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'source/slang/slang-ast-builder.cpp') 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(elementType, elementCount); - if (!arrayType->baseType) + if (!elementCount) + elementCount = getIntVal(getIntType(), kUnsizedArrayMagicLength); + + auto result = getOrCreate(elementType, elementCount); + if (!result->declRef.decl) { - arrayType->baseType = elementType; - arrayType->arrayLength = elementCount; + auto arrayGenericDecl = as(m_sharedASTBuilder->findMagicDecl("ArrayType")); + auto arrayTypeDecl = arrayGenericDecl->inner; + auto substitutions = getOrCreate(arrayGenericDecl, elementType, elementCount); + result->declRef = DeclRef(arrayTypeDecl, substitutions); } - return arrayType; + return result; } VectorExpressionType* ASTBuilder::getVectorType( -- cgit v1.2.3