2
0
Эх сурвалжийг харах

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

Brian Fiete 3 жил өмнө
parent
commit
f0b5101a67

+ 29 - 2
IDEHelper/Compiler/BfModule.cpp

@@ -497,7 +497,34 @@ public:
 				else if (auto arrayTypeRef = BfNodeDynCast<BfArrayTypeRef>(objCreateExpr->mTypeRef))
 				else if (auto arrayTypeRef = BfNodeDynCast<BfArrayTypeRef>(objCreateExpr->mTypeRef))
 				{
 				{
 					isArrayAlloc = true;
 					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;
 					int dimensions = 1;
 
 
 					if (arrayTypeRef->mParams.size() != 0)
 					if (arrayTypeRef->mParams.size() != 0)
@@ -543,7 +570,7 @@ public:
 							}
 							}
 							dimLengthVals.push_back(dimLength.mValue);
 							dimLengthVals.push_back(dimLength.mValue);
 						}
 						}
-					}
+					}					
 
 
 					if (!isRawArrayAlloc)
 					if (!isRawArrayAlloc)
 						arrayType = mModule->CreateArrayType(origResolvedTypeRef, dimensions);
 						arrayType = mModule->CreateArrayType(origResolvedTypeRef, dimensions);