Browse Source

#2129: prevent state-machines from being treated as display classes.

pull/2134/head
Siegfried Pammer 6 years ago
parent
commit
52263da8df
  1. 8
      ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs

8
ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs

@ -23,6 +23,7 @@ using System.Linq;
using System.Reflection.Metadata; using System.Reflection.Metadata;
using ICSharpCode.Decompiler.Disassembler; using ICSharpCode.Decompiler.Disassembler;
using ICSharpCode.Decompiler.IL.ControlFlow;
using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.Decompiler.Util; using ICSharpCode.Decompiler.Util;
@ -400,6 +401,13 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false; return false;
if (definition.ParentModule.PEFile != context.PEFile) if (definition.ParentModule.PEFile != context.PEFile)
return false; 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 (!context.Settings.AggressiveScalarReplacementOfAggregates)
{ {
if (definition.DeclaringTypeDefinition == null) if (definition.DeclaringTypeDefinition == null)

Loading…
Cancel
Save