|
|
@ -173,11 +173,11 @@ namespace ICSharpCode.Decompiler.Ast.Transforms |
|
|
|
if (stmt.Variables.Count() != 1) |
|
|
|
if (stmt.Variables.Count() != 1) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
var variable = stmt.Variables.Single(); |
|
|
|
var variable = stmt.Variables.Single(); |
|
|
|
TypeDefinition type = stmt.Type.Annotation<TypeDefinition>(); |
|
|
|
TypeDefinition type = stmt.Type.Annotation<TypeReference>().ResolveWithinSameModule(); |
|
|
|
if (!IsPotentialClosure(context, type)) |
|
|
|
if (!IsPotentialClosure(context, type)) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
ObjectCreateExpression oce = variable.Initializer as ObjectCreateExpression; |
|
|
|
ObjectCreateExpression oce = variable.Initializer as ObjectCreateExpression; |
|
|
|
if (oce == null || oce.Type.Annotation<TypeReference>() != type || oce.Arguments.Any() || !oce.Initializer.IsNull) |
|
|
|
if (oce == null || oce.Type.Annotation<TypeReference>().ResolveWithinSameModule() != type || oce.Arguments.Any() || !oce.Initializer.IsNull) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
// Looks like we found a display class creation. Now let's verify that the variable is used only for field accesses:
|
|
|
|
// Looks like we found a display class creation. Now let's verify that the variable is used only for field accesses:
|
|
|
|
bool ok = true; |
|
|
|
bool ok = true; |
|
|
@ -222,7 +222,7 @@ namespace ICSharpCode.Decompiler.Ast.Transforms |
|
|
|
isParameter = parameterOccurrances.Count(c => c == param) == 1; |
|
|
|
isParameter = parameterOccurrances.Count(c => c == param) == 1; |
|
|
|
} |
|
|
|
} |
|
|
|
if (isParameter) { |
|
|
|
if (isParameter) { |
|
|
|
dict[m.Get<MemberReferenceExpression>("left").Single().Annotation<FieldReference>()] = right; |
|
|
|
dict[m.Get<MemberReferenceExpression>("left").Single().Annotation<FieldReference>().ResolveWithinSameModule()] = right; |
|
|
|
cur.Remove(); |
|
|
|
cur.Remove(); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
break; |
|
|
|
break; |
|
|
@ -247,7 +247,7 @@ namespace ICSharpCode.Decompiler.Ast.Transforms |
|
|
|
if (identExpr.Identifier == variable.Name) { |
|
|
|
if (identExpr.Identifier == variable.Name) { |
|
|
|
MemberReferenceExpression mre = (MemberReferenceExpression)identExpr.Parent; |
|
|
|
MemberReferenceExpression mre = (MemberReferenceExpression)identExpr.Parent; |
|
|
|
AstNode replacement; |
|
|
|
AstNode replacement; |
|
|
|
if (dict.TryGetValue(mre.Annotation<FieldReference>(), out replacement)) { |
|
|
|
if (dict.TryGetValue(mre.Annotation<FieldReference>().ResolveWithinSameModule(), out replacement)) { |
|
|
|
mre.ReplaceWith(replacement.Clone()); |
|
|
|
mre.ReplaceWith(replacement.Clone()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|