Browse Source

Fix out var for expressions appearing in a lambda and not in a statement.

pull/3594/head
Siegfried Pammer 3 months ago
parent
commit
c075f7b9c8
  1. 9
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/OutVariables.cs
  2. 8
      ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs

9
ICSharpCode.Decompiler.Tests/TestCases/Pretty/OutVariables.cs

@ -72,5 +72,14 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty @@ -72,5 +72,14 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
GetObject(out dynamic obj);
obj.Method();
}
public void M5()
{
Func<bool> func = () => TryGet<object>(out var result) && result != null;
Func<bool> func2 = () => TryGet<object>(out var result) && result != null;
func();
func2();
}
}
}

8
ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs

@ -776,11 +776,13 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -776,11 +776,13 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
}
switch (node)
{
case IfElseStatement _: // variable declared in if condition appears in parent scope
case ExpressionStatement _:
case IfElseStatement: // variable declared in if condition appears in parent scope
case ExpressionStatement:
return node == v.InsertionPoint.nextNode;
case Statement _:
case Statement:
return false; // other statements (e.g. while) don't allow variables to be promoted to parent scope
case LambdaExpression lambda:
return lambda.Body == v.InsertionPoint.nextNode;
}
}
return false;

Loading…
Cancel
Save