From 31b4e6ae6ae4e4ea7ce52e8d4c959c1aee7f941c Mon Sep 17 00:00:00 2001 From: Siegfried Pammer <siegfriedpammer@gmail.com> Date: Fri, 9 Oct 2020 12:37:08 +0200 Subject: [PATCH] Fix #2185: Fix MemberIsHidden-check for local function display structs: Async State Machines that looked like local function display structs were not hidden once local function decompilation was disabled. This led to code duplication in the generated pdb. --- ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index 8b798edb1..10c422d3a 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -286,8 +286,8 @@ namespace ICSharpCode.Decompiler.CSharp var methodSemantics = module.MethodSemanticsLookup.GetSemantics(methodHandle).Item2; if (methodSemantics != 0 && methodSemantics != System.Reflection.MethodSemanticsAttributes.Other) return true; - if (LocalFunctionDecompiler.IsLocalFunctionMethod(module, methodHandle)) - return settings.LocalFunctions; + if (settings.LocalFunctions && LocalFunctionDecompiler.IsLocalFunctionMethod(module, methodHandle)) + return true; if (settings.AnonymousMethods && methodHandle.HasGeneratedName(metadata) && methodHandle.IsCompilerGenerated(metadata)) return true; if (settings.AsyncAwait && AsyncAwaitDecompiler.IsCompilerGeneratedMainMethod(module, methodHandle)) @@ -299,8 +299,8 @@ namespace ICSharpCode.Decompiler.CSharp name = metadata.GetString(type.Name); if (!type.GetDeclaringType().IsNil) { - if (LocalFunctionDecompiler.IsLocalFunctionDisplayClass(module, typeHandle)) - return settings.LocalFunctions; + if (settings.LocalFunctions && LocalFunctionDecompiler.IsLocalFunctionDisplayClass(module, typeHandle)) + return true; if (settings.AnonymousMethods && IsClosureType(type, metadata)) return true; if (settings.YieldReturn && YieldReturnDecompiler.IsCompilerGeneratorEnumerator(typeHandle, metadata))