Browse Source

Bracket ILAst WriteTo in one place via WriteToCore

The debug-step node bracket (MarkNodeStart/try/finally/MarkNodeEnd) was copied
into every hand-written WriteTo override and re-emitted by the T4 generator, so
a newly added instruction could silently omit it and lose step highlighting with
no compile error or test failure. Seal WriteTo on ILInstruction to apply the
bracket once and delegate to a new abstract WriteToCore; move every override
(hand-written and generated) to WriteToCore without the wrapper. Rendered output
is unchanged -- the marks are no-ops unless the output tracks nodes.

Assisted-by: Claude:claude-opus-4-8:Claude Code
pull/3847/head
Siegfried Pammer 7 days ago committed by Siegfried Pammer
parent
commit
468e3da92c
  1. 301
      ICSharpCode.Decompiler/IL/Instructions.cs
  2. 8
      ICSharpCode.Decompiler/IL/Instructions.tt
  3. 10
      ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs
  4. 10
      ICSharpCode.Decompiler/IL/Instructions/Block.cs
  5. 10
      ICSharpCode.Decompiler/IL/Instructions/BlockContainer.cs
  6. 10
      ICSharpCode.Decompiler/IL/Instructions/Branch.cs
  7. 10
      ICSharpCode.Decompiler/IL/Instructions/CallIndirect.cs
  8. 10
      ICSharpCode.Decompiler/IL/Instructions/CallInstruction.cs
  9. 10
      ICSharpCode.Decompiler/IL/Instructions/Comp.cs
  10. 30
      ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs
  11. 10
      ICSharpCode.Decompiler/IL/Instructions/Conv.cs
  12. 10
      ICSharpCode.Decompiler/IL/Instructions/DeconstructInstruction.cs
  13. 10
      ICSharpCode.Decompiler/IL/Instructions/DeconstructResultInstruction.cs
  14. 120
      ICSharpCode.Decompiler/IL/Instructions/DynamicInstructions.cs
  15. 10
      ICSharpCode.Decompiler/IL/Instructions/ExpressionTreeCast.cs
  16. 10
      ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs
  17. 24
      ICSharpCode.Decompiler/IL/Instructions/ILInstruction.cs
  18. 10
      ICSharpCode.Decompiler/IL/Instructions/IfInstruction.cs
  19. 10
      ICSharpCode.Decompiler/IL/Instructions/LdLen.cs
  20. 10
      ICSharpCode.Decompiler/IL/Instructions/Leave.cs
  21. 10
      ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs
  22. 10
      ICSharpCode.Decompiler/IL/Instructions/MatchInstruction.cs
  23. 20
      ICSharpCode.Decompiler/IL/Instructions/MemoryInstructions.cs
  24. 10
      ICSharpCode.Decompiler/IL/Instructions/NullCoalescingInstruction.cs
  25. 10
      ICSharpCode.Decompiler/IL/Instructions/NullableInstructions.cs
  26. 40
      ICSharpCode.Decompiler/IL/Instructions/SimpleInstruction.cs
  27. 10
      ICSharpCode.Decompiler/IL/Instructions/StringToInt.cs
  28. 20
      ICSharpCode.Decompiler/IL/Instructions/SwitchInstruction.cs
  29. 40
      ICSharpCode.Decompiler/IL/Instructions/TryInstruction.cs
  30. 10
      ICSharpCode.Decompiler/IL/Instructions/UnaryInstruction.cs
  31. 10
      ICSharpCode.Decompiler/IL/Instructions/UsingInstruction.cs

301
ICSharpCode.Decompiler/IL/Instructions.cs

