Jelajahi Sumber

Fixed 'int[] bar = append .[1]' inferred append array case

Brian Fiete 3 tahun lalu
induk
melakukan
f0b5101a67
1 mengubah file dengan 29 tambahan dan 2 penghapusan
  1. 29 2
      IDEHelper/Compiler/BfModule.cpp

+ 29 - 2
IDEHelper/Compiler/BfModule.cpp

@@ -497,7 +497,34 @@ public:
 				else if (auto arrayTypeRef = BfNodeDynCast<BfArrayTypeRef>(objCreateExpr->mTypeRef))
 				{
 					isArrayAlloc = true;
-					origResolvedTypeRef = mModule->ResolveTypeRef(arrayTypeRef->mElementType);
+					
+					bool handled = false;
+
+					if (auto dotTypeRef = BfNodeDynCast<BfDotTypeReference>(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);