using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ICSharpCode.Decompiler.IL { /// /// A simple instruction that does not have any arguments. /// abstract class SimpleInstruction(OpCode opCode) : ILInstruction(opCode) { public override bool IsPeeking { get { return false; } } public override void TransformChildren(Func transformFunc) { } } class Nop() : SimpleInstruction(OpCode.Nop) { public override bool NoResult { get { return true; } } } class Pop() : SimpleInstruction(OpCode.Pop) { } class Peek() : SimpleInstruction(OpCode.Peek) { public override bool IsPeeking { get { return true; } } } class Ckfinite() : SimpleInstruction(OpCode.Ckfinite) { public override bool IsPeeking { get { return true; } } public override bool NoResult { get { return true; } } } class Arglist() : SimpleInstruction(OpCode.Arglist) { } class DebugBreak() : SimpleInstruction(OpCode.DebugBreak) { public override bool NoResult { get { return true; } } } class ConstantString(public readonly string Value) : SimpleInstruction(OpCode.LdStr) { public override void WriteTo(ITextOutput output) { output.Write("ldstr "); Disassembler.DisassemblerHelpers.WriteOperand(output, Value); } } class ConstantI4(public readonly int Value) : SimpleInstruction(OpCode.LdcI4) { public override void WriteTo(ITextOutput output) { output.Write("ldc.i4 "); Disassembler.DisassemblerHelpers.WriteOperand(output, Value); } } class ConstantI8(public readonly long Value) : SimpleInstruction(OpCode.LdcI8) { public override void WriteTo(ITextOutput output) { output.Write("ldc.i8 "); Disassembler.DisassemblerHelpers.WriteOperand(output, Value); } } class ConstantFloat(public readonly double Value) : SimpleInstruction(OpCode.LdcF) { public override void WriteTo(ITextOutput output) { output.Write("ldc.f "); Disassembler.DisassemblerHelpers.WriteOperand(output, Value); } } class ConstantNull() : SimpleInstruction(OpCode.LdNull) { } }