<Type Name="InstructionRocks" FullName="Gendarme.Framework.Rocks.InstructionRocks">
  <TypeSignature Language="C#" Value="public static class InstructionRocks" />
  <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit InstructionRocks extends System.Object" />
  <AssemblyInfo>
    <AssemblyName>Gendarme.Framework</AssemblyName>
    <AssemblyVersion>2.11.0.0</AssemblyVersion>
  </AssemblyInfo>
  <Base>
    <BaseTypeName>System.Object</BaseTypeName>
  </Base>
  <Interfaces />
  <Docs>
    <summary>
            InstructionRocks contains extensions methods for Instruction
            and the related collection classes.
            </summary>
    <remarks>To be added.</remarks>
  </Docs>
  <Members>
    <Member MemberName="GetField">
      <MemberSignature Language="C#" Value="public static Mono.Cecil.FieldDefinition GetField (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Mono.Cecil.FieldDefinition GetField(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Mono.Cecil.FieldDefinition</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Get the FieldDefinition associated with the Instruction.
            </summary>
        <returns>The FieldDefinition associated with the instruction
            or null if the instruction does apply to fields.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetMethod">
      <MemberSignature Language="C#" Value="public static Mono.Cecil.MethodReference GetMethod (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Mono.Cecil.MethodReference GetMethod(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Mono.Cecil.MethodReference</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Get the MethodReference or MethodDefinition (but not a CallSite) associated with the Instruction
            </summary>
        <returns />
        <remarks>Older (pre 0.9) Cecil CallSite did not inherit from MethodReference so this was not an issue</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetOperand">
      <MemberSignature Language="C#" Value="public static object GetOperand (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.MethodDefinition method);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig object GetOperand(class Mono.Cecil.Cil.Instruction self, class Mono.Cecil.MethodDefinition method) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Object</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="method" Type="Mono.Cecil.MethodDefinition" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="method">The method inside which the instruction comes from.</param>
        <summary>
            Return the operand of the Instruction. For macro instruction the operand is constructed.
            </summary>
        <returns>Return the operand that the non-macro version of this Instruction would have.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetOperandType">
      <MemberSignature Language="C#" Value="public static Mono.Cecil.TypeReference GetOperandType (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.MethodDefinition method);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Mono.Cecil.TypeReference GetOperandType(class Mono.Cecil.Cil.Instruction self, class Mono.Cecil.MethodDefinition method) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Mono.Cecil.TypeReference</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="method" Type="Mono.Cecil.MethodDefinition" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="method">The method inside which the instruction comes from.</param>
        <summary>
            Return the type associated with the instruction's operand (INCOMPLETE).
            </summary>
        <returns>Return a TypeReference compatible with the instruction operand or null.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetParameter">
      <MemberSignature Language="C#" Value="public static Mono.Cecil.ParameterDefinition GetParameter (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.MethodDefinition method);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Mono.Cecil.ParameterDefinition GetParameter(class Mono.Cecil.Cil.Instruction self, class Mono.Cecil.MethodDefinition method) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Mono.Cecil.ParameterDefinition</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="method" Type="Mono.Cecil.MethodDefinition" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="method">The method inside which the instruction comes from.
            Needed for the macro instruction where only the variable index is available.</param>
        <summary>
            Get the ParameterDefinition associated with the Instruction.
            </summary>
        <returns>The ParameterDefinition associated with the instruction
            or null if the instruction does apply to arguments.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetPopCount">
      <MemberSignature Language="C#" Value="public static int GetPopCount (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.IMethodSignature method);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig int32 GetPopCount(class Mono.Cecil.Cil.Instruction self, class Mono.Cecil.IMethodSignature method) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="method" Type="Mono.Cecil.IMethodSignature" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="method">The method inside which the instruction comes from
            (needed for StackBehaviour.Varpop).</param>
        <summary>
            Get the number of values removed on the stack for this instruction.
            </summary>
        <returns>The number of value removed (pop) from the stack for this instruction.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetPushCount">
      <MemberSignature Language="C#" Value="public static int GetPushCount (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig int32 GetPushCount(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Get the number of values placed on the stack by this instruction.
            </summary>
        <returns>The number of value added (push) to the stack by this instruction.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetVariable">
      <MemberSignature Language="C#" Value="public static Mono.Cecil.Cil.VariableDefinition GetVariable (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.MethodDefinition method);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Mono.Cecil.Cil.VariableDefinition GetVariable(class Mono.Cecil.Cil.Instruction self, class Mono.Cecil.MethodDefinition method) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Mono.Cecil.Cil.VariableDefinition</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="method" Type="Mono.Cecil.MethodDefinition" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="method">The method inside which the instruction comes from.
            Needed for the macro instruction where only the variable index is available.</param>
        <summary>
            Get the VariableDefinition associated with the Instruction.
            </summary>
        <returns>The VariableDefinition associated with the instruction
            or null if the instruction does apply to local variables.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Is">
      <MemberSignature Language="C#" Value="public static bool Is (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.Cil.Code code);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool Is(class Mono.Cecil.Cil.Instruction self, valuetype Mono.Cecil.Cil.Code code) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="code" Type="Mono.Cecil.Cil.Code" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="code">The Code to compare to.</param>
        <summary>
            Helper method to avoid patterns like "ins.Previous != null &amp;&amp; ins.Previous.OpCode.Code == Code.Newobj"
            and replace it with a shorter "ins.Previous.Is (Code.Newobj)".
            </summary>
        <returns>True if the instruction's code match the specified argument, False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="IsLoadArgument">
      <MemberSignature Language="C#" Value="public static bool IsLoadArgument (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsLoadArgument(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Return if the Instruction is a load of an argument (ldarg* family).
            </summary>
        <returns>True if the instruction is a load argument/parameter, False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="IsLoadElement">
      <MemberSignature Language="C#" Value="public static bool IsLoadElement (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsLoadElement(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Return if the Instruction is the load of an element (ldelem* family)
            </summary>
        <returns>True if the instruction is a load element, False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="IsLoadIndirect">
      <MemberSignature Language="C#" Value="public static bool IsLoadIndirect (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsLoadIndirect(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Return if the Instruction is a load indirect (ldind* family)
            </summary>
        <returns>True if the instruction is a load indirect, False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="IsLoadLocal">
      <MemberSignature Language="C#" Value="public static bool IsLoadLocal (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsLoadLocal(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Return if the Instruction is a load of a local variable (ldloc* family).
            </summary>
        <returns>True if the instruction is a load local variable, False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="IsOperandZero">
      <MemberSignature Language="C#" Value="public static bool IsOperandZero (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsOperandZero(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Determine if the instruction operand contains the constant zero (0).
            </summary>
        <returns>True if the operand contains the constant zero (0), False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="IsStoreArgument">
      <MemberSignature Language="C#" Value="public static bool IsStoreArgument (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsStoreArgument(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Return if the Instruction is a store of an argument (starg* family).
            </summary>
        <returns>True if the instruction is a store of a parameter, False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="IsStoreLocal">
      <MemberSignature Language="C#" Value="public static bool IsStoreLocal (this Mono.Cecil.Cil.Instruction self);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsStoreLocal(class Mono.Cecil.Cil.Instruction self) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <summary>
            Return if the Instruction is a store of a local variable (stloc* family).
            </summary>
        <returns>True if the instruction is a store local variable, False otherwise</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="TraceBack">
      <MemberSignature Language="C#" Value="public static Mono.Cecil.Cil.Instruction TraceBack (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.IMethodSignature method);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Mono.Cecil.Cil.Instruction TraceBack(class Mono.Cecil.Cil.Instruction self, class Mono.Cecil.IMethodSignature method) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Mono.Cecil.Cil.Instruction</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="method" Type="Mono.Cecil.IMethodSignature" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="method">The method from which the instruction was extracted.</param>
        <summary>
            Return the instruction that match the current instruction. This is computed by
            substracting push and adding pop counts until the total becomes zero.
            </summary>
        <returns>The instruction that match the current instruction.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="TraceBack">
      <MemberSignature Language="C#" Value="public static Mono.Cecil.Cil.Instruction TraceBack (this Mono.Cecil.Cil.Instruction self, Mono.Cecil.IMethodSignature method, int offset);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Mono.Cecil.Cil.Instruction TraceBack(class Mono.Cecil.Cil.Instruction self, class Mono.Cecil.IMethodSignature method, int32 offset) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.11.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Mono.Cecil.Cil.Instruction</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="self" Type="Mono.Cecil.Cil.Instruction" RefType="this" />
        <Parameter Name="method" Type="Mono.Cecil.IMethodSignature" />
        <Parameter Name="offset" Type="System.Int32" />
      </Parameters>
      <Docs>
        <param name="self">The Instruction on which the extension method can be called.</param>
        <param name="method">The method from which the instruction was extracted.</param>
        <param name="offset">Offset to add the the Pop count. Useful to track several parameters to a method.</param>
        <summary>
            Return the instruction that match the current instruction. This is computed by
            substracting push and adding pop counts until the total becomes zero.
            </summary>
        <returns>The instruction that match the current instruction.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
  </Members>
</Type>
