Browse Source

Add IsInConstructorInitializer case to ILInlining.OptionsForBlock.

pull/1409/head
Siegfried Pammer 7 years ago
parent
commit
ecde53969c
  1. 11
      ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs
  2. 2
      ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs

11
ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs

@ -52,14 +52,21 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -52,14 +52,21 @@ namespace ICSharpCode.Decompiler.IL.Transforms
public void Run(Block block, int pos, StatementTransformContext context)
{
InlineOneIfPossible(block, pos, OptionsForBlock(block), context: context);
InlineOneIfPossible(block, pos, OptionsForBlock(block, pos), context: context);
}
internal static InliningOptions OptionsForBlock(Block block)
internal static InliningOptions OptionsForBlock(Block block, int pos)
{
InliningOptions options = InliningOptions.None;
if (IsCatchWhenBlock(block))
options |= InliningOptions.Aggressive;
else {
var function = block.Ancestors.OfType<ILFunction>().FirstOrDefault();
var inst = block.Instructions[pos];
int? ctorCallStart = null;
if (IsInConstructorInitializer(function, inst, ref ctorCallStart))
options |= InliningOptions.Aggressive;
}
return options;
}

2
ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs

@ -103,7 +103,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -103,7 +103,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{
if (!context.Settings.NamedArguments)
return;
var options = ILInlining.OptionsForBlock(block);
var options = ILInlining.OptionsForBlock(block, pos);
options |= InliningOptions.IntroduceNamedArguments;
ILInlining.InlineOneIfPossible(block, pos, options, context: context);
}

Loading…
Cancel
Save