Browse Source

Fix #2269: LocalFunctionDecompiler misplaces nested local functions in ctors

pull/3416/head
Siegfried Pammer 5 months ago
parent
commit
73e9771d3c
  1. 13
      ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs

13
ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs

@ -142,10 +142,21 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{ {
DetermineCaptureAndDeclarationScope(info, useSite); DetermineCaptureAndDeclarationScope(info, useSite);
if (context.Function.Method.IsConstructor && localFunction.DeclarationScope == null) if (context.Function.Method.IsConstructor)
{
if (localFunction.DeclarationScope == null)
{ {
localFunction.DeclarationScope = BlockContainer.FindClosestContainer(useSite); localFunction.DeclarationScope = BlockContainer.FindClosestContainer(useSite);
} }
else
{
localFunction.DeclarationScope = FindCommonAncestorInstruction<BlockContainer>(useSite, localFunction.DeclarationScope);
if (localFunction.DeclarationScope == null)
{
localFunction.DeclarationScope = (BlockContainer)context.Function.Body;
}
}
}
} }
if (localFunction.DeclarationScope == null) if (localFunction.DeclarationScope == null)

Loading…
Cancel
Save