Bläddra i källkod

Multi-dimensional sized array name printing fix

Brian Fiete 3 år sedan
förälder
incheckning
ad7ef19004
2 ändrade filer med 45 tillägg och 11 borttagningar
  1. 23 4
      BeefLibs/corlib/src/Type.bf
  2. 22 7
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 23 - 4
BeefLibs/corlib/src/Type.bf

@@ -1156,10 +1156,29 @@ namespace System.Reflection
 
 		public override void GetFullName(String strBuffer)
 		{
-			UnderlyingType.GetFullName(strBuffer);
-			strBuffer.Append("[");
-			mElementCount.ToString(strBuffer);
-			strBuffer.Append("]");
+			List<int> sizes = scope .(4);
+
+			Type checkType = this;
+			while (true)
+			{
+				if (var arrayType = checkType as SizedArrayType)
+				{
+					sizes.Add(arrayType.mElementCount);
+					checkType = arrayType.UnderlyingType;
+					continue;
+				}
+				
+				checkType.GetFullName(strBuffer);
+				break;
+			}
+													
+			for (var size in sizes)
+			{
+				if (size == -1)
+					strBuffer.Append("[?]");
+				else
+					strBuffer.AppendF($"[{size}]");
+			}
 		}
 	}
 

+ 22 - 7
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -14565,15 +14565,30 @@ void BfModule::DoTypeToString(StringImpl& str, BfType* resolvedType, BfTypeNameF
 	}
 	else if (resolvedType->IsSizedArray())
 	{
-		auto arrayType = (BfSizedArrayType*)resolvedType;
-		if (arrayType->mElementCount == -1)
+		SizedArray<intptr, 4> sizes;
+
+		auto checkType = resolvedType;
+		while (true)
 		{
-			DoTypeToString(str, arrayType->mElementType, typeNameFlags, genericMethodNameOverrides);
-			str += "[?]";
-			return;
+			if (checkType->IsSizedArray())
+			{
+				auto arrayType = (BfSizedArrayType*)checkType;
+				sizes.Add(arrayType->mElementCount);
+				checkType = arrayType->mElementType;
+				continue;
+			}
+			
+			DoTypeToString(str, checkType, typeNameFlags, genericMethodNameOverrides);
+			break;
+		}
+												
+		for (int i = 0; i < (int)sizes.mSize; i++)
+		{
+			if (sizes[i] == -1)
+				str += "[?]";
+			else
+				str += StrFormat("[%d]", sizes[i]);
 		}
-		DoTypeToString(str, arrayType->mElementType, typeNameFlags, genericMethodNameOverrides);
-		str += StrFormat("[%d]", arrayType->mElementCount);
 		return;
 	}
 	else if (resolvedType->IsConstExprValue())