From 10ebe3e00e1baf5d10c3bd487d4e188ce277ef4a Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 18 Feb 2018 10:51:07 -0300 Subject: [PATCH] Fix WriteParameterReference --- .../Disassembler/DisassemblerHelpers.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs b/ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs index 72e0df9be..87f8cfdaf 100644 --- a/ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs +++ b/ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs @@ -133,13 +133,17 @@ namespace ICSharpCode.Decompiler.Disassembler { var metadata = method.Module.GetMetadataReader(); var methodDefinition = metadata.GetMethodDefinition(method.Handle); - var signatureHeader = methodDefinition.DecodeSignature(new FullTypeNameSignatureDecoder(metadata), default(Unit)).Header; - int index = signatureHeader.IsInstance && !signatureHeader.HasExplicitThis ? sequence - 1 : sequence; - var parameters = methodDefinition.GetParameters(); - if (index < 0 || index >= parameters.Count) { + var signature = methodDefinition.DecodeSignature(new FullTypeNameSignatureDecoder(metadata), default(Unit)); + var parameters = methodDefinition.GetParameters().Select(p => metadata.GetParameter(p)).ToArray(); + var signatureHeader = signature.Header; + int index = sequence; + if (signatureHeader.IsInstance && signature.ParameterTypes.Length == parameters.Length) { + index--; + } + if (index < 0 || index >= parameters.Length) { writer.Write(sequence.ToString()); } else { - var param = metadata.GetParameter(parameters.ElementAt(index)); + var param = parameters[index]; if (param.Name.IsNil) { writer.Write(sequence.ToString()); } else {