Browse Source

Fix #2269: LocalFunctionDecompiler misplaces nested local functions in ctors

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

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

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

Loading…
Cancel
Save