Browse Source

Fix special case bug in WriteParameters

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
a826ad4043
  1. 31
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

31
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -877,20 +877,25 @@ namespace ICSharpCode.Decompiler.Disassembler
{ {
int parameterOffset = parameters.Length > signature.ParameterTypes.Length ? 1 : 0; int parameterOffset = parameters.Length > signature.ParameterTypes.Length ? 1 : 0;
for (int i = 0; i < signature.ParameterTypes.Length; i++) { for (int i = 0; i < signature.ParameterTypes.Length; i++) {
var p = metadata.GetParameter(parameters[i + parameterOffset]); if (i + parameterOffset < parameters.Length) {
if ((p.Attributes & ParameterAttributes.In) == ParameterAttributes.In) var p = metadata.GetParameter(parameters[i + parameterOffset]);
output.Write("[in] "); if ((p.Attributes & ParameterAttributes.In) == ParameterAttributes.In)
if ((p.Attributes & ParameterAttributes.Out) == ParameterAttributes.Out) output.Write("[in] ");
output.Write("[out] "); if ((p.Attributes & ParameterAttributes.Out) == ParameterAttributes.Out)
if ((p.Attributes & ParameterAttributes.Optional) == ParameterAttributes.Optional) output.Write("[out] ");
output.Write("[opt] "); if ((p.Attributes & ParameterAttributes.Optional) == ParameterAttributes.Optional)
signature.ParameterTypes[i](ILNameSyntax.Signature); output.Write("[opt] ");
output.Write(' '); signature.ParameterTypes[i](ILNameSyntax.Signature);
var md = p.GetMarshallingDescriptor(); output.Write(' ');
if (!md.IsNil) { var md = p.GetMarshallingDescriptor();
WriteMarshalInfo(metadata.GetBlobReader(md)); if (!md.IsNil) {
WriteMarshalInfo(metadata.GetBlobReader(md));
}
output.WriteDefinition(DisassemblerHelpers.Escape(metadata.GetString(p.Name)), p);
} else {
signature.ParameterTypes[i](ILNameSyntax.Signature);
output.Write(" ''");
} }
output.WriteDefinition(DisassemblerHelpers.Escape(metadata.GetString(p.Name)), p);
if (i < signature.ParameterTypes.Length - 1) if (i < signature.ParameterTypes.Length - 1)
output.Write(','); output.Write(',');
output.WriteLine(); output.WriteLine();

Loading…
Cancel
Save