Class CodeInstructionExtensions
Extensions for CodeInstruction
Inheritance
Namespace: HarmonyLib
Assembly: 0Harmony.dll
Syntax
public static class CodeInstructionExtensions
Methods
| Improve this Doc View SourceArgumentIndex(CodeInstruction)
Returns the index targeted by this ldarg
, ldarga
, or starg
Declaration
public static int ArgumentIndex(this CodeInstruction code)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
Returns
Type | Description |
---|---|
System.Int32 | The index it targets |
See Also
Branches(CodeInstruction, out Nullable<Label>)
Tests if the code instruction branches
Declaration
public static bool Branches(this CodeInstruction code, out Label? label)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Nullable<System.Reflection.Emit.Label> | label | The label if the instruction is a branch operation or null if not |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction branches |
Calls(CodeInstruction, MethodInfo)
Tests if the code instruction calls the method/constructor
Declaration
public static bool Calls(this CodeInstruction code, MethodInfo method)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Reflection.MethodInfo | method | The method |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction calls the method or constructor |
ExtractBlocks(CodeInstruction)
Extracts all ExceptionBlocks from the code instruction and returns them
Declaration
public static List<ExceptionBlock> ExtractBlocks(this CodeInstruction code)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
Returns
Type | Description |
---|---|
System.Collections.Generic.List<ExceptionBlock> | A list of ExceptionBlock |
ExtractLabels(CodeInstruction)
Extracts all labels from the code instruction and returns them
Declaration
public static List<Label> ExtractLabels(this CodeInstruction code)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
Returns
Type | Description |
---|---|
System.Collections.Generic.List<System.Reflection.Emit.Label> | A list of System.Reflection.Emit.Label |
Is(CodeInstruction, OpCode, Object)
Shortcut for
code.opcode == opcode && code.OperandIs(operand)
Declaration
public static bool Is(this CodeInstruction code, OpCode opcode, object operand)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Reflection.Emit.OpCode | opcode | The System.Reflection.Emit.OpCode |
System.Object | operand | The operand value |
Returns
Type | Description |
---|---|
System.Boolean | True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand |
IsLdarg(CodeInstruction, Nullable<Int32>)
Tests for any form of Ldarg*
Declaration
public static bool IsLdarg(this CodeInstruction code, int? n = null)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Nullable<System.Int32> | n | The (optional) index |
Returns
Type | Description |
---|---|
System.Boolean | True if it matches one of the variations |
IsLdarga(CodeInstruction, Nullable<Int32>)
Tests for Ldarga/Ldarga_S
Declaration
public static bool IsLdarga(this CodeInstruction code, int? n = null)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Nullable<System.Int32> | n | The (optional) index |
Returns
Type | Description |
---|---|
System.Boolean | True if it matches one of the variations |
IsLdloc(CodeInstruction, LocalBuilder)
Tests for any form of Ldloc*
Declaration
public static bool IsLdloc(this CodeInstruction code, LocalBuilder variable = null)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Reflection.Emit.LocalBuilder | variable | The optional local variable |
Returns
Type | Description |
---|---|
System.Boolean | True if it matches one of the variations |
IsStarg(CodeInstruction, Nullable<Int32>)
Tests for Starg/Starg_S
Declaration
public static bool IsStarg(this CodeInstruction code, int? n = null)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Nullable<System.Int32> | n | The (optional) index |
Returns
Type | Description |
---|---|
System.Boolean | True if it matches one of the variations |
IsStloc(CodeInstruction, LocalBuilder)
Tests for any form of Stloc*
Declaration
public static bool IsStloc(this CodeInstruction code, LocalBuilder variable = null)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Reflection.Emit.LocalBuilder | variable | The optional local variable |
Returns
Type | Description |
---|---|
System.Boolean | True if it matches one of the variations |
IsValid(OpCode)
Returns if an System.Reflection.Emit.OpCode is initialized and valid
Declaration
public static bool IsValid(this OpCode code)
Parameters
Type | Name | Description |
---|---|---|
System.Reflection.Emit.OpCode | code | The System.Reflection.Emit.OpCode |
Returns
Type | Description |
---|---|
System.Boolean |
LoadsConstant(CodeInstruction)
Tests if the code instruction loads a constant
Declaration
public static bool LoadsConstant(this CodeInstruction code)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction loads a constant |
LoadsConstant(CodeInstruction, Double)
Tests if the code instruction loads a floating point constant
Declaration
public static bool LoadsConstant(this CodeInstruction code, double number)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Double | number | The floating point constant |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction loads the constant |
LoadsConstant(CodeInstruction, Enum)
Tests if the code instruction loads an enum constant
Declaration
public static bool LoadsConstant(this CodeInstruction code, Enum e)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Enum | e | The enum |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction loads the constant |
LoadsConstant(CodeInstruction, Int64)
Tests if the code instruction loads an integer constant
Declaration
public static bool LoadsConstant(this CodeInstruction code, long number)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Int64 | number | The integer constant |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction loads the constant |
LoadsConstant(CodeInstruction, String)
Tests if the code instruction loads a string constant
Declaration
public static bool LoadsConstant(this CodeInstruction code, string str)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.String | str | The string |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction loads the constant |
LoadsField(CodeInstruction, FieldInfo, Boolean)
Tests if the code instruction loads a field
Declaration
public static bool LoadsField(this CodeInstruction code, FieldInfo field, bool byAddress = false)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Reflection.FieldInfo | field | The field |
System.Boolean | byAddress | Set to true if the address of the field is loaded |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction loads the field |
LocalIndex(CodeInstruction)
Returns the index targeted by this ldloc
, ldloca
, or stloc
Declaration
public static int LocalIndex(this CodeInstruction code)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
Returns
Type | Description |
---|---|
System.Int32 | The index it targets |
See Also
MoveBlocksFrom(CodeInstruction, CodeInstruction)
Moves all ExceptionBlocks from another code instruction to the current one
Declaration
public static CodeInstruction MoveBlocksFrom(this CodeInstruction code, CodeInstruction other)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction to move the ExceptionBlocks to |
CodeInstruction | other | The other CodeInstruction to move the ExceptionBlocks from |
Returns
Type | Description |
---|---|
CodeInstruction | The code instruction that received the blocks |
MoveBlocksTo(CodeInstruction, CodeInstruction)
Moves all ExceptionBlocks from the code instruction to another one
Declaration
public static CodeInstruction MoveBlocksTo(this CodeInstruction code, CodeInstruction other)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction to move the ExceptionBlocks from |
CodeInstruction | other | The other CodeInstruction to move the ExceptionBlocks to |
Returns
Type | Description |
---|---|
CodeInstruction | The code instruction blocks were moved from (now empty) |
MoveLabelsFrom(CodeInstruction, CodeInstruction)
Moves all labels from another code instruction to the current one
Declaration
public static CodeInstruction MoveLabelsFrom(this CodeInstruction code, CodeInstruction other)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction to move the labels to |
CodeInstruction | other | The other CodeInstruction to move the labels from |
Returns
Type | Description |
---|---|
CodeInstruction | The code instruction that received the labels |
MoveLabelsTo(CodeInstruction, CodeInstruction)
Moves all labels from the code instruction to another one
Declaration
public static CodeInstruction MoveLabelsTo(this CodeInstruction code, CodeInstruction other)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction to move the labels from |
CodeInstruction | other | The other CodeInstruction to move the labels to |
Returns
Type | Description |
---|---|
CodeInstruction | The code instruction labels were moved from (now empty) |
OperandIs(CodeInstruction, Object)
Shortcut for testing whether the operand is equal to a non-null value
Declaration
public static bool OperandIs(this CodeInstruction code, object value)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Object | value | The value |
Returns
Type | Description |
---|---|
System.Boolean | True if the operand has the same type and is equal to the value |
StoresField(CodeInstruction, FieldInfo)
Tests if the code instruction stores a field
Declaration
public static bool StoresField(this CodeInstruction code, FieldInfo field)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Reflection.FieldInfo | field | The field |
Returns
Type | Description |
---|---|
System.Boolean | True if the instruction stores this field |
WithBlocks(CodeInstruction, ExceptionBlock[])
Adds ExceptionBlocks to the code instruction and return it
Declaration
public static CodeInstruction WithBlocks(this CodeInstruction code, params ExceptionBlock[] blocks)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
ExceptionBlock[] | blocks | One or several ExceptionBlock to add |
Returns
Type | Description |
---|---|
CodeInstruction | The same code instruction |
WithBlocks(CodeInstruction, IEnumerable<ExceptionBlock>)
Adds ExceptionBlocks to the code instruction and return it
Declaration
public static CodeInstruction WithBlocks(this CodeInstruction code, IEnumerable<ExceptionBlock> blocks)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Collections.Generic.IEnumerable<ExceptionBlock> | blocks | An enumeration of ExceptionBlock |
Returns
Type | Description |
---|---|
CodeInstruction | The same code instruction |
WithLabels(CodeInstruction, IEnumerable<Label>)
Adds labels to the code instruction and return it
Declaration
public static CodeInstruction WithLabels(this CodeInstruction code, IEnumerable<Label> labels)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Collections.Generic.IEnumerable<System.Reflection.Emit.Label> | labels | An enumeration of System.Reflection.Emit.Label |
Returns
Type | Description |
---|---|
CodeInstruction | The same code instruction |
WithLabels(CodeInstruction, Label[])
Adds labels to the code instruction and return it
Declaration
public static CodeInstruction WithLabels(this CodeInstruction code, params Label[] labels)
Parameters
Type | Name | Description |
---|---|---|
CodeInstruction | code | The CodeInstruction |
System.Reflection.Emit.Label[] | labels | One or several System.Reflection.Emit.Label to add |
Returns
Type | Description |
---|---|
CodeInstruction | The same code instruction |