diff --git a/ICSharpCode.Decompiler/IL/ILReader.cs b/ICSharpCode.Decompiler/IL/ILReader.cs
index cc77ec1eb..74cc3ba8c 100644
--- a/ICSharpCode.Decompiler/IL/ILReader.cs
+++ b/ICSharpCode.Decompiler/IL/ILReader.cs
@@ -300,7 +300,7 @@ namespace ICSharpCode.Decompiler.IL
output.Write(' ');
output.WriteDefinition("IL_" + inst.ILRange.Start.ToString("x4"), inst.ILRange.Start);
output.Write(": ");
- inst.WriteTo(output);
+ inst.WriteTo(output, new ILAstWritingOptions());
output.WriteLine();
}
new Disassembler.MethodBodyDisassembler(output, false, cancellationToken).WriteExceptionHandlers(body);
diff --git a/ICSharpCode.Decompiler/IL/Instructions.cs b/ICSharpCode.Decompiler/IL/Instructions.cs
index 1c0fcff0d..48e809e7a 100644
--- a/ICSharpCode.Decompiler/IL/Instructions.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions.cs
@@ -281,11 +281,11 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('(');
- this.argument.WriteTo(output);
+ this.argument.WriteTo(output, options);
output.Write(')');
}
}
@@ -373,13 +373,13 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('(');
- this.left.WriteTo(output);
+ this.left.WriteTo(output, options);
output.Write(", ");
- this.right.WriteTo(output);
+ this.right.WriteTo(output, options);
output.Write(')');
}
}
@@ -800,15 +800,15 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayWriteLocals;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
variable.WriteTo(output);
output.Write('(');
- this.init.WriteTo(output);
+ this.init.WriteTo(output, options);
output.Write(", ");
- this.body.WriteTo(output);
+ this.body.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -1910,7 +1910,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayReadLocals;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -1984,7 +1984,7 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(phase <= ILPhase.InILReader || this.IsDescendantOf(variable.Function));
Debug.Assert(phase <= ILPhase.InILReader || variable.Function.Variables[variable.IndexInFunction] == variable);
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2115,13 +2115,13 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayWriteLocals;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
variable.WriteTo(output);
output.Write('(');
- this.value.WriteTo(output);
+ this.value.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -2209,11 +2209,11 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('(');
- this.value.WriteTo(output);
+ this.value.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -2246,7 +2246,7 @@ namespace ICSharpCode.Decompiler.IL
}
public readonly string Value;
public override StackType ResultType { get { return StackType.O; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2282,7 +2282,7 @@ namespace ICSharpCode.Decompiler.IL
}
public readonly int Value;
public override StackType ResultType { get { return StackType.I4; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2318,7 +2318,7 @@ namespace ICSharpCode.Decompiler.IL
}
public readonly long Value;
public override StackType ResultType { get { return StackType.I8; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2354,7 +2354,7 @@ namespace ICSharpCode.Decompiler.IL
}
public readonly double Value;
public override StackType ResultType { get { return StackType.F; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2390,7 +2390,7 @@ namespace ICSharpCode.Decompiler.IL
}
public readonly decimal Value;
public override StackType ResultType { get { return StackType.O; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2456,7 +2456,7 @@ namespace ICSharpCode.Decompiler.IL
/// Returns the method operand.
public IMethod Method { get { return method; } }
public override StackType ResultType { get { return StackType.I; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2503,13 +2503,13 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, method);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -2544,7 +2544,7 @@ namespace ICSharpCode.Decompiler.IL
/// Returns the type operand.
public IType Type { get { return type; } }
public override StackType ResultType { get { return StackType.O; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2582,7 +2582,7 @@ namespace ICSharpCode.Decompiler.IL
/// Returns the token operand.
public IMember Member { get { return member; } }
public override StackType ResultType { get { return StackType.O; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2715,13 +2715,13 @@ namespace ICSharpCode.Decompiler.IL
return (DelayExceptions ? InstructionFlags.None : InstructionFlags.MayThrow);
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, field);
output.Write('(');
- this.target.WriteTo(output);
+ this.target.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -2756,7 +2756,7 @@ namespace ICSharpCode.Decompiler.IL
readonly IField field;
/// Returns the field operand.
public IField Field { get { return field; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -2803,13 +2803,13 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -2844,13 +2844,13 @@ namespace ICSharpCode.Decompiler.IL
/// Returns the type operand.
public IType Type { get { return type; } }
public override StackType ResultType { get { return StackType.O; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -2946,7 +2946,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.SideEffect | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
if (IsVolatile)
output.Write("volatile.");
@@ -2956,7 +2956,7 @@ namespace ICSharpCode.Decompiler.IL
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- this.target.WriteTo(output);
+ this.target.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3070,7 +3070,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.SideEffect | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
if (IsVolatile)
output.Write("volatile.");
@@ -3080,9 +3080,9 @@ namespace ICSharpCode.Decompiler.IL
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- this.target.WriteTo(output);
+ this.target.WriteTo(output, options);
output.Write(", ");
- this.value.WriteTo(output);
+ this.value.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3126,13 +3126,13 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.SideEffect | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3176,13 +3176,13 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3226,13 +3226,13 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.SideEffect | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3336,7 +3336,7 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -3345,7 +3345,7 @@ namespace ICSharpCode.Decompiler.IL
bool first = true;
foreach (var indices in Indices) {
if (!first) output.Write(", "); else first = false;
- indices.WriteTo(output);
+ indices.WriteTo(output, options);
}
output.Write(')');
}
@@ -3381,7 +3381,7 @@ namespace ICSharpCode.Decompiler.IL
/// Returns the type operand.
public IType Type { get { return type; } }
public override StackType ResultType { get { return type.GetStackType(); } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -3493,7 +3493,7 @@ namespace ICSharpCode.Decompiler.IL
/// Returns the type operand.
public IType Type { get { return type; } }
public override StackType ResultType { get { return StackType.I4; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
@@ -3678,7 +3678,7 @@ namespace ICSharpCode.Decompiler.IL
return (DelayExceptions ? InstructionFlags.None : InstructionFlags.MayThrow);
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
if (IsReadOnly)
output.Write("readonly.");
@@ -3686,10 +3686,10 @@ namespace ICSharpCode.Decompiler.IL
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- this.array.WriteTo(output);
+ this.array.WriteTo(output, options);
foreach (var indices in Indices) {
output.Write(", ");
- indices.WriteTo(output);
+ indices.WriteTo(output, options);
}
output.Write(')');
}
@@ -3779,11 +3779,11 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.None;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('(');
- this.array.WriteTo(output);
+ this.array.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3818,13 +3818,13 @@ namespace ICSharpCode.Decompiler.IL
/// Returns the type operand.
public IType Type { get { return type; } }
public override StackType ResultType { get { return StackType.O; } }
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3896,13 +3896,13 @@ namespace ICSharpCode.Decompiler.IL
return base.DirectFlags | InstructionFlags.MayThrow;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
Disassembler.DisassemblerHelpers.WriteOperand(output, type);
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -3990,11 +3990,11 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.MayBranch | InstructionFlags.SideEffect;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('(');
- this.value.WriteTo(output);
+ this.value.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -4082,11 +4082,11 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.SideEffect;
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('(');
- this.value.WriteTo(output);
+ this.value.WriteTo(output, options);
output.Write(')');
}
public override void AcceptVisitor(ILVisitor visitor)
@@ -4143,7 +4143,7 @@ namespace ICSharpCode.Decompiler.IL.Patterns
var clone = (AnyNode)ShallowClone();
return clone;
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('(');
diff --git a/ICSharpCode.Decompiler/IL/Instructions.tt b/ICSharpCode.Decompiler/IL/Instructions.tt
index 7074ac75f..4a809dbbc 100644
--- a/ICSharpCode.Decompiler/IL/Instructions.tt
+++ b/ICSharpCode.Decompiler/IL/Instructions.tt
@@ -277,7 +277,7 @@ namespace <#=opCode.Namespace#>
}
<# } #>
<# if (opCode.GenerateWriteTo) { #>
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{<#=Body(opCode.WriteToBody)#>}
<# } #>
<# if (opCode.GenerateAcceptVisitor) { #>
@@ -594,7 +594,7 @@ namespace ICSharpCode.Decompiler.IL
opCode.PerformMatchConditions.Add("this.Argument.PerformMatch(o.Argument, ref match)");
opCode.BaseConstructorArguments.Add("argument");
opCode.WriteArguments.Add("output.Write('(');");
- opCode.WriteArguments.Add("Argument.WriteTo(output);");
+ opCode.WriteArguments.Add("Argument.WriteTo(output, options);");
opCode.WriteArguments.Add("output.Write(')');");
};
@@ -610,9 +610,9 @@ namespace ICSharpCode.Decompiler.IL
opCode.PerformMatchConditions.Add("this.Left.PerformMatch(o.Left, ref match)");
opCode.PerformMatchConditions.Add("this.Right.PerformMatch(o.Right, ref match)");
opCode.WriteArguments.Add("output.Write('(');");
- opCode.WriteArguments.Add("Left.WriteTo(output);");
+ opCode.WriteArguments.Add("Left.WriteTo(output, options);");
opCode.WriteArguments.Add("output.Write(\", \");");
- opCode.WriteArguments.Add("Right.WriteTo(output);");
+ opCode.WriteArguments.Add("Right.WriteTo(output, options);");
opCode.WriteArguments.Add("output.Write(')');");
};
@@ -682,7 +682,7 @@ namespace ICSharpCode.Decompiler.IL
opCode.WriteArguments.Add("\toutput.Write(\", \");");
else
opCode.WriteArguments.Add("\tif (!first) output.Write(\", \"); else first = false;");
- opCode.WriteArguments.Add("\t" + arg + ".WriteTo(output);");
+ opCode.WriteArguments.Add("\t" + arg + ".WriteTo(output, options);");
opCode.WriteArguments.Add("}");
opCode.Members.Add("public static readonly SlotInfo " + children[i].SlotName + " = " + children[i].GetSlotInit() + ";");
opCode.Members.Add("public InstructionCollection " + argProp + " { get; private set; }");
@@ -694,7 +694,7 @@ namespace ICSharpCode.Decompiler.IL
opCode.PerformMatchConditions.Add("this." + arg + ".PerformMatch(o." + arg + ", ref match)");
if (i > 0)
opCode.WriteArguments.Add("output.Write(\", \");");
- opCode.WriteArguments.Add("this." + arg + ".WriteTo(output);");
+ opCode.WriteArguments.Add("this." + arg + ".WriteTo(output, options);");
opCode.Members.Add("public static readonly SlotInfo " + children[i].SlotName + " = " + children[i].GetSlotInit() + ";");
opCode.Members.Add("ILInstruction " + arg + ";");
opCode.Members.Add("public ILInstruction " + argProp + " {" + Environment.NewLine
diff --git a/ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs
index fb82af0ca..bebbbb975 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs
@@ -176,7 +176,7 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write("." + GetOperatorName(Operator));
@@ -192,9 +192,9 @@ namespace ICSharpCode.Decompiler.IL
output.Write(".lifted");
}
output.Write('(');
- Left.WriteTo(output);
+ Left.WriteTo(output, options);
output.Write(", ");
- Right.WriteTo(output);
+ Right.WriteTo(output, options);
output.Write(')');
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/Block.cs b/ICSharpCode.Decompiler/IL/Instructions/Block.cs
index 4a36a543f..3931beece 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/Block.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/Block.cs
@@ -124,7 +124,7 @@ namespace ICSharpCode.Decompiler.IL
get { return Disassembler.DisassemblerHelpers.OffsetToString(this.ILRange.Start); }
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write("Block ");
output.WriteDefinition(Label, this);
@@ -135,12 +135,12 @@ namespace ICSharpCode.Decompiler.IL
output.WriteLine(" {");
output.Indent();
foreach (var inst in Instructions) {
- inst.WriteTo(output);
+ inst.WriteTo(output, options);
output.WriteLine();
}
if (finalInstruction.OpCode != OpCode.Nop) {
output.Write("final: ");
- finalInstruction.WriteTo(output);
+ finalInstruction.WriteTo(output, options);
output.WriteLine();
}
output.Unindent();
diff --git a/ICSharpCode.Decompiler/IL/Instructions/BlockContainer.cs b/ICSharpCode.Decompiler/IL/Instructions/BlockContainer.cs
index ead48735b..5cf84221c 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/BlockContainer.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/BlockContainer.cs
@@ -105,7 +105,7 @@ namespace ICSharpCode.Decompiler.IL
entryPoint.IncomingEdgeCount--;
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.WriteDefinition("BlockContainer", this);
output.Write(' ');
@@ -114,7 +114,7 @@ namespace ICSharpCode.Decompiler.IL
output.Indent();
foreach (var inst in Blocks) {
if (inst.Parent == this) {
- inst.WriteTo(output);
+ inst.WriteTo(output, options);
} else {
output.Write("stale reference to ");
output.WriteReference(inst.Label, inst, isLocal: true);
diff --git a/ICSharpCode.Decompiler/IL/Instructions/Branch.cs b/ICSharpCode.Decompiler/IL/Instructions/Branch.cs
index aea2885a5..fcd90d7d8 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/Branch.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/Branch.cs
@@ -106,7 +106,7 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(' ');
diff --git a/ICSharpCode.Decompiler/IL/Instructions/CallInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/CallInstruction.cs
index 5bfd160d0..ff55549f9 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/CallInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/CallInstruction.cs
@@ -74,7 +74,7 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
if (ConstrainedTo != null) {
output.Write("constrained.");
@@ -89,7 +89,7 @@ namespace ICSharpCode.Decompiler.IL
for (int i = 0; i < Arguments.Count; i++) {
if (i > 0)
output.Write(", ");
- Arguments[i].WriteTo(output);
+ Arguments[i].WriteTo(output, options);
}
output.Write(')');
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/Comp.cs b/ICSharpCode.Decompiler/IL/Instructions/Comp.cs
index db092e3f6..c268934d0 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/Comp.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/Comp.cs
@@ -173,7 +173,7 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
switch (Sign) {
@@ -193,11 +193,11 @@ namespace ICSharpCode.Decompiler.IL
break;
}
output.Write('(');
- Left.WriteTo(output);
+ Left.WriteTo(output, options);
output.Write(' ');
output.Write(Kind.GetToken());
output.Write(' ');
- Right.WriteTo(output);
+ Right.WriteTo(output, options);
output.Write(')');
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs
index 77acb628e..7096cbab0 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs
@@ -123,7 +123,7 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write("." + GetOperatorName(Operator));
@@ -138,9 +138,9 @@ namespace ICSharpCode.Decompiler.IL
else if (Sign == Sign.Signed)
output.Write(".signed");
output.Write('(');
- Target.WriteTo(output);
+ Target.WriteTo(output, options);
output.Write(", ");
- Value.WriteTo(output);
+ Value.WriteTo(output, options);
output.Write(')');
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/Conv.cs b/ICSharpCode.Decompiler/IL/Instructions/Conv.cs
index cce1c8b5e..8ba33dec9 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/Conv.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/Conv.cs
@@ -258,7 +258,7 @@ namespace ICSharpCode.Decompiler.IL
get => TargetType.GetStackType();
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
if (CheckForOverflow) {
@@ -289,7 +289,7 @@ namespace ICSharpCode.Decompiler.IL
break;
}
output.Write('(');
- Argument.WriteTo(output);
+ Argument.WriteTo(output, options);
output.Write(')');
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs b/ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs
index d1b73ab5a..9151bf34b 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs
@@ -78,7 +78,7 @@ namespace ICSharpCode.Decompiler.IL
throw new NotImplementedException();
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
if (Method != null) {
@@ -102,7 +102,7 @@ namespace ICSharpCode.Decompiler.IL
}
output.MarkFoldEnd();
output.WriteLine();
- body.WriteTo(output);
+ body.WriteTo(output, options);
output.WriteLine();
output.Unindent();
diff --git a/ICSharpCode.Decompiler/IL/Instructions/ILInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/ILInstruction.cs
index 6acf3f046..6d8e5d64a 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/ILInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/ILInstruction.cs
@@ -212,12 +212,12 @@ namespace ICSharpCode.Decompiler.IL
///
/// Writes the ILAst to the text output.
///
- public abstract void WriteTo(ITextOutput output);
+ public abstract void WriteTo(ITextOutput output, ILAstWritingOptions options);
public override string ToString()
{
var output = new PlainTextOutput();
- WriteTo(output);
+ WriteTo(output, new ILAstWritingOptions());
if (!ILRange.IsEmpty) {
output.Write(" at IL_" + ILRange.Start.ToString("x4"));
}
@@ -740,4 +740,8 @@ namespace ICSharpCode.Decompiler.IL
///
StackType UnderlyingResultType { get; }
}
+
+ public class ILAstWritingOptions
+ {
+ }
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/IfInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/IfInstruction.cs
index d540c4d49..77a419349 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/IfInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/IfInstruction.cs
@@ -76,16 +76,16 @@ namespace ICSharpCode.Decompiler.IL
return InstructionFlags.ControlFlow | condition.Flags | SemanticHelper.CombineBranches(trueInst.Flags, falseInst.Flags);
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write(" (");
- condition.WriteTo(output);
+ condition.WriteTo(output, options);
output.Write(") ");
- trueInst.WriteTo(output);
+ trueInst.WriteTo(output, options);
if (falseInst.OpCode != OpCode.Nop) {
output.Write(" else ");
- falseInst.WriteTo(output);
+ falseInst.WriteTo(output, options);
}
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/LdLen.cs b/ICSharpCode.Decompiler/IL/Instructions/LdLen.cs
index 6075fd941..b654624b0 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/LdLen.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/LdLen.cs
@@ -38,13 +38,13 @@ namespace ICSharpCode.Decompiler.IL
get { return resultType; }
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write('.');
output.Write(resultType);
output.Write('(');
- this.array.WriteTo(output);
+ this.array.WriteTo(output, options);
output.Write(')');
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/Leave.cs b/ICSharpCode.Decompiler/IL/Instructions/Leave.cs
index 56d8091ed..d6ab063bd 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/Leave.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/Leave.cs
@@ -100,14 +100,14 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(phase <= ILPhase.InILReader || value.ResultType == targetContainer.ResultType);
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
if (targetContainer != null) {
output.Write(' ');
output.WriteReference(TargetLabel, targetContainer, isLocal: true);
output.Write(" (");
- value.WriteTo(output);
+ value.WriteTo(output, options);
output.Write(')');
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs
index 815a4393d..4b6f8087b 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs
@@ -17,16 +17,12 @@ namespace ICSharpCode.Decompiler.IL
public override StackType ResultType => StackType.Void;
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
- output.Write(".lock (");
- OnExpression.WriteTo(output);
- output.WriteLine(") {");
- output.Indent();
- Body.WriteTo(output);
- output.Unindent();
- output.WriteLine();
- output.Write("}");
+ output.Write("lock (");
+ OnExpression.WriteTo(output, options);
+ output.WriteLine(") ");
+ Body.WriteTo(output, options);
}
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/NullCoalescingInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/NullCoalescingInstruction.cs
index e71e69594..fd4385d1d 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/NullCoalescingInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/NullCoalescingInstruction.cs
@@ -89,13 +89,13 @@ namespace ICSharpCode.Decompiler.IL
| SemanticHelper.CombineBranches(InstructionFlags.None, fallbackInst.Flags);
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
output.Write("(");
- valueInst.WriteTo(output);
+ valueInst.WriteTo(output, options);
output.Write(", ");
- fallbackInst.WriteTo(output);
+ fallbackInst.WriteTo(output, options);
output.Write(")");
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/SimpleInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/SimpleInstruction.cs
index 62ac417d2..18f5b6f6f 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/SimpleInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/SimpleInstruction.cs
@@ -24,7 +24,7 @@ namespace ICSharpCode.Decompiler.IL
///
public abstract partial class SimpleInstruction : ILInstruction
{
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
// the non-custom WriteTo would add useless parentheses
@@ -35,7 +35,7 @@ namespace ICSharpCode.Decompiler.IL
{
public string Comment;
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
if (!string.IsNullOrEmpty(Comment)) {
@@ -58,7 +58,7 @@ namespace ICSharpCode.Decompiler.IL
get { return ExpectedResultType; }
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
if (!string.IsNullOrEmpty(Message)) {
@@ -84,7 +84,7 @@ namespace ICSharpCode.Decompiler.IL
get { return ExpectedResultType; }
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(OpCode);
if (!string.IsNullOrEmpty(Message)) {
diff --git a/ICSharpCode.Decompiler/IL/Instructions/SwitchInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/SwitchInstruction.cs
index 1a2ca24d4..8e22ffe20 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/SwitchInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/SwitchInstruction.cs
@@ -79,19 +79,19 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write("switch (");
- value.WriteTo(output);
+ value.WriteTo(output, options);
output.Write(") ");
output.MarkFoldStart("{...}");
output.WriteLine("{");
output.Indent();
output.Write("default: ");
- defaultBody.WriteTo(output);
+ defaultBody.WriteTo(output, options);
output.WriteLine();
foreach (var section in this.Sections) {
- section.WriteTo(output);
+ section.WriteTo(output, options);
output.WriteLine();
}
output.Unindent();
@@ -175,13 +175,13 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write("case ");
output.Write(Labels.ToString());
output.Write(": ");
- body.WriteTo(output);
+ body.WriteTo(output, options);
}
}
}
diff --git a/ICSharpCode.Decompiler/IL/Instructions/TryInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/TryInstruction.cs
index 35b00d029..033d1cba0 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/TryInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/TryInstruction.cs
@@ -65,13 +65,13 @@ namespace ICSharpCode.Decompiler.IL
return clone;
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(".try ");
- TryBlock.WriteTo(output);
+ TryBlock.WriteTo(output, options);
foreach (var handler in Handlers) {
output.Write(' ');
- handler.WriteTo(output);
+ handler.WriteTo(output, options);
}
}
@@ -159,7 +159,7 @@ namespace ICSharpCode.Decompiler.IL
}
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write("catch ");
if (variable != null) {
@@ -167,11 +167,11 @@ namespace ICSharpCode.Decompiler.IL
output.Write(" : ");
Disassembler.DisassemblerHelpers.WriteOperand(output, variable.Type);
}
- output.Write(" if (");
- filter.WriteTo(output);
+ output.Write(" when (");
+ filter.WriteTo(output, options);
output.Write(')');
output.Write(' ');
- body.WriteTo(output);
+ body.WriteTo(output, options);
}
}
@@ -199,13 +199,13 @@ namespace ICSharpCode.Decompiler.IL
ILRange = this.ILRange
};
}
-
- public override void WriteTo(ITextOutput output)
+
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(".try ");
- TryBlock.WriteTo(output);
+ TryBlock.WriteTo(output, options);
output.Write(" finally ");
- finallyBlock.WriteTo(output);
+ finallyBlock.WriteTo(output, options);
}
public override StackType ResultType {
@@ -295,12 +295,12 @@ namespace ICSharpCode.Decompiler.IL
};
}
- public override void WriteTo(ITextOutput output)
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{
output.Write(".try ");
- TryBlock.WriteTo(output);
+ TryBlock.WriteTo(output, options);
output.Write(" fault ");
- faultBlock.WriteTo(output);
+ faultBlock.WriteTo(output, options);
}
public override StackType ResultType {
diff --git a/ICSharpCode.Decompiler/IL/Instructions/UnaryInstruction.cs b/ICSharpCode.Decompiler/IL/Instructions/UnaryInstruction.cs
index 604d615bd..52d489a0c 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/UnaryInstruction.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/UnaryInstruction.cs
@@ -48,5 +48,16 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(IsLifted == (ResultType == StackType.O));
Debug.Assert(IsLifted || ResultType == UnderlyingResultType);
}
+
+ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
+ {
+ output.Write(OpCode);
+ if (IsLifted) {
+ output.Write(".lifted");
+ }
+ output.Write('(');
+ this.Argument.WriteTo(output, options);
+ output.Write(')');
+ }
}
}