Example usage for org.objectweb.asm MethodVisitor visitIntInsn

List of usage examples for org.objectweb.asm MethodVisitor visitIntInsn

Introduction

In this page you can find the example usage for org.objectweb.asm MethodVisitor visitIntInsn.

Prototype

public void visitIntInsn(final int opcode, final int operand) 

Source Link

Document

Visits an instruction with a single int operand.

Usage

From source file:dijkstra.gen.DijkstraCodeGenerator.java

License:Open Source License

public byte[] visit(FunctionCallNode funCallNode) {
    final MethodVisitor mv = mvStack.peek();
    final String methodName = funCallNode.getId().getName();
    final StringBuilder sig = new StringBuilder();
    if (funCallNode.getId().symbol instanceof FunctionSymbol) {
        final FunctionSymbol fSymbol = ((FunctionSymbol) funCallNode.getId().symbol);
        final List<Symbol> params = fSymbol.getParamSymbols();
        final List<ASTNode> args = funCallNode.getArgs();
        sig.append('(');
        for (int i = 0; i < params.size(); i++) {
            DijkstraType paramType = params.get(i).getType();
            if (paramType == DijkstraType.INT) {
                sig.append('J');
            } else if (paramType == DijkstraType.FLOAT) {
                sig.append('D');
            } else {
                sig.append('Z');
            }//from  ww  w . j  a  va 2  s. com
        }
        int paramIndex = 0;
        for (ASTNode arg : args) {
            arg.accept(this);
            if (arg.nodeType == FUNCALL) {
                paramIndex += ((FunctionSymbol) ((FunctionCallNode) arg).getId().symbol).getReturnTypes().size()
                        - 1;
            } else if (params.get(paramIndex).getType() == DijkstraType.INT
                    && arg.getType() == DijkstraType.FLOAT) {
                mv.visitInsn(D2L);
            } else if (params.get(paramIndex).getType() == DijkstraType.FLOAT
                    && arg.getType() == DijkstraType.INT) {
                mv.visitInsn(L2D);
            }
            paramIndex++;
        }
        sig.append(')');
        sig.append("[Ljava/lang/Object;");

        mv.visitMethodInsn(INVOKESTATIC, classPackage + "/" + programName, methodName, sig.toString(), false);
        returnArrayStack.push(new ArraySymbol(null, UNDEFINED));
        mv.visitVarInsn(ASTORE, JVMInfo.getAddressForSymbol(returnArrayStack.peek()));
        for (int i = 0; i < fSymbol.getReturnTypes().size(); i++) {
            // Load the only element in the array and put it on the stack
            mv.visitVarInsn(ALOAD, JVMInfo.getAddressForSymbol(returnArrayStack.peek()));
            mv.visitIntInsn(SIPUSH, i);
            mv.visitInsn(AALOAD);
            DijkstraType retType = fSymbol.getReturnTypes().get(i);
            if (retType == DijkstraType.INT) {
                mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
                mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false);
            } else if (retType == DijkstraType.FLOAT) {
                mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
                mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
            } else {
                mv.visitTypeInsn(CHECKCAST, "java/lang/Boolean");
                mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false);
            }
        }
        returnArrayStack.pop();
    } else {
        final ClassSymbol cSymbol = ((ClassSymbol) funCallNode.getId().symbol);
        final List<Symbol> properties = cSymbol.getPropertySymbols();
        final List<ASTNode> args = funCallNode.getArgs();
        mv.visitTypeInsn(NEW, classPackage + "/" + cSymbol.getId());
        mv.visitInsn(DUP);
        sig.append('(');
        for (int i = 0; i < properties.size(); i++) {
            DijkstraType paramType = properties.get(i).getType();
            if (paramType == DijkstraType.INT) {
                sig.append('J');
            } else if (paramType == DijkstraType.FLOAT) {
                sig.append('D');
            } else {
                sig.append('Z');
            }
        }
        int paramIndex = 0;
        for (ASTNode arg : args) {
            arg.accept(this);
            if (arg.nodeType == FUNCALL) {
                paramIndex += ((FunctionSymbol) ((FunctionCallNode) arg).getId().symbol).getReturnTypes().size()
                        - 1;
            } else if (properties.get(paramIndex).getType() == DijkstraType.INT
                    && arg.getType() == DijkstraType.FLOAT) {
                mv.visitInsn(D2L);
            } else if (properties.get(paramIndex).getType() == DijkstraType.FLOAT
                    && arg.getType() == DijkstraType.INT) {
                mv.visitInsn(L2D);
            }
            paramIndex++;
        }
        sig.append(')');
        sig.append('V');

        mv.visitMethodInsn(INVOKESPECIAL, classPackage + "/" + cSymbol.getId(), "<init>", sig.toString(),
                false);
    }

    return null;
}

