Browse Source

Fix mcs-5 foreach/using pattern when C# 7 (pattern matching) is not enabled.

pull/2873/head
Daniel Grunwald 2 years ago
parent
commit
b823955ad6
  1. 17
      ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs

17
ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs

@ -388,7 +388,22 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -388,7 +388,22 @@ namespace ICSharpCode.Decompiler.IL.Transforms
isInlinedIsInst = false;
if (condition.MatchCompNotEquals(out var left, out var right))
{
if (left.MatchIsInst(out var arg, out var type) && type.IsKnownType(disposeType))
if (left.MatchStLoc(out var inlineAssignVar, out var inlineAssignVal))
{
if (!inlineAssignVal.MatchIsInst(out var arg, out var type) && type.IsKnownType(disposeType))
return false;
if (!inlineAssignVar.IsSingleDefinition || inlineAssignVar.LoadCount != 1)
return false;
if (!inlineAssignVar.Type.IsKnownType(disposeType))
return false;
isInlinedIsInst = true;
left = arg;
if (!left.MatchLdLoc(objVar) || !right.MatchLdNull())
return false;
objVar = inlineAssignVar;
return true;
}
else if (left.MatchIsInst(out var arg, out var type) && type.IsKnownType(disposeType))
{
isInlinedIsInst = true;
left = arg;

Loading…
Cancel
Save