From 3fb153940b169637b4d4028c4eb85ff9e76ba692 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 21 Jul 2024 23:08:27 +0200 Subject: [PATCH] AssignVariableNames: Handle fixed statement special cases --- .../ICSharpCode.Decompiler.Tests.csproj | 2 ++ .../TestCases/ILPretty/MonoFixed.cs | 8 ++++---- .../TestCases/Pretty/UnsafeCode.cs | 4 ++-- .../IL/Transforms/AssignVariableNames.cs | 13 +++++++++++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj index 697ca18d9..f1b1e5777 100644 --- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj +++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj @@ -93,6 +93,7 @@ + @@ -128,6 +129,7 @@ + diff --git a/ICSharpCode.Decompiler.Tests/TestCases/ILPretty/MonoFixed.cs b/ICSharpCode.Decompiler.Tests/TestCases/ILPretty/MonoFixed.cs index f3ad7c389..c420c9d41 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/ILPretty/MonoFixed.cs +++ b/ICSharpCode.Decompiler.Tests/TestCases/ILPretty/MonoFixed.cs @@ -6,13 +6,13 @@ public class MonoFixed { fixed (char* ptr = text) { - fixed (char* ptr2 = Environment.UserName) + fixed (char* userName = Environment.UserName) { - fixed (char* ptr3 = text) + fixed (char* ptr2 = text) { *ptr = 'c'; - *ptr2 = 'd'; - *ptr3 = 'e'; + *userName = 'd'; + *ptr2 = 'e'; } } } diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/UnsafeCode.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/UnsafeCode.cs index 9901fd69e..3b993096e 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/UnsafeCode.cs +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/UnsafeCode.cs @@ -431,9 +431,9 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty public unsafe void PinFixedMember(ref StructWithFixedSizeMembers m) { - fixed (int* ptr = m.Integers) + fixed (int* integers = m.Integers) { - UsePointer(ptr); + UsePointer(integers); } } diff --git a/ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs b/ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs index d84091d9d..108b1aa80 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs @@ -326,6 +326,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms { switch (arg) { + case GetPinnableReference _: case LdObj _: case LdFlda _: case LdsFlda _: @@ -431,6 +432,12 @@ namespace ICSharpCode.Decompiler.IL.Transforms if (!currentLowerCaseTypeOrMemberNames.Contains(name)) proposedNameForStores.Add(name); } + else if (store is PinnedRegion pinnedRegion) + { + var name = GetNameFromInstruction(pinnedRegion.Init); + if (!currentLowerCaseTypeOrMemberNames.Contains(name)) + proposedNameForStores.Add(name); + } } if (proposedNameForStores.Count == 1) { @@ -485,9 +492,13 @@ namespace ICSharpCode.Decompiler.IL.Transforms { switch (inst) { + case GetPinnableReference getPinnableReference: + return GetNameFromInstruction(getPinnableReference.Argument); case LdObj ldobj: return GetNameFromInstruction(ldobj.Target); case LdFlda ldflda: + if (ldflda.Field.IsCompilerGeneratedOrIsInCompilerGeneratedClass()) + return GetNameFromInstruction(ldflda.Target); return CleanUpVariableName(ldflda.Field.Name); case LdsFlda ldsflda: return CleanUpVariableName(ldsflda.Field.Name); @@ -567,6 +578,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms return true; if (m.Name == "Concat" && m.DeclaringType.IsKnownType(KnownTypeCode.String)) return true; + if (m.Name == "GetPinnableReference") + return true; return false; }