From source file:dijkstra.gen.DijkstraCodeGenerator.java

License:Open Source License

public byte[] visit(ReturnNode returnNode) {
    final MethodVisitor mv = mvStack.peek();
    for (ASTNode child : returnNode.children) {
        mv.visitVarInsn(ALOAD, JVMInfo.getAddressForSymbol(returnArrayStack.peek()));
        // What index are we storing it in
        int indexAddr = JVMInfo.getAddressForSymbol(returnIndexStack.peek());
        mv.visitVarInsn(ILOAD, indexAddr);
        child.accept(this);
        if (child.nodeType == FUNCALL) {
            final List<DijkstraType> returnTypes = ((FunctionSymbol) ((FunctionCallNode) child).getId().symbol)
                    .getReturnTypes();/*from  www.  j  av a 2  s . co  m*/
            final Stack<Symbol> returnValues = new Stack<Symbol>();
            for (int i = returnTypes.size() - 1; i >= 0; i--) {
                returnValues.push(new Symbol(null, UNDEFINED));
                if (returnTypes.get(i) == DijkstraType.INT) {
                    mv.visitVarInsn(LSTORE, JVMInfo.getAddressForSymbol(returnValues.peek()));
                } else if (returnTypes.get(i) == DijkstraType.FLOAT) {
                    mv.visitVarInsn(DSTORE, JVMInfo.getAddressForSymbol(returnValues.peek()));
                } else {
                    // boolean
                    mv.visitVarInsn(ISTORE, JVMInfo.getAddressForSymbol(returnValues.peek()));
                }
            }
            for (int i = 0; i < returnTypes.size(); i++) {
                // Load the pointer to the array
                mv.visitVarInsn(ALOAD, JVMInfo.getAddressForSymbol(returnArrayStack.peek()));
                mv.visitIntInsn(SIPUSH, i);

                if (returnTypes.get(i) == DijkstraType.INT) {
                    mv.visitVarInsn(LLOAD, JVMInfo.getAddressForSymbol(returnValues.peek()));
                    mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
                } else if (returnTypes.get(i) == DijkstraType.FLOAT) {
                    mv.visitVarInsn(DLOAD, JVMInfo.getAddressForSymbol(returnValues.peek()));
                    mv.visitMethodInsn(INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;",
                            false);
                } else {
                    // boolean
                    mv.visitVarInsn(ILOAD, JVMInfo.getAddressForSymbol(returnValues.peek()));
                    mv.visitMethodInsn(INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;",
                            false);
                }
                mv.visitInsn(AASTORE);
                // Increment the return index
                mv.visitIincInsn(indexAddr, 1);
                returnValues.pop();
            }
        } else {
            DijkstraType retType = child.getType();
            if (retType == DijkstraType.INT) {
                mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
            } else if (retType == DijkstraType.FLOAT) {
                mv.visitMethodInsn(INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
            } else {
                mv.visitMethodInsn(INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;",
                        false);
            }
            mv.visitInsn(AASTORE);
            // Increment the return index
            mv.visitIincInsn(indexAddr, 1);
        }
    }
    return null;
}

From source file:dodola.anole.lib.InstantRunTransform.java

License:Apache License

/**
 * Use asm to generate a concrete subclass of the AppPathLoaderImpl class.
 * It only implements one method :/*from www.  j a v a 2 s  . co  m*/
 * String[] getPatchedClasses();
 * <p>
 * The method is supposed to return the list of classes that were patched in this iteration.
 * This will be used by the InstantRun runtime to load all patched classes and register them
 * as overrides on the original classes.2 class files.
 *
 * @param patchFileContents list of patched class names.
 * @param outputDir         output directory where to generate the .class file in.
 * @return the generated .class files
 */
public static File writePatchFileContents(List<String> patchFileContents, File outputDir) {

    ClassWriter cw = new ClassWriter(0);
    MethodVisitor mv;

    cw.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, IncrementalVisitor.APP_PATCHES_LOADER_IMPL,
            null, IncrementalVisitor.ABSTRACT_PATCHES_LOADER_IMPL, null);

    {
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
        mv.visitCode();
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, IncrementalVisitor.ABSTRACT_PATCHES_LOADER_IMPL, "<init>",
                "()V", false);
        mv.visitInsn(Opcodes.RETURN);
        mv.visitMaxs(1, 1);
        mv.visitEnd();
    }
    {
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getPatchedClasses", "()[Ljava/lang/String;", null, null);
        mv.visitCode();
        mv.visitIntInsn(Opcodes.BIPUSH, patchFileContents.size());
        mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String");
        for (int index = 0; index < patchFileContents.size(); index++) {
            mv.visitInsn(Opcodes.DUP);
            mv.visitIntInsn(Opcodes.BIPUSH, index);
            mv.visitLdcInsn(patchFileContents.get(index));
            mv.visitInsn(Opcodes.AASTORE);
        }
        mv.visitInsn(Opcodes.ARETURN);
        mv.visitMaxs(4, 1);
        mv.visitEnd();
    }
    cw.visitEnd();

    byte[] classBytes = cw.toByteArray();
    File outputFile = new File(outputDir, IncrementalVisitor.APP_PATCHES_LOADER_IMPL + ".class");
    try {
        Files.createParentDirs(outputFile);
        Files.write(classBytes, outputFile);
        // add the files to the list of files to be processed by subsequent tasks.
        return outputFile;
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}

From source file:edu.illinois.nondex.instr.PriorityBlockingQueueShufflingAdder.java

License:Open Source License

public void addToString() {
    MethodVisitor mv = super.visitMethod(Opcodes.ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null);
    mv.visitCode();/*from  www  . j  ava2 s  .c om*/
    Label l0 = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    mv.visitTryCatchBlock(l0, l1, l2, null);
    Label l3 = new Label();
    Label l4 = new Label();
    mv.visitTryCatchBlock(l3, l4, l2, null);
    Label l5 = new Label();
    mv.visitTryCatchBlock(l2, l5, l2, null);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, "java/util/concurrent/PriorityBlockingQueue", "lock",
            "Ljava/util/concurrent/locks/ReentrantLock;");
    mv.visitVarInsn(Opcodes.ASTORE, 1);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/concurrent/locks/ReentrantLock", "lock", "()V", false);
    mv.visitLabel(l0);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, "java/util/concurrent/PriorityBlockingQueue", "size", "I");
    mv.visitVarInsn(Opcodes.ISTORE, 2);
    mv.visitVarInsn(Opcodes.ILOAD, 2);
    mv.visitJumpInsn(Opcodes.IFNE, l3);
    mv.visitLdcInsn("[]");
    mv.visitVarInsn(Opcodes.ASTORE, 3);
    mv.visitLabel(l1);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/concurrent/locks/ReentrantLock", "unlock", "()V",
            false);
    mv.visitVarInsn(Opcodes.ALOAD, 3);
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitLabel(l3);
    mv.visitFrame(Opcodes.F_APPEND, 2,
            new Object[] { "java/util/concurrent/locks/ReentrantLock", Opcodes.INTEGER }, 0, null);
    mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
    mv.visitInsn(Opcodes.DUP);
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V", false);
    mv.visitVarInsn(Opcodes.ASTORE, 3);
    mv.visitVarInsn(Opcodes.ALOAD, 3);
    mv.visitIntInsn(Opcodes.BIPUSH, 91);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(C)Ljava/lang/StringBuilder;", false);
    mv.visitInsn(Opcodes.POP);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, "java/util/concurrent/PriorityBlockingQueue", "queue",
            "[Ljava/lang/Object;");
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "[Ljava/lang/Object;", "clone", "()Ljava/lang/Object;", false);
    mv.visitTypeInsn(Opcodes.CHECKCAST, "[Ljava/lang/Object;");
    mv.visitVarInsn(Opcodes.ASTORE, 4);
    mv.visitVarInsn(Opcodes.ALOAD, 4);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, "edu/illinois/nondex/shuffling/ControlNondeterminism", "shuffle",
            "([Ljava/lang/Object;)[Ljava/lang/Object;", false);
    mv.visitVarInsn(Opcodes.ASTORE, 4);
    mv.visitInsn(Opcodes.ICONST_0);
    mv.visitVarInsn(Opcodes.ISTORE, 5);
    Label l6 = new Label();
    mv.visitLabel(l6);
    mv.visitFrame(Opcodes.F_APPEND, 3,
            new Object[] { "java/lang/StringBuilder", "[Ljava/lang/Object;", Opcodes.INTEGER }, 0, null);
    mv.visitVarInsn(Opcodes.ILOAD, 5);
    mv.visitVarInsn(Opcodes.ILOAD, 2);
    Label l7 = new Label();
    mv.visitJumpInsn(Opcodes.IF_ICMPGE, l7);
    mv.visitVarInsn(Opcodes.ALOAD, 4);
    mv.visitVarInsn(Opcodes.ILOAD, 5);
    mv.visitInsn(Opcodes.AALOAD);
    mv.visitVarInsn(Opcodes.ASTORE, 6);
    mv.visitVarInsn(Opcodes.ALOAD, 3);
    mv.visitVarInsn(Opcodes.ALOAD, 6);
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    Label l8 = new Label();
    mv.visitJumpInsn(Opcodes.IF_ACMPNE, l8);
    mv.visitLdcInsn("(this Collection)");
    Label l9 = new Label();
    mv.visitJumpInsn(Opcodes.GOTO, l9);
    mv.visitLabel(l8);
    mv.visitFrame(Opcodes.F_FULL, 7,
            new Object[] { "java/util/concurrent/PriorityBlockingQueue",
                    "java/util/concurrent/locks/ReentrantLock", Opcodes.INTEGER, "java/lang/StringBuilder",
                    "[Ljava/lang/Object;", Opcodes.INTEGER, "java/lang/Object" },
            1, new Object[] { "java/lang/StringBuilder" });
    mv.visitVarInsn(Opcodes.ALOAD, 6);
    mv.visitLabel(l9);
    mv.visitFrame(Opcodes.F_FULL, 7,
            new Object[] { "java/util/concurrent/PriorityBlockingQueue",
                    "java/util/concurrent/locks/ReentrantLock", Opcodes.INTEGER, "java/lang/StringBuilder",
                    "[Ljava/lang/Object;", Opcodes.INTEGER, "java/lang/Object" },
            2, new Object[] { "java/lang/StringBuilder", "java/lang/Object" });
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/Object;)Ljava/lang/StringBuilder;", false);
    mv.visitInsn(Opcodes.POP);
    mv.visitVarInsn(Opcodes.ILOAD, 5);
    mv.visitVarInsn(Opcodes.ILOAD, 2);
    mv.visitInsn(Opcodes.ICONST_1);
    mv.visitInsn(Opcodes.ISUB);
    Label l10 = new Label();
    mv.visitJumpInsn(Opcodes.IF_ICMPEQ, l10);
    mv.visitVarInsn(Opcodes.ALOAD, 3);
    mv.visitIntInsn(Opcodes.BIPUSH, 44);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(C)Ljava/lang/StringBuilder;", false);
    mv.visitIntInsn(Opcodes.BIPUSH, 32);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(C)Ljava/lang/StringBuilder;", false);
    mv.visitInsn(Opcodes.POP);
    mv.visitLabel(l10);
    mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
    mv.visitIincInsn(5, 1);
    mv.visitJumpInsn(Opcodes.GOTO, l6);
    mv.visitLabel(l7);
    mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
    mv.visitVarInsn(Opcodes.ALOAD, 3);
    mv.visitIntInsn(Opcodes.BIPUSH, 93);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(C)Ljava/lang/StringBuilder;", false);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;",
            false);
    mv.visitVarInsn(Opcodes.ASTORE, 5);
    mv.visitLabel(l4);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/concurrent/locks/ReentrantLock", "unlock", "()V",
            false);
    mv.visitVarInsn(Opcodes.ALOAD, 5);
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitLabel(l2);
    mv.visitFrame(Opcodes.F_FULL, 2, new Object[] { "java/util/concurrent/PriorityBlockingQueue",
            "java/util/concurrent/locks/ReentrantLock" }, 1, new Object[] { "java/lang/Throwable" });
    mv.visitVarInsn(Opcodes.ASTORE, 7);
    mv.visitLabel(l5);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/concurrent/locks/ReentrantLock", "unlock", "()V",
            false);
    mv.visitVarInsn(Opcodes.ALOAD, 7);
    mv.visitInsn(Opcodes.ATHROW);
    mv.visitMaxs(3, 8);
    mv.visitEnd();
}

