Browse Source

fix DecompilerTypeSystem conversion of op_Explicit

pull/728/head
Siegfried Pammer 10 years ago
parent
commit
e9340e0893
  1. 15
      ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs

15
ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs

@ -231,23 +231,28 @@ namespace ICSharpCode.Decompiler @@ -231,23 +231,28 @@ namespace ICSharpCode.Decompiler
return method;
}
var parameterTypes = methodReference.Parameters.SelectArray(p => Resolve(p.ParameterType));
var returnType = Resolve(methodReference.ReturnType);
foreach (var method in methods) {
if (CompareSignatures(method.Parameters, parameterTypes))
if (CompareSignatures(method.Parameters, parameterTypes) && CompareTypes(method.ReturnType, returnType))
return method;
}
return CreateFakeMethod(methodReference);
}
static bool CompareTypes(IType a, IType b)
{
IType type1 = DummyTypeParameter.NormalizeAllTypeParameters(a);
IType type2 = DummyTypeParameter.NormalizeAllTypeParameters(b);
return type1.Equals(type2);
}
static bool CompareSignatures(IList<IParameter> parameters, IType[] parameterTypes)
{
if (parameterTypes.Length != parameters.Count)
return false;
for (int i = 0; i < parameterTypes.Length; i++) {
IType type1 = DummyTypeParameter.NormalizeAllTypeParameters(parameterTypes[i]);
IType type2 = DummyTypeParameter.NormalizeAllTypeParameters(parameters[i].Type);
if (!type1.Equals(type2)) {
if (!CompareTypes(parameterTypes[i], parameters[i].Type))
return false;
}
}
return true;
}

Loading…
Cancel
Save