diff --git a/ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs b/ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs index 7efdf4107..1bc8681ca 100644 --- a/ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs +++ b/ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs @@ -40,12 +40,15 @@ namespace ICSharpCode.Decompiler.IL public static void WriteTo(this IType type, ITextOutput output, ILNameSyntax nameSyntax = ILNameSyntax.ShortTypeName) { - output.WriteReference(type.ToString(), type); + output.WriteReference(type.ReflectionName, type); } public static void WriteTo(this ISymbol symbol, ITextOutput output) { - output.WriteReference(symbol.Name, symbol); + if (symbol is IMethod method && method.IsConstructor) + output.WriteReference(method.DeclaringType?.Name + "." + method.Name, symbol); + else + output.WriteReference(symbol.Name, symbol); } } } diff --git a/ICSharpCode.Decompiler/IL/Instructions.cs b/ICSharpCode.Decompiler/IL/Instructions.cs index 4f8ab96eb..79cd405a4 100644 --- a/ICSharpCode.Decompiler/IL/Instructions.cs +++ b/ICSharpCode.Decompiler/IL/Instructions.cs @@ -2635,7 +2635,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, method); + method.WriteTo(output); } public override void AcceptVisitor(ILVisitor visitor) { @@ -2682,7 +2682,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, method); + method.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); @@ -2723,7 +2723,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); } public override void AcceptVisitor(ILVisitor visitor) { @@ -2761,7 +2761,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, member); + member.WriteTo(output); } public override void AcceptVisitor(ILVisitor visitor) { @@ -2894,7 +2894,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, field); + field.WriteTo(output); output.Write('('); this.target.WriteTo(output, options); output.Write(')'); @@ -2935,7 +2935,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, field); + field.WriteTo(output); } public override void AcceptVisitor(ILVisitor visitor) { @@ -2982,7 +2982,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); @@ -3023,7 +3023,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); @@ -3129,7 +3129,7 @@ namespace ICSharpCode.Decompiler.IL output.Write("unaligned(" + UnalignedPrefix + ")."); output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); this.target.WriteTo(output, options); output.Write(')'); @@ -3253,7 +3253,7 @@ namespace ICSharpCode.Decompiler.IL output.Write("unaligned(" + UnalignedPrefix + ")."); output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); this.target.WriteTo(output, options); output.Write(", "); @@ -3305,7 +3305,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); @@ -3355,7 +3355,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); @@ -3405,7 +3405,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); @@ -3515,7 +3515,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); bool first = true; foreach (var indices in Indices) { @@ -3560,7 +3560,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); } public override void AcceptVisitor(ILVisitor visitor) { @@ -3672,7 +3672,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); } public override void AcceptVisitor(ILVisitor visitor) { @@ -3859,7 +3859,7 @@ namespace ICSharpCode.Decompiler.IL output.Write("readonly."); output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); this.array.WriteTo(output, options); foreach (var indices in Indices) { @@ -3997,7 +3997,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); @@ -4075,7 +4075,7 @@ namespace ICSharpCode.Decompiler.IL { output.Write(OpCode); output.Write(' '); - Disassembler.DisassemblerHelpers.WriteOperand(output, type); + type.WriteTo(output); output.Write('('); Argument.WriteTo(output, options); output.Write(')'); diff --git a/ICSharpCode.Decompiler/IL/Instructions.tt b/ICSharpCode.Decompiler/IL/Instructions.tt index 3e1d0299c..0e77359bf 100644 --- a/ICSharpCode.Decompiler/IL/Instructions.tt +++ b/ICSharpCode.Decompiler/IL/Instructions.tt @@ -913,7 +913,7 @@ protected override void Disconnected() + "public IField Field { get { return field; } }"); opCode.GenerateWriteTo = true; opCode.WriteOperand.Add("output.Write(' ');"); - opCode.WriteOperand.Add("Disassembler.DisassemblerHelpers.WriteOperand(output, field);"); + opCode.WriteOperand.Add("field.WriteTo(output);"); opCode.Interfaces.Add("IInstructionWithFieldOperand"); }; @@ -927,7 +927,7 @@ protected override void Disconnected() + "public IType Type { get { return type; } }"); opCode.GenerateWriteTo = true; opCode.WriteOperand.Add("output.Write(' ');"); - opCode.WriteOperand.Add("Disassembler.DisassemblerHelpers.WriteOperand(output, type);"); + opCode.WriteOperand.Add("type.WriteTo(output);"); }; static Action HasMethodOperand = opCode => { @@ -940,7 +940,7 @@ protected override void Disconnected() + "public IMethod Method { get { return method; } }"); opCode.GenerateWriteTo = true; opCode.WriteOperand.Add("output.Write(' ');"); - opCode.WriteOperand.Add("Disassembler.DisassemblerHelpers.WriteOperand(output, method);"); + opCode.WriteOperand.Add("method.WriteTo(output);"); opCode.Interfaces.Add("IInstructionWithMethodOperand"); }; @@ -954,7 +954,7 @@ protected override void Disconnected() + "public IMember Member { get { return member; } }"); opCode.GenerateWriteTo = true; opCode.WriteOperand.Add("output.Write(' ');"); - opCode.WriteOperand.Add("Disassembler.DisassemblerHelpers.WriteOperand(output, member);"); + opCode.WriteOperand.Add("member.WriteTo(output);"); }; // LoadConstant trait: the instruction loads a compile-time constant. Implies NoArguments.