From source file:formatasm.FormatASM.java

License:Open Source License

public static byte[] generateBytes(String klazz, String subklazz, List<Spec> specs) {
    klazz = klazz.replace('.', '/');
    subklazz = subklazz.replace('.', '/');

    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
    MethodVisitor mv;

    cw.visit(V1_7, ACC_PUBLIC + ACC_SUPER, subklazz, null, klazz, null);

    {//from   w  ww.j  a v  a2s.  c  o  m
        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
        mv.visitCode();
        mv.visitVarInsn(ALOAD, 0);
        mv.visitMethodInsn(INVOKESPECIAL, klazz, "<init>", "()V");
        mv.visitInsn(RETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }

    {
        mv = cw.visitMethod(ACC_PUBLIC + ACC_VARARGS, "format", "([Ljava/lang/Object;)Ljava/lang/String;", null,
                null);

        /// StringBuilder sb = new StringBuilder();
        mv.visitCode();
        mv.visitTypeInsn(NEW, "java/lang/StringBuilder");
        mv.visitInsn(DUP);
        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
        mv.visitVarInsn(ASTORE, 2);

        for (Spec spec : specs) {
            switch (spec.type) {
            case CONTENT:
                copyTemplateASM(klazz, mv, spec.begin, spec.end);
                // Skip further processing
                continue;

            case PERCENT:
                mv.visitVarInsn(ALOAD, 2);
                mv.visitIntInsn(BIPUSH, '%');
                mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
                        "(C)Ljava/lang/StringBuilder;");
                mv.visitInsn(POP);
                // Skip further processing
                continue;

            case INT:
                formatIntegerASM(mv, spec);
                break;

            case INT_HEX:
                formatHexidecimalASM(mv, spec);
                break;

            case OCTAL:
                formatOctalASM(mv, spec);
                break;

            case BOOL:
            case CHAR:
                // text = args[?].toString();
                mv.visitVarInsn(ALOAD, 1);
                mv.visitIntInsn(BIPUSH, spec.index);
                mv.visitInsn(AALOAD);
                mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;");
                mv.visitVarInsn(ASTORE, 3);
                break;

            case STRING:
                // text = (String) args[?]
                mv.visitVarInsn(ALOAD, 1);
                mv.visitIntInsn(BIPUSH, spec.index);
                mv.visitInsn(AALOAD);
                mv.visitTypeInsn(CHECKCAST, "java/lang/String");
                mv.visitVarInsn(ASTORE, 3);
                break;

            case DATETIME:
                formatDateTimeASM(mv, spec);
                break;

            default:
                break;
            }

            if (spec.upper && spec.type != Type.DATETIME) {
                toUpperCaseASM(mv);
            }

            if (spec.width > 0 && !spec.leftFlag) {
                addWidthASM(mv, spec);
            }

            appendTextASM(mv);

            if (spec.width > 0 && spec.leftFlag) {
                addWidthASM(mv, spec);
            }
        }

        /// return sb.toString();
        mv.visitVarInsn(ALOAD, 2);
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
        mv.visitInsn(ARETURN);

        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }
    cw.visitEnd();

    return cw.toByteArray();
}

