Browse Source

Fixed type analysis for collection initializers. Closes #104.

pull/124/head
Daniel Grunwald 14 years ago
parent
commit
9ad5124603
  1. 4
      ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs
  2. 25
      ICSharpCode.Decompiler/Tests/InitializerTests.cs

4
ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

@ -341,8 +341,8 @@ namespace ICSharpCode.Decompiler.ILAst @@ -341,8 +341,8 @@ namespace ICSharpCode.Decompiler.ILAst
{
MethodReference addMethod = (MethodReference)expr.Operand;
if (forceInferChildren) {
for (int i = 1; i < addMethod.Parameters.Count; i++) {
InferTypeForExpression(expr.Arguments[i-1], SubstituteTypeArgs(addMethod.Parameters[i].ParameterType, addMethod));
for (int i = 0; i < addMethod.Parameters.Count; i++) {
InferTypeForExpression(expr.Arguments[i], SubstituteTypeArgs(addMethod.Parameters[i].ParameterType, addMethod));
}
}
return addMethod.DeclaringType;

25
ICSharpCode.Decompiler/Tests/InitializerTests.cs

@ -6,6 +6,18 @@ using System.Collections.Generic; @@ -6,6 +6,18 @@ using System.Collections.Generic;
public class InitializerTests
{
enum MyEnum
{
a,
b
}
enum MyEnum2
{
c,
d
}
// Helper methods used to ensure initializers used within expressions work correctly
static void X(object a, object b)
{
@ -100,6 +112,11 @@ public class InitializerTests @@ -100,6 +112,11 @@ public class InitializerTests
{
X(Y(), new string[] { "", null, "Hello", "World" });
}
public static void ArrayEnum()
{
X(Y(), new InitializerTests.MyEnum[] { InitializerTests.MyEnum.a, InitializerTests.MyEnum.b, InitializerTests.MyEnum.a, InitializerTests.MyEnum.b });
}
#endregion
public static void CollectionInitializerList()
@ -115,4 +132,12 @@ public class InitializerTests @@ -115,4 +132,12 @@ public class InitializerTests
{ "Third" , 3 }
});
}
public static void CollectionInitializerDictionaryWithEnumTypes()
{
X(Y(), new Dictionary<InitializerTests.MyEnum, InitializerTests.MyEnum2> {
{ InitializerTests.MyEnum.a, InitializerTests.MyEnum2.c },
{ InitializerTests.MyEnum.b, InitializerTests.MyEnum2.d }
});
}
}

Loading…
Cancel
Save