Browse Source

AssignVariableNames: Handle fixed statement special cases

pull/3243/head
Siegfried Pammer 10 months ago
parent
commit
3fb153940b
  1. 2
      ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
  2. 8
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/MonoFixed.cs
  3. 4
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/UnsafeCode.cs
  4. 13
      ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs

2
ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj

@ -93,6 +93,7 @@ @@ -93,6 +93,7 @@
<None Include="TestCases\ILPretty\GuessAccessors.cs" />
<None Include="TestCases\ILPretty\GuessAccessors.il" />
<None Include="TestCases\ILPretty\Issue2260SwitchString.il" />
<None Include="TestCases\ILPretty\MonoFixed.il" />
<None Include="TestCases\ILPretty\UnknownTypes.cs" />
<None Include="TestCases\ILPretty\UnknownTypes.il" />
<None Include="TestCases\ILPretty\EvalOrder.cs" />
@ -128,6 +129,7 @@ @@ -128,6 +129,7 @@
<Compile Include="Output\InsertParenthesesVisitorTests.cs" />
<Compile Include="ProjectDecompiler\TargetFrameworkTests.cs" />
<Compile Include="TestAssemblyResolver.cs" />
<Compile Include="TestCases\ILPretty\MonoFixed.cs" />
<Compile Include="Util\ResourceReaderWriterTests.cs" />
<None Include="TestCases\VBPretty\VBAutomaticEvents.vb" />
<Compile Include="TestCases\VBPretty\VBAutomaticEvents.cs" />

8
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/MonoFixed.cs

@ -6,13 +6,13 @@ public class MonoFixed @@ -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';
}
}
}

4
ICSharpCode.Decompiler.Tests/TestCases/Pretty/UnsafeCode.cs

@ -431,9 +431,9 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty @@ -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);
}
}

13
ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs

@ -326,6 +326,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -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 @@ -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 @@ -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 @@ -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;
}

Loading…
Cancel
Save