From deb1b6918f3276926579cab58c431f51526050ee Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Tue, 27 Mar 2018 01:56:06 +0200 Subject: [PATCH] Fix bug and typo in IsInConstructorInitializer --- ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs b/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs index c5b60dc84..6acfb731a 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs @@ -51,7 +51,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms bool modified = false; int i = 0; while (i < block.Instructions.Count) { - if (InlineOneIfPossible(block, i, aggressive: IsCatchWhenBlock(block) || IsInConstructurInitializer(i, block), context: context)) { + if (InlineOneIfPossible(block, i, aggressive: IsCatchWhenBlock(block) || IsInConstructorInitializer(i, block), context: context)) { modified = true; i = Math.Max(0, i - 1); // Go back one step @@ -62,7 +62,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms return modified; } - static bool IsInConstructurInitializer(int i, Block block) + static bool IsInConstructorInitializer(int i, Block block) { var inst = block.Instructions[i]; var topLevelBlock = inst.Ancestors.OfType().LastOrDefault(); @@ -70,7 +70,10 @@ namespace ICSharpCode.Decompiler.IL.Transforms if (topLevelBlock == null || function == null || !function.Method.IsConstructor) return false; var topLevelInst = inst.Ancestors.FirstOrDefault(instr => instr.Parent == topLevelBlock); - var ctorCall = function.Descendants.OfType().FirstOrDefault(call => !(call is NewObj) && call.Method.IsConstructor); + var ctorCall = function.Descendants.OfType().FirstOrDefault(call => !(call is NewObj) + && call.Method.IsConstructor + && call.Method.DeclaringType.IsReferenceType == true + && call.Parent is Block); if (topLevelInst == null || ctorCall == null) return false; return topLevelInst.ILRange.InclusiveEnd < ctorCall.ILRange.Start;