List of usage examples for org.objectweb.asm Opcodes DUP
int DUP
To view the source code for org.objectweb.asm Opcodes DUP.
Click Source Link
From source file:org.spongepowered.asm.mixin.injection.callback.CallbackInjector.java
License:MIT License
/** * If this is a ReturnEventInfo AND we are right before a RETURN opcode (so * we can expect the *original* return value to be on the stack, then we dup * the return value into a local var so we can push it later when we invoke * the ReturnEventInfo ctor//from w w w.ja v a2 s .c om * * @param callback callback handle */ private void dupReturnValue(final Callback callback) { if (!callback.isAtReturn) { return; } callback.add(new InsnNode(Opcodes.DUP)); callback.add(new VarInsnNode(callback.target.returnType.getOpcode(Opcodes.ISTORE), callback.marshallVar)); }
From source file:org.summer.aop.ltw.AuxiliaryWeaver.java
License:Open Source License
private int storeArgumentAt(int index, int localSlot) { visitInsn(Opcodes.DUP); pushInteger(index);/*from www.ja v a 2s . c om*/ switch (argTypes[index].getSort()) { case Type.BYTE: visitVarInsn(ILOAD, localSlot); visitMethodInsn(INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;"); break; case Type.SHORT: visitVarInsn(ILOAD, localSlot); visitMethodInsn(INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;"); break; case Type.INT: visitVarInsn(ILOAD, localSlot); visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;"); break; case Type.BOOLEAN: visitVarInsn(ILOAD, localSlot); visitMethodInsn(INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;"); break; case Type.CHAR: visitVarInsn(ILOAD, localSlot); visitMethodInsn(INVOKESTATIC, "java/lang/Character", "valueOf", "(C)Ljava/lang/Character;"); break; case Type.LONG: visitVarInsn(LLOAD, localSlot); ++localSlot; visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;"); break; case Type.FLOAT: visitVarInsn(FLOAD, localSlot); visitMethodInsn(INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;"); break; case Type.DOUBLE: visitVarInsn(DLOAD, localSlot); ++localSlot; visitMethodInsn(INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;"); break; default: visitVarInsn(ALOAD, localSlot); } visitInsn(AASTORE); return localSlot + 1; }
From source file:org.teavm.flavour.regex.bytecode.MatcherClassBuilder.java
License:Apache License
private void buildForkMethod(ClassVisitor cv, String className) { MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC, "fork", "()" + Type.getDescriptor(Matcher.class), null, null);//from w w w .j ava 2s .c o m mv.visitCode(); mv.visitTypeInsn(Opcodes.NEW, className); mv.visitInsn(Opcodes.DUP); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, className, "<init>", "()V", false); mv.visitInsn(Opcodes.DUP); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn(Opcodes.GETFIELD, className, "domain", "I"); mv.visitFieldInsn(Opcodes.PUTFIELD, className, "domain", "I"); mv.visitInsn(Opcodes.DUP); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn(Opcodes.GETFIELD, className, "state", "I"); mv.visitFieldInsn(Opcodes.PUTFIELD, className, "state", "I"); mv.visitInsn(Opcodes.DUP); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn(Opcodes.GETFIELD, className, "index", "I"); mv.visitFieldInsn(Opcodes.PUTFIELD, className, "index", "I"); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(2, 1); mv.visitEnd(); }
From source file:org.teavm.flavour.regex.bytecode.MatcherClassBuilder.java
License:Apache License
private void generateLengthGuard(MethodVisitor mv) { mv.visitVarInsn(Opcodes.ILOAD, 3);//from ww w. ja v a 2 s . co m mv.visitVarInsn(Opcodes.ILOAD, 2); mv.visitInsn(Opcodes.ISUB); mv.visitJumpInsn(Opcodes.IFLE, saveLabel); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitVarInsn(Opcodes.ILOAD, 2); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "charAt", "(I)C", false); mv.visitVarInsn(Opcodes.ISTORE, 6); if (debugMode) { mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", Type.getDescriptor(PrintStream.class)); mv.visitInsn(Opcodes.DUP); mv.visitLdcInsn("DFA <- "); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "print", "(Ljava/lang/String;)V", false); mv.visitInsn(Opcodes.DUP); mv.visitVarInsn(Opcodes.ILOAD, 6); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "print", "(C)V", false); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "()V", false); } }
From source file:org.zoeey.ztpl.compiler.ByteCodeHelper.java
License:LGPL
/** * template// w w w. java 2 s.c om */ public void callClass(String className) { className = ZtplConstant.CLASS_URI + className; mv.visitTypeInsn(Opcodes.NEW, className); mv.visitInsn(Opcodes.DUP); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, className, "<init>", "()V"); // mv.visitVarInsn(Opcodes.ALOAD, VAR_INDEX_WRITER); mv.visitVarInsn(Opcodes.ALOAD, VAR_INDEX_PARAMSMAP); mv.visitVarInsn(Opcodes.ALOAD, VAR_INDEX_ZTPL); mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, ZtplConstant.TEMPLATE_INTERFACE// , "publish", "(Ljava/io/Writer;Ljava/util/Map;Lorg/zoeey/ztpl/Ztpl;)V"); }
From source file:org.zoeey.ztpl.compiler.ByteCodeHelper.java
License:LGPL
/** * /*from w ww .ja v a 2 s . c o m*/ * @param className ?? * @param paramsPos ? * @param pos */ public void callFunction(String className, int paramsPos) { String classPath = className.replace('.', '/'); /** * ? */ mv.visitTypeInsn(Opcodes.NEW, classPath); mv.visitInsn(Opcodes.DUP); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, classPath, "<init>", "()V"); // invoke call() mv.visitVarInsn(Opcodes.ALOAD, paramsPos); mv.visitVarInsn(Opcodes.ALOAD, VAR_INDEX_ZTPL); mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, FunctionAble.class.getName().replace('.', '/'), "call", // "(Lorg/zoeey/ztpl/ParamsMap;Lorg/zoeey/ztpl/Ztpl;)Ljava/lang/String;"); }
From source file:org.zoeey.ztpl.compiler.ByteCodeHelper.java
License:LGPL
/** * ?<br />/*from w w w. j a v a2s.c o m*/ * ? var paramsMap_* = new ParamsMap();<br /> * ex. {echo varA="a" varB="b"} <br /> * ?? map{"varA":"a","varB":"b"} * */ public int newMap() { int pos = tracker.next(); mv.visitTypeInsn(Opcodes.NEW, "org/zoeey/ztpl/ParamsMap"); mv.visitInsn(Opcodes.DUP); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "org/zoeey/ztpl/ParamsMap", "<init>", "()V"); mv.visitVarInsn(Opcodes.ASTORE, pos); return pos; }
From source file:pl.clareo.coroutines.core.ClassTransformer.java
License:Apache License
@SuppressWarnings("unchecked") private static InsnList createDebugFrame(MethodNode coroutine) { InsnList insn = new InsnList(); int nLocals = coroutine.maxLocals; String[] names = new String[nLocals]; List<LocalVariableNode> locals = coroutine.localVariables; fillVariableNames(names, locals);/*from ww w . j av a 2 s . c o m*/ insn.add(new TypeInsnNode(Opcodes.NEW, FRAME_NAME)); insn.add(new InsnNode(Opcodes.DUP)); insn.add(makeInt(nLocals)); insn.add(makeInt(nLocals)); insn.add(new TypeInsnNode(Opcodes.ANEWARRAY, "java/lang/String")); for (LocalVariableNode local : locals) { int i = local.index; String name = names[i]; insn.add(new InsnNode(Opcodes.DUP)); insn.add(makeInt(i)); if (name != null) { insn.add(new LdcInsnNode(name)); } else { insn.add(new InsnNode(Opcodes.ACONST_NULL)); } insn.add(new InsnNode(Opcodes.AASTORE)); } insn.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, FRAME_NAME, "<init>", "(I[Ljava/lang/String;)V")); return insn; }
From source file:pl.clareo.coroutines.core.ClassTransformer.java
License:Apache License
private static InsnList createFrame(MethodNode coroutine) { InsnList insn = new InsnList(); insn.add(new TypeInsnNode(Opcodes.NEW, FRAME_NAME)); insn.add(new InsnNode(Opcodes.DUP)); insn.add(makeInt(coroutine.maxLocals)); insn.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, FRAME_NAME, "<init>", "(I)V")); return insn;/* w w w . j av a 2 s .c o m*/ }
From source file:pl.clareo.coroutines.core.ClassTransformer.java
License:Apache License
private static InsnList loggingInstructions(String ownerName, String loggerField, Level level, Object... messages) {//from w w w . jav a2 s .com InsnList insn = new InsnList(); insn.add(new FieldInsnNode(Opcodes.GETSTATIC, ownerName, loggerField, "Ljava/util/logging/Logger;")); insn.add(new FieldInsnNode(Opcodes.GETSTATIC, "java/util/logging/Level", level.getName(), "Ljava/util/logging/Level;")); // stack: * * insn.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/util/logging/Logger", "isLoggable", "(Ljava/util/logging/Level;)Z")); // stack: * LabelNode exitBranch = new LabelNode(); insn.add(new JumpInsnNode(Opcodes.IFEQ, exitBranch)); // stack: insn.add(new FieldInsnNode(Opcodes.GETSTATIC, ownerName, loggerField, "Ljava/util/logging/Logger;")); insn.add(new FieldInsnNode(Opcodes.GETSTATIC, "java/util/logging/Level", level.getName(), "Ljava/util/logging/Level;")); // stack: * * insn.add(new TypeInsnNode(Opcodes.NEW, "java/lang/StringBuilder")); insn.add(new InsnNode(Opcodes.DUP)); // stack: * * * * String message0 = messages[0].toString(); insn.add(new LdcInsnNode(message0)); // stack: * * * * * insn.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V")); // stack: * * * for (int m = 1; m < messages.length; m++) { Object message = messages[m]; if (message instanceof Number) { insn.add(new VarInsnNode(Opcodes.ALOAD, ((Number) message).intValue())); } else { insn.add(new LdcInsnNode(message.toString())); } // stack: * * * * insn.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/Object;)Ljava/lang/StringBuilder;")); // stack: * * * } insn.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;")); insn.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/util/logging/Logger", "log", "(Ljava/util/logging/Level;Ljava/lang/String;)V")); // stack: insn.add(exitBranch); return insn; }