Browse Source

Fix #278: Decompiling generic multidimensional array access throws exception

pull/285/head
Zohar Kelrich 15 years ago committed by Daniel Grunwald
parent
commit
470caaa6bb
  1. 6
      ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs
  2. 5
      ICSharpCode.Decompiler/Tests/Generics.cs

6
ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

@ -916,16 +916,14 @@ namespace ICSharpCode.Decompiler.ILAst
} }
GenericParameter gp = type as GenericParameter; GenericParameter gp = type as GenericParameter;
if (gp != null) { if (gp != null) {
if (gp.Owner.GenericParameterType == GenericParameterType.Method) {
return ((GenericInstanceMethod)member).GenericArguments[gp.Position];
} else {
if (member.DeclaringType is ArrayType) { if (member.DeclaringType is ArrayType) {
return ((ArrayType)member.DeclaringType).ElementType; return ((ArrayType)member.DeclaringType).ElementType;
} else if (gp.Owner.GenericParameterType == GenericParameterType.Method) {
return ((GenericInstanceMethod)member).GenericArguments[gp.Position];
} else { } else {
return ((GenericInstanceType)member.DeclaringType).GenericArguments[gp.Position]; return ((GenericInstanceType)member.DeclaringType).GenericArguments[gp.Position];
} }
} }
}
return type; return type;
} }

5
ICSharpCode.Decompiler/Tests/Generics.cs

@ -97,6 +97,11 @@ public static class Generics
{ {
} }
private static void MultidimensionalArray<T>(T[,] array)
{
array[0, 0] = array[0, 1];
}
public static Dictionary<string, string>.KeyCollection.Enumerator GetEnumerator(Dictionary<string, string> d, Generics.MyArray<string>.NestedClass<int> nc) public static Dictionary<string, string>.KeyCollection.Enumerator GetEnumerator(Dictionary<string, string> d, Generics.MyArray<string>.NestedClass<int> nc)
{ {
// Tests references to inner classes in generic classes // Tests references to inner classes in generic classes

Loading…
Cancel
Save