Browse Source

Support `byreflike` constraint

pull/3527/head
Jan Jones 5 months ago
parent
commit
4c08359a6a
  1. 6
      ICSharpCode.Decompiler.Tests/DisassemblerPrettyTestRunner.cs
  2. 1
      ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
  3. 45
      ICSharpCode.Decompiler.Tests/TestCases/Disassembler/Pretty/GenericConstraints.il
  4. 5
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

6
ICSharpCode.Decompiler.Tests/DisassemblerPrettyTestRunner.cs

@ -52,6 +52,12 @@ namespace ICSharpCode.Decompiler.Tests @@ -52,6 +52,12 @@ namespace ICSharpCode.Decompiler.Tests
}
}
[Test]
public async Task GenericConstraints()
{
await Run();
}
[Test]
public async Task SecurityDeclarations()
{

1
ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj

@ -91,6 +91,7 @@ @@ -91,6 +91,7 @@
<None Include="TestCases\Correctness\StackTests.il" />
<None Include="TestCases\Correctness\StackTypes.il" />
<None Include="TestCases\Correctness\Uninit.vb" />
<None Include="TestCases\Disassembler\Pretty\GenericConstraints.il" />
<None Include="TestCases\Disassembler\Pretty\InterfaceImplAttributes.il" />
<None Include="TestCases\Disassembler\Pretty\SortMembers.expected.il" />
<None Include="TestCases\Disassembler\Pretty\SortMembers.il" />

45
ICSharpCode.Decompiler.Tests/TestCases/Disassembler/Pretty/GenericConstraints.il

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
.assembly extern mscorlib
{
.publickeytoken = (
b7 7a 5c 56 19 34 e0 89
)
.ver 4:0:0:0
}
.assembly GenericConstraints
{
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = (
01 00 07 31 2e 30 2e 30 2e 30 00 00
)
.hash algorithm 0x00008004 // SHA1
.ver 1:0:0:0
}
.module GenericConstraints.dll
.imagebase 0x10000000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WindowsCui
.corflags 0x00000001 // ILOnly
.class private auto ansi '<Module>'
{
} // end of class <Module>
.class public auto ansi beforefieldinit TestType`1<byreflike T>
extends [mscorlib]System.Object
{
// Methods
.method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
// Method begins at RVA 0x2050
// Header size: 1
// Code size: 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method TestType::.ctor
} // end of class TestType

5
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -1733,6 +1733,11 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -1733,6 +1733,11 @@ namespace ICSharpCode.Decompiler.Disassembler
{
output.Write("valuetype ");
}
const GenericParameterAttributes allowByRefLike = (GenericParameterAttributes)0x0020;
if ((gp.Attributes & allowByRefLike) == allowByRefLike)
{
output.Write("byreflike ");
}
if ((gp.Attributes & GenericParameterAttributes.DefaultConstructorConstraint) == GenericParameterAttributes.DefaultConstructorConstraint)
{
output.Write(".ctor ");

Loading…
Cancel
Save