List of usage examples for org.objectweb.asm MethodVisitor visitCode
public void visitCode()
From source file:erjang.ETuple.java
License:Apache License
private static void create_cast2(ClassAdapter cw, int n) { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "cast", "(L" + Type.getInternalName(EObject.class) + ";)L" + ETUPLE_NAME + n + ";", null, null); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0);/*from ww w .j a v a 2 s . c o m*/ mv.visitInsn(Opcodes.DUP); mv.visitTypeInsn(Opcodes.INSTANCEOF, ETUPLE_NAME + n); Label fail = new Label(); mv.visitJumpInsn(Opcodes.IFEQ, fail); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitTypeInsn(Opcodes.CHECKCAST, ETUPLE_NAME + n); mv.visitInsn(Opcodes.ARETURN); mv.visitLabel(fail); mv.visitInsn(Opcodes.ACONST_NULL); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(2, 2); mv.visitEnd(); }
From source file:erjang.ETuple.java
License:Apache License
private static void create_constructor(ClassAdapter cw, String super_class_name) { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); // load this mv.visitMethodInsn(Opcodes.INVOKESPECIAL, super_class_name, "<init>", "()V"); mv.visitInsn(Opcodes.RETURN);/* w w w .j av a 2s . c om*/ mv.visitMaxs(1, 1); 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); {/* w w w. j a v a 2 s . co 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:fr.insalyon.citi.golo.compiler.JavaBytecodeGenerationGoloIrVisitor.java
License:Apache License
private void writeModuleState(LocalReference moduleState) { String name = moduleState.getName(); classWriter.visitField(ACC_PRIVATE | ACC_STATIC, name, "Ljava/lang/Object;", null, null).visitEnd(); MethodVisitor mv = classWriter.visitMethod(ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC, name, "()Ljava/lang/Object;", null, null); mv.visitCode(); mv.visitFieldInsn(GETSTATIC, jvmKlass, name, "Ljava/lang/Object;"); mv.visitInsn(ARETURN);/*from w w w.j a v a2 s. c o m*/ mv.visitMaxs(0, 0); mv.visitEnd(); mv = classWriter.visitMethod(ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC, name, "(Ljava/lang/Object;)V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(PUTSTATIC, jvmKlass, name, "Ljava/lang/Object;"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeSetMethod(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "set", "(Ljava/lang/String;Ljava/lang/Object;)Lgololang/GoloStruct;", null, null); visitor.visitCode(); insertPrivateElementCheck(struct, visitor); Label nextCase = new Label(); for (String member : struct.getMembers()) { visitor.visitLdcInsn(member);//ww w. ja v a 2 s. c o m visitor.visitVarInsn(ALOAD, 1); visitor.visitJumpInsn(IF_ACMPNE, nextCase); visitor.visitVarInsn(ALOAD, 0); visitor.visitVarInsn(ALOAD, 2); visitor.visitMethodInsn(INVOKEVIRTUAL, owner, member, "(Ljava/lang/Object;)Lgololang/GoloStruct;"); visitor.visitInsn(ARETURN); visitor.visitLabel(nextCase); nextCase = new Label(); } insertUnknowElementCode(struct, visitor); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeGetMethod(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "get", "(Ljava/lang/String;)Ljava/lang/Object;", null, null);/* w w w .j a v a 2 s. c om*/ visitor.visitCode(); insertPrivateElementCheck(struct, visitor); Label nextCase = new Label(); for (String member : struct.getMembers()) { visitor.visitLdcInsn(member); visitor.visitVarInsn(ALOAD, 1); visitor.visitJumpInsn(IF_ACMPNE, nextCase); visitor.visitVarInsn(ALOAD, 0); visitor.visitMethodInsn(INVOKEVIRTUAL, owner, member, "()Ljava/lang/Object;"); visitor.visitInsn(ARETURN); visitor.visitLabel(nextCase); nextCase = new Label(); } insertUnknowElementCode(struct, visitor); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeValuesMethod(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "values", "()Lgololang/Tuple;", null, null); visitor.visitCode(); loadInteger(visitor, struct.getPublicMembers().size()); visitor.visitTypeInsn(ANEWARRAY, "java/lang/Object"); int index = 0; for (String member : struct.getPublicMembers()) { visitor.visitInsn(DUP);//from w w w. j a va2 s . c om loadInteger(visitor, index); visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, owner, member, "Ljava/lang/Object;"); visitor.visitInsn(AASTORE); index = index + 1; } visitor.visitMethodInsn(INVOKESTATIC, "gololang/Tuple", "fromArray", "([Ljava/lang/Object;)Lgololang/Tuple;"); visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeEquals(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "equals", "(Ljava/lang/Object;)Z", null, null); Label notFrozenLabel = new Label(); Label falseLabel = new Label(); Label sameTypeLabel = new Label(); visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0);/*from w ww .j a v a2 s . c o m*/ visitor.visitFieldInsn(GETFIELD, owner, $_frozen, "Z"); visitor.visitJumpInsn(IFNE, notFrozenLabel); // super.equals() visitor.visitVarInsn(ALOAD, 0); visitor.visitVarInsn(ALOAD, 1); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z"); visitor.visitInsn(IRETURN); // The receiver is frozen visitor.visitLabel(notFrozenLabel); visitor.visitVarInsn(ALOAD, 1); visitor.visitTypeInsn(INSTANCEOF, owner); visitor.visitJumpInsn(IFNE, sameTypeLabel); visitor.visitJumpInsn(GOTO, falseLabel); // The argument is of the same type, too visitor.visitLabel(sameTypeLabel); visitor.visitVarInsn(ALOAD, 1); visitor.visitTypeInsn(CHECKCAST, owner); visitor.visitFieldInsn(GETFIELD, owner, $_frozen, "Z"); visitor.visitJumpInsn(IFEQ, falseLabel); // The argument is not frozen for (String member : struct.getMembers()) { visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, owner, member, "Ljava/lang/Object;"); visitor.visitVarInsn(ALOAD, 1); visitor.visitTypeInsn(CHECKCAST, owner); visitor.visitFieldInsn(GETFIELD, owner, member, "Ljava/lang/Object;"); visitor.visitMethodInsn(INVOKESTATIC, "java/util/Objects", "equals", "(Ljava/lang/Object;Ljava/lang/Object;)Z"); visitor.visitJumpInsn(IFEQ, falseLabel); } visitor.visitInsn(ICONST_1); visitor.visitInsn(IRETURN); // False visitor.visitLabel(falseLabel); visitor.visitInsn(ICONST_0); visitor.visitInsn(IRETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeHashCode(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "hashCode", "()I", null, null); Label notFrozenLabel = new Label(); visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0);/*w w w . j a va 2 s . com*/ visitor.visitFieldInsn(GETFIELD, owner, $_frozen, "Z"); visitor.visitJumpInsn(IFNE, notFrozenLabel); // super.hashCode() visitor.visitVarInsn(ALOAD, 0); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "hashCode", "()I"); visitor.visitInsn(IRETURN); // The receiver is frozen visitor.visitLabel(notFrozenLabel); loadInteger(visitor, struct.getMembers().size()); visitor.visitTypeInsn(ANEWARRAY, "java/lang/Object"); int i = 0; for (String member : struct.getMembers()) { visitor.visitInsn(DUP); loadInteger(visitor, i); visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, owner, member, "Ljava/lang/Object;"); visitor.visitInsn(AASTORE); i = i + 1; } visitor.visitMethodInsn(INVOKESTATIC, "java/util/Objects", "hash", "([Ljava/lang/Object;)I"); visitor.visitInsn(IRETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeCopy(ClassWriter classWriter, Struct struct, boolean frozen) { String owner = struct.getPackageAndClass().toJVMType(); String methodName = frozen ? "frozenCopy" : "copy"; MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, methodName, "()Lgololang/GoloStruct;", null, null);/*from w ww . jav a2s . co m*/ visitor.visitCode(); visitor.visitTypeInsn(NEW, owner); visitor.visitInsn(DUP); for (String member : struct.getMembers()) { visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, owner, member, "Ljava/lang/Object;"); } visitor.visitMethodInsn(INVOKESPECIAL, owner, "<init>", allArgsConstructorSignature(struct)); visitor.visitInsn(DUP); visitor.visitInsn(frozen ? ICONST_1 : ICONST_0); visitor.visitFieldInsn(PUTFIELD, owner, $_frozen, "Z"); visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }