Package org.objectweb.asm.tree

Examples of org.objectweb.asm.tree.InsnNode


      if (args.length == 0)
      {
        final InsnList doNew= new InsnList();
        doNew.add(node1); // NEW
        if (requireDup)
          doNew.add(new InsnNode(DUP));
        instructions.insertBefore(nm, doNew);
        nm= doNew.getLast();
        continue;
      }

      if (args.length == 1 && args[0].getSize() == 1)
      {
        final InsnList doNew= new InsnList();
        doNew.add(node1); // NEW
        if (requireDup)
        {
          doNew.add(new InsnNode(DUP));
          doNew.add(new InsnNode(DUP2_X1));
          doNew.add(new InsnNode(POP2));
          updateMaxStack= updateMaxStack < 2 ? 2 : updateMaxStack; // a two extra slots for temp values
        }
        else
          doNew.add(new InsnNode(SWAP));
        instructions.insertBefore(nm, doNew);
        nm= doNew.getLast();
        continue;
      }

      // TODO this one untested!
      if ((args.length == 1 && args[0].getSize() == 2) || (args.length == 2 && args[0].getSize() == 1 && args[1].getSize() == 1))
      {
        final InsnList doNew= new InsnList();
        doNew.add(node1); // NEW
        if (requireDup)
        {
          doNew.add(new InsnNode(DUP));
          doNew.add(new InsnNode(DUP2_X2));
          doNew.add(new InsnNode(POP2));
          updateMaxStack= updateMaxStack < 2 ? 2 : updateMaxStack; // a two extra slots for temp values
        }
        else
        {
          doNew.add(new InsnNode(DUP_X2));
          doNew.add(new InsnNode(POP));
          updateMaxStack= updateMaxStack < 1 ? 1 : updateMaxStack; // an extra slot for temp value
        }
        instructions.insertBefore(nm, doNew);
        nm= doNew.getLast();
        continue;
      }

      final InsnList doNew= new InsnList();
      // generic code using temporary locals
      // save stack
      for (int j= args.length - 1; j >= 0; j--)
      {
        Type type= args[j];

        doNew.add(new VarInsnNode(type.getOpcode(ISTORE), varOffset));
        varOffset+= type.getSize();
      }
      if (varOffset > maxLocals)
      {
        maxLocals= varOffset;
      }

      doNew.add(node1); // NEW

      if (requireDup)
        doNew.add(new InsnNode(DUP));

      // restore stack
      for (int j= 0; j < args.length; j++)
      {
        Type type= args[j];
        varOffset-= type.getSize();

        doNew.add(new VarInsnNode(type.getOpcode(ILOAD), varOffset));

        // clean up store to avoid memory leak?
        if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY)
        {
          updateMaxStack= updateMaxStack < 1 ? 1 : updateMaxStack; // an extra slot for ACONST_NULL

          doNew.add(new InsnNode(ACONST_NULL));

          doNew.add(new VarInsnNode(type.getOpcode(ISTORE), varOffset));
        }
      }
      instructions.insertBefore(nm, doNew);
View Full Code Here


        return this;
    }

    public MethodDefinition ret()
    {
        instructionList.add(new InsnNode(RETURN));
        return this;
    }
View Full Code Here

        return this;
    }

    public MethodDefinition retObject()
    {
        instructionList.add(new InsnNode(ARETURN));
        return this;
    }
View Full Code Here

        return this;
    }

    public MethodDefinition dup()
    {
        instructionList.add(new InsnNode(DUP));
        return this;
    }
View Full Code Here

        return this;
    }

    public MethodDefinition pop()
    {
        instructionList.add(new InsnNode(POP));
        return this;
    }
View Full Code Here

        return this;
    }

    public MethodDefinition swap()
    {
        instructionList.add(new InsnNode(SWAP));
        return this;
    }
View Full Code Here

        return this;
    }

    public MethodDefinition loadNull()
    {
        instructionList.add(new InsnNode(ACONST_NULL));
        return this;
    }
View Full Code Here

    public MethodDefinition loadConstant(int value)
    {
        switch (value) {
            case -1:
                instructionList.add(new InsnNode(ICONST_M1));
                break;
            case 0:
                instructionList.add(new InsnNode(ICONST_0));
                break;
            case 1:
                instructionList.add(new InsnNode(ICONST_1));
                break;
            case 2:
                instructionList.add(new InsnNode(ICONST_2));
                break;
            case 3:
                instructionList.add(new InsnNode(ICONST_3));
                break;
            case 4:
                instructionList.add(new InsnNode(ICONST_4));
                break;
            case 5:
                instructionList.add(new InsnNode(ICONST_5));
                break;
            default:
                instructionList.add(new LdcInsnNode(value));
                break;
        }
View Full Code Here

                case 'B':
                case 'Z':
                case 'S':
                case 'C':
                case 'I':
                    instructionList.add(new InsnNode(ICONST_0));
                    break;
                case 'F':
                    instructionList.add(new InsnNode(FCONST_0));
                    break;
                case 'D':
                    instructionList.add(new InsnNode(DCONST_0));
                    break;
                case 'J':
                    instructionList.add(new InsnNode(LCONST_0));
                    break;
                default:
                    checkArgument(false, "Unknown type '%s'", variable.getType());
            }
        }
        else {
            instructionList.add(new InsnNode(ACONST_NULL));
        }

        instructionList.add(new VarInsnNode(Type.getType(type.getType()).getOpcode(ISTORE), variable.getSlot()));

        return this;
View Full Code Here

      case RETURN:
      case ARRAYLENGTH:
      case ATHROW:
      case MONITORENTER:
      case MONITOREXIT:
        return new InsnNode(opcode);

      case ILOAD:
      case FLOAD:
      case DLOAD:
      case LLOAD:
View Full Code Here

TOP

Related Classes of org.objectweb.asm.tree.InsnNode

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.