From 52263da8dfa560b4b2cc96ffe85adf72e1b879c0 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 30 Aug 2020 12:33:12 +0200 Subject: [PATCH] #2129: prevent state-machines from being treated as display classes. --- .../IL/Transforms/TransformDisplayClassUsage.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs b/ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs index 60c7984a9..1b9e370cf 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs @@ -23,6 +23,7 @@ using System.Linq; using System.Reflection.Metadata; using ICSharpCode.Decompiler.Disassembler; +using ICSharpCode.Decompiler.IL.ControlFlow; using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.Util; @@ -400,6 +401,13 @@ namespace ICSharpCode.Decompiler.IL.Transforms return false; if (definition.ParentModule.PEFile != context.PEFile) return false; + // We do not want to accidentially transform state-machines and thus destroy them. + var token = (TypeDefinitionHandle)definition.MetadataToken; + var metadata = definition.ParentModule.PEFile.Metadata; + if (YieldReturnDecompiler.IsCompilerGeneratorEnumerator(token, metadata)) + return false; + if (AsyncAwaitDecompiler.IsCompilerGeneratedStateMachine(token, metadata)) + return false; if (!context.Settings.AggressiveScalarReplacementOfAggregates) { if (definition.DeclaringTypeDefinition == null)