List of usage examples for org.objectweb.asm MethodVisitor visitIntInsn
public void visitIntInsn(final int opcode, final int operand)
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); }