@ -370,10 +370,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None; return InstructionFlags.None;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -381,8 +378,6 @@ namespace ICSharpCode.Decompiler.IL
this.argument.WriteTo(output, options); this.argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
} }
} }
namespace ICSharpCode.Decompiler.IL namespace ICSharpCode.Decompiler.IL
@ -471,10 +466,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None; return InstructionFlags.None;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -484,8 +476,6 @@ namespace ICSharpCode.Decompiler.IL
this.right.WriteTo(output, options); this.right.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
} }
} }
namespace ICSharpCode.Decompiler.IL namespace ICSharpCode.Decompiler.IL
@ -634,10 +624,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None; return InstructionFlags.None;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -647,8 +634,6 @@ namespace ICSharpCode.Decompiler.IL
this.value.WriteTo(output, options); this.value.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
} }
} }
namespace ICSharpCode.Decompiler.IL namespace ICSharpCode.Decompiler.IL
@ -1024,10 +1009,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayWriteLocals; return InstructionFlags.MayWriteLocals;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -1039,8 +1021,6 @@ namespace ICSharpCode.Decompiler.IL
this.body.WriteTo(output, options); this.body.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitPinnedRegion(this); visitor.VisitPinnedRegion(this);
@ -2359,18 +2339,13 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayReadLocals; return InstructionFlags.MayReadLocals;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
variable.WriteTo(output); variable.WriteTo(output);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdLoc(this); visitor.VisitLdLoc(this);
@ -2438,18 +2413,13 @@ namespace ICSharpCode.Decompiler.IL
base.Disconnected(); base.Disconnected();
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
variable.WriteTo(output); variable.WriteTo(output);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdLoca(this); visitor.VisitLdLoca(this);
@ -2578,10 +2548,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayWriteLocals; return InstructionFlags.MayWriteLocals;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -2591,8 +2558,6 @@ namespace ICSharpCode.Decompiler.IL
this.value.WriteTo(output, options); this.value.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitStLoc(this); visitor.VisitStLoc(this);
@ -2688,10 +2653,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None; return InstructionFlags.None;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -2701,8 +2663,6 @@ namespace ICSharpCode.Decompiler.IL
this.value.WriteTo(output, options); this.value.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitAddressOf(this); visitor.VisitAddressOf(this);
@ -2858,18 +2818,13 @@ namespace ICSharpCode.Decompiler.IL
} }
public readonly string Value; public readonly string Value;
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, Value); Disassembler.DisassemblerHelpers.WriteOperand(output, Value);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdStr(this); visitor.VisitLdStr(this);
@ -2900,18 +2855,13 @@ namespace ICSharpCode.Decompiler.IL
} }
public readonly string Value; public readonly string Value;
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, Value); Disassembler.DisassemblerHelpers.WriteOperand(output, Value);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdStrUtf8(this); visitor.VisitLdStrUtf8(this);
@ -2942,18 +2892,13 @@ namespace ICSharpCode.Decompiler.IL
} }
public readonly int Value; public readonly int Value;
public override StackType ResultType { get { return StackType.I4; } } public override StackType ResultType { get { return StackType.I4; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, Value); Disassembler.DisassemblerHelpers.WriteOperand(output, Value);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdcI4(this); visitor.VisitLdcI4(this);
@ -2984,18 +2929,13 @@ namespace ICSharpCode.Decompiler.IL
} }
public readonly long Value; public readonly long Value;
public override StackType ResultType { get { return StackType.I8; } } public override StackType ResultType { get { return StackType.I8; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, Value); Disassembler.DisassemblerHelpers.WriteOperand(output, Value);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdcI8(this); visitor.VisitLdcI8(this);
@ -3026,18 +2966,13 @@ namespace ICSharpCode.Decompiler.IL
} }
public readonly float Value; public readonly float Value;
public override StackType ResultType { get { return StackType.F4; } } public override StackType ResultType { get { return StackType.F4; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, Value); Disassembler.DisassemblerHelpers.WriteOperand(output, Value);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdcF4(this); visitor.VisitLdcF4(this);
@ -3068,18 +3003,13 @@ namespace ICSharpCode.Decompiler.IL
} }
public readonly double Value; public readonly double Value;
public override StackType ResultType { get { return StackType.F8; } } public override StackType ResultType { get { return StackType.F8; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, Value); Disassembler.DisassemblerHelpers.WriteOperand(output, Value);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdcF8(this); visitor.VisitLdcF8(this);
@ -3110,18 +3040,13 @@ namespace ICSharpCode.Decompiler.IL
} }
public readonly decimal Value; public readonly decimal Value;
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, Value); Disassembler.DisassemblerHelpers.WriteOperand(output, Value);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdcDecimal(this); visitor.VisitLdcDecimal(this);
@ -3182,10 +3107,7 @@ namespace ICSharpCode.Decompiler.IL
/// <summary>Returns the method operand.</summary> /// <summary>Returns the method operand.</summary>
public IMethod Method => method; public IMethod Method => method;
public override StackType ResultType { get { return StackType.I; } } public override StackType ResultType { get { return StackType.I; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -3195,8 +3117,6 @@ namespace ICSharpCode.Decompiler.IL
method.WriteTo(output); method.WriteTo(output);
} }
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdFtn(this); visitor.VisitLdFtn(this);
@ -3238,10 +3158,7 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow; return base.DirectFlags | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -3254,8 +3171,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdVirtFtn(this); visitor.VisitLdVirtFtn(this);
@ -3304,10 +3219,7 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow; return base.DirectFlags | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -3322,8 +3234,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdVirtDelegate(this); visitor.VisitLdVirtDelegate(this);
@ -3359,18 +3269,13 @@ namespace ICSharpCode.Decompiler.IL
set { type = value; InvalidateFlags(); } set { type = value; InvalidateFlags(); }
} }
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
type.WriteTo(output); type.WriteTo(output);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdTypeToken(this); visitor.VisitLdTypeToken(this);
@ -3403,18 +3308,13 @@ namespace ICSharpCode.Decompiler.IL
/// <summary>Returns the token operand.</summary> /// <summary>Returns the token operand.</summary>
public IMember Member { get { return member; } } public IMember Member { get { return member; } }
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
member.WriteTo(output); member.WriteTo(output);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdMemberToken(this); visitor.VisitLdMemberToken(this);
@ -3496,10 +3396,7 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow; return base.DirectFlags | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -3509,8 +3406,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLocAllocSpan(this); visitor.VisitLocAllocSpan(this);
@ -3639,10 +3534,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayThrow | InstructionFlags.SideEffect; return InstructionFlags.MayThrow | InstructionFlags.SideEffect;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (IsVolatile) if (IsVolatile)
@ -3658,8 +3550,6 @@ namespace ICSharpCode.Decompiler.IL
this.size.WriteTo(output, options); this.size.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitCpblk(this); visitor.VisitCpblk(this);
@ -3795,10 +3685,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayThrow | InstructionFlags.SideEffect; return InstructionFlags.MayThrow | InstructionFlags.SideEffect;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (IsVolatile) if (IsVolatile)
@ -3814,8 +3701,6 @@ namespace ICSharpCode.Decompiler.IL
this.size.WriteTo(output, options); this.size.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitInitblk(this); visitor.VisitInitblk(this);
@ -3916,10 +3801,7 @@ namespace ICSharpCode.Decompiler.IL
return (DelayExceptions ? InstructionFlags.None : InstructionFlags.MayThrow); return (DelayExceptions ? InstructionFlags.None : InstructionFlags.MayThrow);
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (DelayExceptions) if (DelayExceptions)
@ -3931,8 +3813,6 @@ namespace ICSharpCode.Decompiler.IL
this.target.WriteTo(output, options); this.target.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdFlda(this); visitor.VisitLdFlda(this);
@ -3965,18 +3845,13 @@ namespace ICSharpCode.Decompiler.IL
readonly IField @field; readonly IField @field;
/// <summary>Returns the field operand.</summary> /// <summary>Returns the field operand.</summary>
public IField Field { get { return @field; } } public IField Field { get { return @field; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
@field.WriteTo(output); @field.WriteTo(output);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdsFlda(this); visitor.VisitLdsFlda(this);
@ -4021,10 +3896,7 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow; return base.DirectFlags | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -4034,8 +3906,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitCastClass(this); visitor.VisitCastClass(this);
@ -4071,10 +3941,7 @@ namespace ICSharpCode.Decompiler.IL
set { type = value; InvalidateFlags(); } set { type = value; InvalidateFlags(); }
} }
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -4084,8 +3951,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitIsInst(this); visitor.VisitIsInst(this);
@ -4299,10 +4164,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.SideEffect | InstructionFlags.MayThrow; return InstructionFlags.SideEffect | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -4312,8 +4174,6 @@ namespace ICSharpCode.Decompiler.IL
this.target.WriteTo(output, options); this.target.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdObjIfRef(this); visitor.VisitLdObjIfRef(this);
@ -4495,10 +4355,7 @@ namespace ICSharpCode.Decompiler.IL
set { type = value; InvalidateFlags(); } set { type = value; InvalidateFlags(); }
} }
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -4508,8 +4365,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitBox(this); visitor.VisitBox(this);
@ -4554,10 +4409,7 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow; return base.DirectFlags | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -4567,8 +4419,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitUnbox(this); visitor.VisitUnbox(this);
@ -4613,10 +4463,7 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.SideEffect | InstructionFlags.MayThrow; return base.DirectFlags | InstructionFlags.SideEffect | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -4626,8 +4473,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitUnboxAny(this); visitor.VisitUnboxAny(this);
@ -4735,10 +4580,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayThrow; return InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -4756,8 +4598,6 @@ namespace ICSharpCode.Decompiler.IL
} }
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitNewArr(this); visitor.VisitNewArr(this);
@ -4793,18 +4633,13 @@ namespace ICSharpCode.Decompiler.IL
set { type = value; InvalidateFlags(); } set { type = value; InvalidateFlags(); }
} }
public override StackType ResultType { get { return type.GetStackType(); } } public override StackType ResultType { get { return type.GetStackType(); } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
type.WriteTo(output); type.WriteTo(output);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitDefaultValue(this); visitor.VisitDefaultValue(this);
@ -4914,18 +4749,13 @@ namespace ICSharpCode.Decompiler.IL
set { type = value; InvalidateFlags(); } set { type = value; InvalidateFlags(); }
} }
public override StackType ResultType { get { return StackType.I4; } } public override StackType ResultType { get { return StackType.I4; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
type.WriteTo(output); type.WriteTo(output);
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitSizeOf(this); visitor.VisitSizeOf(this);
@ -5120,10 +4950,7 @@ namespace ICSharpCode.Decompiler.IL
return (DelayExceptions ? InstructionFlags.None : InstructionFlags.MayThrow); return (DelayExceptions ? InstructionFlags.None : InstructionFlags.MayThrow);
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (WithSystemIndex) if (WithSystemIndex)
@ -5144,8 +4971,6 @@ namespace ICSharpCode.Decompiler.IL
} }
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdElema(this); visitor.VisitLdElema(this);
@ -5250,10 +5075,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayThrow; return InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (IsReadOnly) if (IsReadOnly)
@ -5270,8 +5092,6 @@ namespace ICSharpCode.Decompiler.IL
} }
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitLdElemaInlineArray(this); visitor.VisitLdElemaInlineArray(this);
@ -5368,10 +5188,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None; return InstructionFlags.None;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -5384,8 +5201,6 @@ namespace ICSharpCode.Decompiler.IL
this.argument.WriteTo(output, options); this.argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitGetPinnableReference(this); visitor.VisitGetPinnableReference(this);
@ -5621,10 +5436,7 @@ namespace ICSharpCode.Decompiler.IL
clone.Right = this.right.Clone(); clone.Right = this.right.Clone();
return clone; return clone;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -5639,8 +5451,6 @@ namespace ICSharpCode.Decompiler.IL
this.right.WriteTo(output, options); this.right.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitUserDefinedLogicOperator(this); visitor.VisitUserDefinedLogicOperator(this);
@ -6823,10 +6633,7 @@ namespace ICSharpCode.Decompiler.IL
set { type = value; InvalidateFlags(); } set { type = value; InvalidateFlags(); }
} }
public override StackType ResultType { get { return StackType.O; } } public override StackType ResultType { get { return StackType.O; } }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -6836,8 +6643,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitMakeRefAny(this); visitor.VisitMakeRefAny(this);
@ -6910,10 +6715,7 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow; return base.DirectFlags | InstructionFlags.MayThrow;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -6923,8 +6725,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitRefAnyValue(this); visitor.VisitRefAnyValue(this);
@ -7013,10 +6813,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayBranch | InstructionFlags.SideEffect; return InstructionFlags.MayBranch | InstructionFlags.SideEffect;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -7024,8 +6821,6 @@ namespace ICSharpCode.Decompiler.IL
this.value.WriteTo(output, options); this.value.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitYieldReturn(this); visitor.VisitYieldReturn(this);
@ -7114,10 +6909,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.SideEffect; return InstructionFlags.SideEffect;
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -7125,8 +6917,6 @@ namespace ICSharpCode.Decompiler.IL
this.value.WriteTo(output, options); this.value.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
public override void AcceptVisitor(ILVisitor visitor) public override void AcceptVisitor(ILVisitor visitor)
{ {
visitor.VisitAwait(this); visitor.VisitAwait(this);
@ -7239,18 +7029,13 @@ namespace ICSharpCode.Decompiler.IL.Patterns
var clone = (AnyNode)ShallowClone(); var clone = (AnyNode)ShallowClone();
return clone; return clone;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write('('); output.Write('(');
output.Write(')'); output.Write(')');
} }
finally { output.MarkNodeEnd(this); }
}
} }
} }