From source file:formatasm.FormatASM.java

License:Open Source License

public static void copyTemplateASM(String klazz, MethodVisitor mv, int begin, int end) {
    mv.visitVarInsn(ALOAD, 2);/*from   www  . j  a  v a2  s  .  co  m*/
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, klazz, "template", "Ljava/lang/String;");
    mv.visitIntInsn(BIPUSH, begin);
    mv.visitIntInsn(BIPUSH, end);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "substring", "(II)Ljava/lang/String;");
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
    mv.visitInsn(POP);
}

From source file:formatasm.FormatASM.java

License:Open Source License

public static void formatIntegerASM(MethodVisitor mv, Spec spec) {
    mv.visitVarInsn(ALOAD, 1);/*from w  ww.j  a  v a2 s  .c  o m*/
    mv.visitIntInsn(BIPUSH, spec.index);
    mv.visitInsn(AALOAD);
    mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
    mv.visitInsn(spec.parensFlag ? ICONST_1 : ICONST_0);
    mv.visitInsn(spec.groupFlag ? ICONST_1 : ICONST_0);
    mv.visitInsn(spec.plusFlag ? ICONST_1 : ICONST_0);
    mv.visitInsn(spec.spaceFlag ? ICONST_1 : ICONST_0);
    mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatInteger",
            "(Ljava/lang/Integer;ZZZZ)Ljava/lang/String;");
    mv.visitVarInsn(ASTORE, 3);
}

