Class StackUtils

java.lang.Object
ftbsc.lll.utils.StackUtils
All Implemented Interfaces:
org.objectweb.asm.Opcodes

public class StackUtils extends Object implements org.objectweb.asm.Opcodes
Various methods for manipulating the stack. Includes anything from instantiation to variable manipulation - just about anything that loads stuff on or from the stack.
  • Field Summary

    Fields inherited from interface org.objectweb.asm.Opcodes

    AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V9
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static int
    addLocalVariable(org.objectweb.asm.tree.MethodNode method, String name, String desc)
    Creates a new local variable, lasting in scope from the first to the last label of the given method.
    static int
    addLocalVariable(org.objectweb.asm.tree.MethodNode method, String name, String desc, org.objectweb.asm.tree.LabelNode start, org.objectweb.asm.tree.LabelNode end)
    Creates a new local variable, lasting in scope between two given LabelNodes.
    static int
    findFirstFreeIndex(org.objectweb.asm.tree.MethodNode method)
    Finds the first free index in the given MethodNode.
    static org.objectweb.asm.tree.InsnList
    instantiate(String name, String desc, org.objectweb.asm.tree.InsnList args)
    Creates a new instance of an object, given its internal name, constructor descriptor and instructions to load the parameters.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • StackUtils

      public StackUtils()
  • Method Details

    • instantiate

      public static org.objectweb.asm.tree.InsnList instantiate(String name, String desc, org.objectweb.asm.tree.InsnList args)
      Creates a new instance of an object, given its internal name, constructor descriptor and instructions to load the parameters. The created object is loaded on the stack.
      Parameters:
      name - the internal name of the object to initialize, where the internal name of a class is its fully qualified name, where '.' are replaced by '/'
      desc - the descriptor of the constructor to call
      args - a list of instructions loading the constructor arguments onto the stack in the correct order
      Returns:
      an instruction list containing the opcodes needed to create the new object and load it on the stack.
    • addLocalVariable

      public static int addLocalVariable(org.objectweb.asm.tree.MethodNode method, String name, String desc)
      Creates a new local variable, lasting in scope from the first to the last label of the given method.
      Parameters:
      method - the method for which to declare the local variable
      name - the variable's name
      desc - the type descriptor for the new variable
      Returns:
      the index value of the new local variable
    • addLocalVariable

      public static int addLocalVariable(org.objectweb.asm.tree.MethodNode method, String name, String desc, org.objectweb.asm.tree.LabelNode start, org.objectweb.asm.tree.LabelNode end)
      Creates a new local variable, lasting in scope between two given LabelNodes.
      Parameters:
      method - the method for which to declare the local variable
      name - the variable's name
      desc - the type descriptor for the new variable
      start - the label at which the variable should enter scope
      end - the label at which the variable should go out of scope
      Returns:
      the index value of the new local variable
    • findFirstFreeIndex

      public static int findFirstFreeIndex(org.objectweb.asm.tree.MethodNode method)
      Finds the first free index in the given MethodNode. Used to create variables.
      Parameters:
      method - the method to look in
      Returns:
      the found index