From ecde53969c4159bae3645e8281e9dd82a9944672 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 26 Jan 2019 09:27:23 +0100 Subject: [PATCH] Add IsInConstructorInitializer case to ILInlining.OptionsForBlock. --- ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs | 11 +++++++++-- .../IL/Transforms/NamedArgumentTransform.cs | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs b/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs index b4409d250..099c41d38 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs @@ -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().FirstOrDefault(); + var inst = block.Instructions[pos]; + int? ctorCallStart = null; + if (IsInConstructorInitializer(function, inst, ref ctorCallStart)) + options |= InliningOptions.Aggressive; + } return options; } diff --git a/ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs b/ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs index a9627c68b..cb22e437e 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs @@ -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); }