From e30e08a59df39481d65a929464e92b18796cda0f Mon Sep 17 00:00:00 2001 From: David Wengier Date: Tue, 22 Oct 2019 08:18:02 +1100 Subject: [PATCH] The resource expression is always needed regardless of the setting. --- ICSharpCode.Decompiler/CSharp/StatementBuilder.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs b/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs index aae1f2016..739cb1188 100644 --- a/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs @@ -406,7 +406,8 @@ namespace ICSharpCode.Decompiler.CSharp protected internal override Statement VisitUsingInstruction(UsingInstruction inst) { - var transformed = TransformToForeach(inst, out var resource); + var resource = exprBuilder.Translate(inst.ResourceExpression).Expression; + var transformed = TransformToForeach(inst, resource); if (transformed != null) return transformed; AstNode usingInit = resource; @@ -420,7 +421,7 @@ namespace ICSharpCode.Decompiler.CSharp AssignVariableNames.GenerateVariableName(currentFunction, disposeType) ); return new BlockStatement { - new ExpressionStatement(new AssignmentExpression(exprBuilder.ConvertVariable(var).Expression, resource?.Detach())), + new ExpressionStatement(new AssignmentExpression(exprBuilder.ConvertVariable(var).Expression, resource.Detach())), new TryCatchStatement { TryBlock = ConvertAsBlock(inst.Body), FinallyBlock = new BlockStatement() { @@ -446,14 +447,12 @@ namespace ICSharpCode.Decompiler.CSharp } } - Statement TransformToForeach(UsingInstruction inst, out Expression resource) + Statement TransformToForeach(UsingInstruction inst, Expression resource) { if (!settings.ForEachStatement) { - resource = null; return null; } // Check if the using resource matches the GetEnumerator pattern. - resource = exprBuilder.Translate(inst.ResourceExpression); var m = getEnumeratorPattern.Match(resource); // The using body must be a BlockContainer. if (!(inst.Body is BlockContainer container) || !m.Success)