From source file:formatasm.FormatASM.java

License:Open Source License

public static void formatDateTimeASM(MethodVisitor mv, Spec spec) {
    mv.visitVarInsn(ALOAD, 1);/*from ww  w.j a va2  s  . c  o  m*/
    mv.visitIntInsn(BIPUSH, spec.index);
    mv.visitInsn(AALOAD);
    mv.visitInsn(spec.upper ? ICONST_1 : ICONST_0);
    mv.visitIntInsn(BIPUSH, spec.datetime);
    mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatDateTime",
            "(Ljava/lang/Object;ZC)Ljava/lang/String;");
    mv.visitVarInsn(ASTORE, 3);
}

From source file:formatasm.FormatASM.java

License:Open Source License

public static void formatHexidecimalASM(MethodVisitor mv, Spec spec) {
    mv.visitVarInsn(ALOAD, 1);//from  w  w  w  .  java  2  s .c o m
    mv.visitIntInsn(BIPUSH, spec.index);
    mv.visitInsn(AALOAD);
    mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
    mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatHexidecimal",
            "(Ljava/lang/Integer;)Ljava/lang/String;");
    mv.visitVarInsn(ASTORE, 3);
}

From source file:formatasm.FormatASM.java

License:Open Source License

public static void formatOctalASM(MethodVisitor mv, Spec spec) {
    mv.visitVarInsn(ALOAD, 1);/*from  www  .j a  va 2 s .c om*/
    mv.visitIntInsn(BIPUSH, spec.index);
    mv.visitInsn(AALOAD);
    mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
    mv.visitMethodInsn(INVOKESTATIC, "formatasm/FormatASM", "formatOctal",
            "(Ljava/lang/Integer;)Ljava/lang/String;");
    mv.visitVarInsn(ASTORE, 3);
}