From f0b5101a67ab114841a9119eb44174c1964af39b Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 15 Feb 2022 11:18:45 -0500 Subject: [PATCH] Fixed 'int[] bar = append .[1]' inferred append array case --- IDEHelper/Compiler/BfModule.cpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 2b802789..830ec4c2 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -497,7 +497,34 @@ public: else if (auto arrayTypeRef = BfNodeDynCast(objCreateExpr->mTypeRef)) { isArrayAlloc = true; - origResolvedTypeRef = mModule->ResolveTypeRef(arrayTypeRef->mElementType); + + bool handled = false; + + if (auto dotTypeRef = BfNodeDynCast(arrayTypeRef->mElementType)) + { + if (variableDecl->mTypeRef != NULL) + { + auto variableType = mModule->ResolveTypeRef(variableDecl->mTypeRef); + if (variableType != NULL) + { + if (variableType->IsArray()) + origResolvedTypeRef = variableType->GetUnderlyingType(); + } + handled = true; + } + } + + if (!handled) + { + origResolvedTypeRef = mModule->ResolveTypeRef(arrayTypeRef->mElementType); + } + + if (origResolvedTypeRef == NULL) + { + mModule->AssertErrorState(); + return; + } + int dimensions = 1; if (arrayTypeRef->mParams.size() != 0) @@ -543,7 +570,7 @@ public: } dimLengthVals.push_back(dimLength.mValue); } - } + } if (!isRawArrayAlloc) arrayType = mModule->CreateArrayType(origResolvedTypeRef, dimensions);