8
ICSharpCode.Decompiler/IL/Instructions.tt

@ -429,12 +429,8 @@ namespace <#=opCode.Namespace#>
void OriginalWriteTo(ITextOutput output, ILAstWritingOptions options) void OriginalWriteTo(ITextOutput output, ILAstWritingOptions options)
{<#=Body(opCode.WriteToBody)#>} {<#=Body(opCode.WriteToBody)#>}
<# } else { #> <# } else { #>
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{ {<#=Body(opCode.WriteToBody)#>}
output.MarkNodeStart(this);
try {<#=Body(opCode.WriteToBody)#>}
finally { output.MarkNodeEnd(this); }
}
<# } #> <# } #>
<# } #> <# } #>
<# if (opCode.GenerateAcceptVisitor) { #> <# if (opCode.GenerateAcceptVisitor) { #>

10
ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs

@ -184,10 +184,7 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -216,10 +213,5 @@ namespace ICSharpCode.Decompiler.IL
Right.WriteTo(output, options); Right.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/Block.cs

@ -258,10 +258,7 @@ namespace ICSharpCode.Decompiler.IL
get { return Disassembler.DisassemblerHelpers.OffsetToString(this.StartILOffset); } get { return Disassembler.DisassemblerHelpers.OffsetToString(this.StartILOffset); }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("Block "); output.Write("Block ");
@ -295,11 +292,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write("}"); output.Write("}");
output.MarkFoldEnd(); output.MarkFoldEnd();
} }
finally
{
output.MarkNodeEnd(this);
}
}
protected override int GetChildCount() protected override int GetChildCount()
{ {

10
ICSharpCode.Decompiler/IL/Instructions/BlockContainer.cs

@ -125,10 +125,7 @@ namespace ICSharpCode.Decompiler.IL
entryPoint.IncomingEdgeCount--; entryPoint.IncomingEdgeCount--;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.WriteLocalReference("BlockContainer", this, isDefinition: true); output.WriteLocalReference("BlockContainer", this, isDefinition: true);
@ -172,11 +169,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write("}"); output.Write("}");
output.MarkFoldEnd(); output.MarkFoldEnd();
} }
finally
{
output.MarkNodeEnd(this);
}
}
protected override int GetChildCount() protected override int GetChildCount()
{ {

10
ICSharpCode.Decompiler/IL/Instructions/Branch.cs

@ -118,21 +118,13 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' '); output.Write(' ');
output.WriteLocalReference(TargetLabel, (object?)targetBlock ?? TargetILOffset); output.WriteLocalReference(TargetLabel, (object?)targetBlock ?? TargetILOffset);
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
interface IBranchOrLeaveInstruction interface IBranchOrLeaveInstruction

10
ICSharpCode.Decompiler/IL/Instructions/CallIndirect.cs

@ -74,10 +74,7 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(Arguments.Count == FunctionPointerType.ParameterTypes.Length + (IsInstance ? 1 : 0)); Debug.Assert(Arguments.Count == FunctionPointerType.ParameterTypes.Length + (IsInstance ? 1 : 0));
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("call.indirect "); output.Write("call.indirect ");
@ -100,11 +97,6 @@ namespace ICSharpCode.Decompiler.IL
if (Arguments.Count > 0) if (Arguments.Count > 0)
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
protected override int GetChildCount() protected override int GetChildCount()
{ {

10
ICSharpCode.Decompiler/IL/Instructions/CallInstruction.cs

@ -138,10 +138,7 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (ConstrainedTo != null) if (ConstrainedTo != null)
@ -164,11 +161,6 @@ namespace ICSharpCode.Decompiler.IL
} }
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
protected internal sealed override bool PerformMatch(ILInstruction? other, ref Patterns.Match match) protected internal sealed override bool PerformMatch(ILInstruction? other, ref Patterns.Match match)
{ {

10
ICSharpCode.Decompiler/IL/Instructions/Comp.cs

@ -179,10 +179,7 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (options.UseLogicOperationSugar && MatchLogicNot(out var arg)) if (options.UseLogicOperationSugar && MatchLogicNot(out var arg))
@ -221,11 +218,6 @@ namespace ICSharpCode.Decompiler.IL
Right.WriteTo(output, options); Right.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
public static Comp LogicNot(ILInstruction arg) public static Comp LogicNot(ILInstruction arg)
{ {

30
ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs

@ -272,10 +272,7 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -305,11 +302,6 @@ namespace ICSharpCode.Decompiler.IL
Value.WriteTo(output, options); Value.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
public partial class UserDefinedCompoundAssign : CompoundAssignmentInstruction public partial class UserDefinedCompoundAssign : CompoundAssignmentInstruction
@ -344,10 +336,7 @@ namespace ICSharpCode.Decompiler.IL
public override StackType ResultType => Method.ReturnType.GetStackType(); public override StackType ResultType => Method.ReturnType.GetStackType();
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -360,11 +349,6 @@ namespace ICSharpCode.Decompiler.IL
this.Value.WriteTo(output, options); this.Value.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
public partial class DynamicCompoundAssign : CompoundAssignmentInstruction public partial class DynamicCompoundAssign : CompoundAssignmentInstruction
@ -388,10 +372,7 @@ namespace ICSharpCode.Decompiler.IL
this.ValueArgumentInfo = valueArgumentInfo; this.ValueArgumentInfo = valueArgumentInfo;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -401,11 +382,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(' '); output.Write(' ');
DynamicInstruction.WriteArgumentList(output, options, (Target, TargetArgumentInfo), (Value, ValueArgumentInfo)); DynamicInstruction.WriteArgumentList(output, options, (Target, TargetArgumentInfo), (Value, ValueArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
internal static bool IsExpressionTypeSupported(ExpressionType type) internal static bool IsExpressionTypeSupported(ExpressionType type)
{ {

10
ICSharpCode.Decompiler/IL/Instructions/Conv.cs

@ -314,10 +314,7 @@ namespace ICSharpCode.Decompiler.IL
get => TargetType.GetStackType(); get => TargetType.GetStackType();
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -358,11 +355,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
protected override InstructionFlags ComputeFlags() protected override InstructionFlags ComputeFlags()
{ {

10
ICSharpCode.Decompiler/IL/Instructions/DeconstructInstruction.cs

@ -159,10 +159,7 @@ namespace ICSharpCode.Decompiler.IL
assignments.ChildIndex = Init.Count + 2; assignments.ChildIndex = Init.Count + 2;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("deconstruct "); output.Write("deconstruct ");
@ -192,11 +189,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write('}'); output.Write('}');
output.MarkFoldEnd(); output.MarkFoldEnd();
} }
finally
{
output.MarkNodeEnd(this);
}
}
internal static bool IsConversionStLoc(ILInstruction inst, out ILVariable variable, out ILVariable inputVariable) internal static bool IsConversionStLoc(ILInstruction inst, out ILVariable variable, out ILVariable inputVariable)
{ {

10
ICSharpCode.Decompiler/IL/Instructions/DeconstructResultInstruction.cs

@ -37,10 +37,7 @@ namespace ICSharpCode.Decompiler.IL
ResultType = resultType; ResultType = resultType;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -50,11 +47,6 @@ namespace ICSharpCode.Decompiler.IL
this.Argument.WriteTo(output, options); this.Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
MatchInstruction? FindMatch() MatchInstruction? FindMatch()
{ {

120
ICSharpCode.Decompiler/IL/Instructions/DynamicInstructions.cs

@ -130,10 +130,7 @@ namespace ICSharpCode.Decompiler.IL
partial class DynamicConvertInstruction partial class DynamicConvertInstruction
{ {
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -144,11 +141,6 @@ namespace ICSharpCode.Decompiler.IL
argument.WriteTo(output, options); argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
public DynamicConvertInstruction(CSharpBinderFlags binderFlags, IType type, IType? context, ILInstruction argument) public DynamicConvertInstruction(CSharpBinderFlags binderFlags, IType type, IType? context, ILInstruction argument)
: base(OpCode.DynamicConvertInstruction, binderFlags, context) : base(OpCode.DynamicConvertInstruction, binderFlags, context)
@ -190,10 +182,7 @@ namespace ICSharpCode.Decompiler.IL
Arguments.AddRange(arguments); Arguments.AddRange(arguments);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -215,11 +204,6 @@ namespace ICSharpCode.Decompiler.IL
} }
WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo)); WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -244,10 +228,7 @@ namespace ICSharpCode.Decompiler.IL
Target = target; Target = target;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -256,11 +237,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(Name); output.Write(Name);
WriteArgumentList(output, options, (Target, TargetArgumentInfo)); WriteArgumentList(output, options, (Target, TargetArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -288,10 +264,7 @@ namespace ICSharpCode.Decompiler.IL
Value = value; Value = value;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -300,11 +273,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(Name); output.Write(Name);
WriteArgumentList(output, options, (Target, TargetArgumentInfo), (Value, ValueArgumentInfo)); WriteArgumentList(output, options, (Target, TargetArgumentInfo), (Value, ValueArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -334,10 +302,7 @@ namespace ICSharpCode.Decompiler.IL
Arguments.AddRange(arguments); Arguments.AddRange(arguments);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -346,11 +311,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write("get_Item"); output.Write("get_Item");
WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo)); WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -374,10 +334,7 @@ namespace ICSharpCode.Decompiler.IL
Arguments.AddRange(arguments); Arguments.AddRange(arguments);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -386,11 +343,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write("set_Item"); output.Write("set_Item");
WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo)); WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -417,10 +369,7 @@ namespace ICSharpCode.Decompiler.IL
this.resultType = type; this.resultType = type;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -430,11 +379,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(".ctor"); output.Write(".ctor");
WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo)); WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => resultType?.GetStackType() ?? StackType.Unknown; public override StackType ResultType => resultType?.GetStackType() ?? StackType.Unknown;
@ -462,10 +406,7 @@ namespace ICSharpCode.Decompiler.IL
Right = right; Right = right;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -474,11 +415,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(Operation.ToString()); output.Write(Operation.ToString());
WriteArgumentList(output, options, (Left, LeftArgumentInfo), (Right, RightArgumentInfo)); WriteArgumentList(output, options, (Left, LeftArgumentInfo), (Right, RightArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -512,10 +448,7 @@ namespace ICSharpCode.Decompiler.IL
Right = right; Right = right;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -524,11 +457,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(Operation.ToString()); output.Write(Operation.ToString());
WriteArgumentList(output, options, (Left, LeftArgumentInfo), (Right, RightArgumentInfo)); WriteArgumentList(output, options, (Left, LeftArgumentInfo), (Right, RightArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -567,10 +495,7 @@ namespace ICSharpCode.Decompiler.IL
Operand = operand; Operand = operand;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -579,11 +504,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(Operation.ToString()); output.Write(Operation.ToString());
WriteArgumentList(output, options, (Operand, OperandArgumentInfo)); WriteArgumentList(output, options, (Operand, OperandArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType { public override StackType ResultType {
get { get {
@ -622,10 +542,7 @@ namespace ICSharpCode.Decompiler.IL
Arguments.AddRange(arguments); Arguments.AddRange(arguments);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -633,11 +550,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(' '); output.Write(' ');
WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo)); WriteArgumentList(output, options, Arguments.Zip(ArgumentInfo));
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.O; public override StackType ResultType => StackType.O;
@ -660,10 +572,7 @@ namespace ICSharpCode.Decompiler.IL
Argument = argument; Argument = argument;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -673,11 +582,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType => StackType.I4; public override StackType ResultType => StackType.I4;

10
ICSharpCode.Decompiler/IL/Instructions/ExpressionTreeCast.cs

@ -14,10 +14,7 @@ namespace ICSharpCode.Decompiler.IL
this.IsChecked = isChecked; this.IsChecked = isChecked;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -29,10 +26,5 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs

@ -270,10 +270,7 @@ namespace ICSharpCode.Decompiler.IL
throw new NotSupportedException("ILFunction.CloneVariables is currently not supported!"); throw new NotSupportedException("ILFunction.CloneVariables is currently not supported!");
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -353,11 +350,6 @@ namespace ICSharpCode.Decompiler.IL
output.Unindent(); output.Unindent();
output.WriteLine("}"); output.WriteLine("}");
} }
finally
{
output.MarkNodeEnd(this);
}
}
LongSet FindUnusedILRanges() LongSet FindUnusedILRanges()
{ {

24
ICSharpCode.Decompiler/IL/Instructions/ILInstruction.cs

@ -383,9 +383,29 @@ namespace ICSharpCode.Decompiler.IL
} }
/// <summary> /// <summary>
/// Writes the ILAst to the text output. /// Writes the ILAst to the text output. Brackets the instruction's rendered span so it can be
/// mapped back to its character range for debug-step highlighting; the bracket lives here, in
/// one place, so a new instruction cannot forget it. Override <see cref="WriteToCore"/> to
/// render an instruction, not this method. Both marks are no-ops unless the output tracks nodes.
/// </summary> /// </summary>
public abstract void WriteTo(ITextOutput output, ILAstWritingOptions options); public void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{
WriteToCore(output, options);
}
finally
{
output.MarkNodeEnd(this);
}
}
/// <summary>
/// Renders this instruction to the text output. This is the override point; callers use
/// <see cref="WriteTo"/>, which wraps this in the node-tracking bracket.
/// </summary>
protected abstract void WriteToCore(ITextOutput output, ILAstWritingOptions options);
public override string ToString() public override string ToString()
{ {

10
ICSharpCode.Decompiler/IL/Instructions/IfInstruction.cs

@ -82,10 +82,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.ControlFlow | condition.Flags | SemanticHelper.CombineBranches(trueInst.Flags, falseInst.Flags); return InstructionFlags.ControlFlow | condition.Flags | SemanticHelper.CombineBranches(trueInst.Flags, falseInst.Flags);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (options.UseLogicOperationSugar) if (options.UseLogicOperationSugar)
@ -120,11 +117,6 @@ namespace ICSharpCode.Decompiler.IL
falseInst.WriteTo(output, options); falseInst.WriteTo(output, options);
} }
} }
finally
{
output.MarkNodeEnd(this);
}
}
/// <summary> /// <summary>
/// Gets whether the input instruction occurs in a context where it is being compared with 0. /// Gets whether the input instruction occurs in a context where it is being compared with 0.

10
ICSharpCode.Decompiler/IL/Instructions/LdLen.cs

@ -39,10 +39,7 @@ namespace ICSharpCode.Decompiler.IL
get { return resultType; } get { return resultType; }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -52,10 +49,5 @@ namespace ICSharpCode.Decompiler.IL
this.array.WriteTo(output, options); this.array.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/Leave.cs

@ -114,10 +114,7 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(phase <= ILPhase.InILReader || phase == ILPhase.InAsyncAwait || value.ResultType == targetContainer!.ResultType); Debug.Assert(phase <= ILPhase.InILReader || phase == ILPhase.InAsyncAwait || value.ResultType == targetContainer!.ResultType);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -130,10 +127,5 @@ namespace ICSharpCode.Decompiler.IL
output.Write(')'); output.Write(')');
} }
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs

@ -27,10 +27,7 @@ namespace ICSharpCode.Decompiler.IL
{ {
partial class LockInstruction partial class LockInstruction
{ {
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("lock ("); output.Write("lock (");
@ -42,10 +39,5 @@ namespace ICSharpCode.Decompiler.IL
output.WriteLine(); output.WriteLine();
output.Write("}"); output.Write("}");
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/MatchInstruction.cs

@ -274,10 +274,7 @@ namespace ICSharpCode.Decompiler.IL
return true; return true;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -325,10 +322,5 @@ namespace ICSharpCode.Decompiler.IL
output.MarkFoldEnd(); output.MarkFoldEnd();
} }
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

20
ICSharpCode.Decompiler/IL/Instructions/MemoryInstructions.cs

@ -37,10 +37,7 @@ namespace ICSharpCode.Decompiler.IL
partial class LdObj partial class LdObj
{ {
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
if (options.UseFieldSugar) if (options.UseFieldSugar)
{ {
@ -64,19 +61,11 @@ namespace ICSharpCode.Decompiler.IL
} }
OriginalWriteTo(output, options); OriginalWriteTo(output, options);
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
partial class StObj partial class StObj
{ {
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
if (options.UseFieldSugar) if (options.UseFieldSugar)
{ {
@ -105,10 +94,5 @@ namespace ICSharpCode.Decompiler.IL
} }
OriginalWriteTo(output, options); OriginalWriteTo(output, options);
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/NullCoalescingInstruction.cs

@ -90,10 +90,7 @@ namespace ICSharpCode.Decompiler.IL
| SemanticHelper.CombineBranches(InstructionFlags.None, fallbackInst.Flags); | SemanticHelper.CombineBranches(InstructionFlags.None, fallbackInst.Flags);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -103,10 +100,5 @@ namespace ICSharpCode.Decompiler.IL
fallbackInst.WriteTo(output, options); fallbackInst.WriteTo(output, options);
output.Write(")"); output.Write(")");
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/NullableInstructions.cs

@ -90,10 +90,7 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(Ancestors.Any(a => a is NullableRewrap)); Debug.Assert(Ancestors.Any(a => a is NullableRewrap));
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
output.Write("nullable.unwrap."); output.Write("nullable.unwrap.");
if (RefInput) if (RefInput)
@ -105,11 +102,6 @@ namespace ICSharpCode.Decompiler.IL
Argument.WriteTo(output, options); Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType { get; } public override StackType ResultType { get; }
} }

40
ICSharpCode.Decompiler/IL/Instructions/SimpleInstruction.cs

@ -24,20 +24,12 @@ namespace ICSharpCode.Decompiler.IL
/// </summary> /// </summary>
public abstract partial class SimpleInstruction : ILInstruction public abstract partial class SimpleInstruction : ILInstruction
{ {
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
// the non-custom WriteTo would add useless parentheses // the non-custom WriteTo would add useless parentheses
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
public enum NopKind public enum NopKind
@ -52,10 +44,7 @@ namespace ICSharpCode.Decompiler.IL
public NopKind Kind; public NopKind Kind;
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -68,11 +57,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(" // " + Comment); output.Write(" // " + Comment);
} }
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
partial class InvalidBranch : SimpleInstruction partial class InvalidBranch : SimpleInstruction
@ -89,10 +73,7 @@ namespace ICSharpCode.Decompiler.IL
get { return ExpectedResultType; } get { return ExpectedResultType; }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -103,11 +84,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write("\")"); output.Write("\")");
} }
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
partial class InvalidExpression : SimpleInstruction partial class InvalidExpression : SimpleInstruction
@ -125,10 +101,7 @@ namespace ICSharpCode.Decompiler.IL
get { return ExpectedResultType; } get { return ExpectedResultType; }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -139,10 +112,5 @@ namespace ICSharpCode.Decompiler.IL
output.Write("\")"); output.Write("\")");
} }
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/StringToInt.cs

@ -52,10 +52,7 @@ namespace ICSharpCode.Decompiler.IL
return dict; return dict;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("string.to.int "); output.Write("string.to.int ");
@ -76,10 +73,5 @@ namespace ICSharpCode.Decompiler.IL
} }
output.Write(" })"); output.Write(" })");
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

20
ICSharpCode.Decompiler/IL/Instructions/SwitchInstruction.cs

@ -83,10 +83,7 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("switch"); output.Write("switch");
@ -109,11 +106,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write('}'); output.Write('}');
output.MarkFoldEnd(); output.MarkFoldEnd();
} }
finally
{
output.MarkNodeEnd(this);
}
}
protected override int GetChildCount() protected override int GetChildCount()
{ {
@ -232,10 +224,7 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
if (IsCompilerGeneratedDefaultSection) if (IsCompilerGeneratedDefaultSection)
@ -259,10 +248,5 @@ namespace ICSharpCode.Decompiler.IL
body.WriteTo(output, options); body.WriteTo(output, options);
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

40
ICSharpCode.Decompiler/IL/Instructions/TryInstruction.cs

@ -68,10 +68,7 @@ namespace ICSharpCode.Decompiler.IL
return clone; return clone;
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(".try "); output.Write(".try ");
@ -82,11 +79,6 @@ namespace ICSharpCode.Decompiler.IL
handler.WriteTo(output, options); handler.WriteTo(output, options);
} }
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType { public override StackType ResultType {
get { return StackType.Void; } get { return StackType.Void; }
@ -172,10 +164,7 @@ namespace ICSharpCode.Decompiler.IL
} }
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("catch "); output.Write("catch ");
@ -191,11 +180,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(' '); output.Write(' ');
body.WriteTo(output, options); body.WriteTo(output, options);
} }
finally
{
output.MarkNodeEnd(this);
}
}
/// <summary> /// <summary>
/// Gets the ILRange of the instructions at the start of the catch-block, /// Gets the ILRange of the instructions at the start of the catch-block,
@ -233,10 +217,7 @@ namespace ICSharpCode.Decompiler.IL
return new TryFinally(TryBlock.Clone(), finallyBlock.Clone()).WithILRange(this); return new TryFinally(TryBlock.Clone(), finallyBlock.Clone()).WithILRange(this);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(".try "); output.Write(".try ");
@ -244,11 +225,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(" finally "); output.Write(" finally ");
finallyBlock.WriteTo(output, options); finallyBlock.WriteTo(output, options);
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType { public override StackType ResultType {
get { get {
@ -338,10 +314,7 @@ namespace ICSharpCode.Decompiler.IL
return new TryFault(TryBlock.Clone(), faultBlock.Clone()).WithILRange(this); return new TryFault(TryBlock.Clone(), faultBlock.Clone()).WithILRange(this);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(".try "); output.Write(".try ");
@ -349,11 +322,6 @@ namespace ICSharpCode.Decompiler.IL
output.Write(" fault "); output.Write(" fault ");
faultBlock.WriteTo(output, options); faultBlock.WriteTo(output, options);
} }
finally
{
output.MarkNodeEnd(this);
}
}
public override StackType ResultType { public override StackType ResultType {
get { return TryBlock.ResultType; } get { return TryBlock.ResultType; }

10
ICSharpCode.Decompiler/IL/Instructions/UnaryInstruction.cs

@ -50,10 +50,7 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(IsLifted || ResultType == UnderlyingResultType); Debug.Assert(IsLifted || ResultType == UnderlyingResultType);
} }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
@ -65,10 +62,5 @@ namespace ICSharpCode.Decompiler.IL
this.Argument.WriteTo(output, options); this.Argument.WriteTo(output, options);
output.Write(')'); output.Write(')');
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

10
ICSharpCode.Decompiler/IL/Instructions/UsingInstruction.cs

@ -40,10 +40,7 @@ namespace ICSharpCode.Decompiler.IL
public bool IsRefStruct { get; set; } public bool IsRefStruct { get; set; }
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) protected override void WriteToCore(ITextOutput output, ILAstWritingOptions options)
{
output.MarkNodeStart(this);
try
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write("using"); output.Write("using");
@ -66,10 +63,5 @@ namespace ICSharpCode.Decompiler.IL
output.WriteLine(); output.WriteLine();
output.Write("}"); output.Write("}");
} }
finally
{
output.MarkNodeEnd(this);
}
}
} }
} }

Loading…
Cancel
Save