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
public void Run(Block block, int pos, StatementTransformContext context) 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; InliningOptions options = InliningOptions.None;
if (IsCatchWhenBlock(block)) if (IsCatchWhenBlock(block))
options |= InliningOptions.Aggressive; 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; return options;
} }

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

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

Loading…
Cancel
Save