static void AssertOpCodeSequence (OpCode [] expected, MethodBody body) { var opcodes = body.Instructions.Select (i => i.OpCode).ToArray (); Assert.AreEqual (expected.Length, opcodes.Length); for (int i = 0; i < opcodes.Length; i++) Assert.AreEqual (expected [i], opcodes [i]); }
public static bool IsUnconditionalBranch(OpCode opcode) { if (opcode.OpCodeType == OpCodeType.Prefix) return false; switch (opcode.FlowControl) { case FlowControl.Branch: case FlowControl.Throw: case FlowControl.Return: return true; case FlowControl.Next: case FlowControl.Call: case FlowControl.Cond_Branch: return false; default: throw new NotSupportedException(opcode.FlowControl.ToString()); } }
public static Instruction Create (OpCode opcode, ParameterDefinition parameter) { if (parameter == null) throw new ArgumentNullException ("parameter"); if (opcode.OperandType != OperandType.ShortInlineArg && opcode.OperandType != OperandType.InlineArg) throw new ArgumentException ("opcode"); return new Instruction (opcode, parameter); }
public static Instruction Create (OpCode opcode, VariableDefinition variable) { if (variable == null) throw new ArgumentNullException ("variable"); if (opcode.OperandType != OperandType.ShortInlineVar && opcode.OperandType != OperandType.InlineVar) throw new ArgumentException ("opcode"); return new Instruction (opcode, variable); }
public static Instruction Create (OpCode opcode, Instruction [] targets) { if (targets == null) throw new ArgumentNullException ("targets"); if (opcode.OperandType != OperandType.InlineSwitch) throw new ArgumentException ("opcode"); return new Instruction (opcode, targets); }
public static Instruction Create (OpCode opcode, Instruction target) { if (target == null) throw new ArgumentNullException ("target"); if (opcode.OperandType != OperandType.InlineBrTarget && opcode.OperandType != OperandType.ShortInlineBrTarget) throw new ArgumentException ("opcode"); return new Instruction (opcode, target); }
public static Instruction Create (OpCode opcode, double value) { if (opcode.OperandType != OperandType.InlineR) throw new ArgumentException ("opcode"); return new Instruction (opcode, value); }
private OpCodeInfo(OpCode opcode) { this.opcode = opcode; this.CanThrow = true; }
public static Instruction Create (OpCode opcode, FieldReference field) { if (field == null) throw new ArgumentNullException ("field"); if (opcode.OperandType != OperandType.InlineField && opcode.OperandType != OperandType.InlineTok) throw new ArgumentException ("opcode"); return new Instruction (opcode, field); }
public static Instruction Create (OpCode opcode, MethodReference method) { if (method == null) throw new ArgumentNullException ("method"); if (opcode.OperandType != OperandType.InlineMethod && opcode.OperandType != OperandType.InlineTok) throw new ArgumentException ("opcode"); return new Instruction (opcode, method); }
public static Instruction Create (OpCode opcode, CallSite site) { if (site == null) throw new ArgumentNullException ("site"); if (opcode.Code != Code.Calli) throw new ArgumentException ("code"); return new Instruction (opcode, site); }
public static Instruction Create (OpCode opcode, TypeReference type) { if (type == null) throw new ArgumentNullException ("type"); if (opcode.OperandType != OperandType.InlineType && opcode.OperandType != OperandType.InlineTok) throw new ArgumentException ("opcode"); return new Instruction (opcode, type); }
public static Instruction Create (OpCode opcode) { if (opcode.OperandType != OperandType.InlineNone) throw new ArgumentException ("opcode"); return new Instruction (opcode, null); }
internal Instruction (int offset, OpCode opCode) { this.offset = offset; this.opcode = opCode; }
public static Instruction Create (OpCode opcode, string value) { if (value == null) throw new ArgumentNullException ("value"); if (opcode.OperandType != OperandType.InlineString) throw new ArgumentException ("opcode"); return new Instruction (opcode, value); }
internal Instruction (OpCode opcode, object operand) { this.opcode = opcode; this.operand = operand; }
public static Instruction Create (OpCode opcode, byte value) { if (opcode.OperandType != OperandType.ShortInlineI || opcode == OpCodes.Ldc_I4_S) throw new ArgumentException ("opcode"); return new Instruction (opcode, value); }
void WriteOpCode (OpCode opcode) { if (opcode.Size == 1) { WriteByte (opcode.Op2); } else { WriteByte (opcode.Op1); WriteByte (opcode.Op2); } }
public static OpCodeInfo Get(OpCode opCode) { return Get(opCode.Code); }