List of usage examples for org.objectweb.asm MethodVisitor visitMaxs
public void visitMaxs(final int maxStack, final int maxLocals)
From source file:erjang.EFun.java
License:Apache License
static void make_encode_method_for_exported(ClassWriter cw, String className, int arity) { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "encode", "(" + Type.getDescriptor(EOutputStream.class) + ")V", null, null); mv.visitCode();//from ww w . jav a 2 s .c o m mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, className, "module_name", EATOM_DESC); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, className, "function_name", EATOM_DESC); mv.visitLdcInsn(new Integer(arity)); mv.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(EOutputStream.class), "write_external_fun", "(" + EATOM_DESC + EATOM_DESC + "I)V"); mv.visitInsn(RETURN); mv.visitMaxs(4, 1); mv.visitEnd(); }
From source file:erjang.ETuple.java
License:Apache License
private static void create_tuple_copy(int i, ClassAdapter cw, String this_class_name, String super_class_name) { MethodVisitor mv; make_blank_bridge(cw, this_class_name, super_class_name); mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "blank", "()L" + this_class_name + ";", null, null); mv.visitCode();/*from w ww . ja v a 2 s.co m*/ mv.visitTypeInsn(Opcodes.NEW, this_class_name); mv.visitInsn(Opcodes.DUP); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, this_class_name, "<init>", "()V"); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(3, 3); mv.visitEnd(); }
From source file:erjang.ETuple.java
License:Apache License
private static void make_blank_bridge(ClassAdapter cw, String this_class_name, String super_class_name) { MethodVisitor mv; mv = cw.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_SYNTHETIC | Opcodes.ACC_BRIDGE, "blank", "()L" + super_class_name + ";", null, null); mv.visitCode();/* w w w .j av a 2 s . c o m*/ mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, this_class_name, "blank", "()L" + this_class_name + ";"); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:erjang.ETuple.java
License:Apache License
private static void create_tuple_nth(int n_cells, ClassAdapter cw, String this_class_name) { MethodVisitor mv; mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "elm", "(I)" + ETERM_TYPE.getDescriptor(), null, null); mv.visitCode();//from w ww. ja v a 2 s .co m Label dflt = new Label(); Label[] labels = new Label[n_cells]; for (int i = 0; i < n_cells; i++) { labels[i] = new Label(); } mv.visitVarInsn(Opcodes.ILOAD, 1); mv.visitTableSwitchInsn(1, n_cells, dflt, labels); for (int zbase = 0; zbase < n_cells; zbase++) { mv.visitLabel(labels[zbase]); mv.visitVarInsn(Opcodes.ALOAD, 0); // load this String field = "elem" + (zbase + 1); mv.visitFieldInsn(Opcodes.GETFIELD, this_class_name, field, ETERM_TYPE.getDescriptor()); mv.visitInsn(Opcodes.ARETURN); } mv.visitLabel(dflt); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ILOAD, 1); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, ETUPLE_NAME, "bad_nth", "(I)" + ETERM_TYPE.getDescriptor()); mv.visitInsn(Opcodes.ARETURN); // make compiler happy mv.visitMaxs(3, 2); mv.visitEnd(); }
From source file:erjang.ETuple.java
License:Apache License
private static void create_tuple_set(int n_cells, ClassAdapter cw, String this_class_name) { MethodVisitor mv; mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "set", "(I" + ETERM_TYPE.getDescriptor() + ")V", null, null); mv.visitCode();// w w w. ja v a 2 s . c om Label dflt = new Label(); Label[] labels = new Label[n_cells]; for (int i = 0; i < n_cells; i++) { labels[i] = new Label(); } mv.visitVarInsn(Opcodes.ILOAD, 1); mv.visitTableSwitchInsn(1, n_cells, dflt, labels); for (int zbase = 0; zbase < n_cells; zbase++) { mv.visitLabel(labels[zbase]); mv.visitVarInsn(Opcodes.ALOAD, 0); // load this mv.visitVarInsn(Opcodes.ALOAD, 2); // load term String field = "elem" + (zbase + 1); mv.visitFieldInsn(Opcodes.PUTFIELD, this_class_name, field, ETERM_TYPE.getDescriptor()); mv.visitInsn(Opcodes.RETURN); } mv.visitLabel(dflt); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ILOAD, 1); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, ETUPLE_NAME, "bad_nth", "(I)" + ETERM_TYPE.getDescriptor()); mv.visitInsn(Opcodes.POP); mv.visitInsn(Opcodes.RETURN); // make compiler happy mv.visitMaxs(3, 3); mv.visitEnd(); }
From source file:erjang.ETuple.java
License:Apache License
private static void create_count(ClassAdapter cw, int n) { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "arity", "()I", null, null); mv.visitCode();/*from w ww .j av a 2s. c om*/ if (n <= 5) { mv.visitInsn(Opcodes.ICONST_0 + n); } else { mv.visitLdcInsn(new Integer(n)); } mv.visitInsn(Opcodes.IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:erjang.ETuple.java
License:Apache License
private static void create_cast(ClassAdapter cw, int n) { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "cast", "(L" + ETUPLE_NAME + ";)L" + ETUPLE_NAME + n + ";", null, null); mv.visitCode();// ww w . j a va2 s.c o m mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, ETUPLE_NAME, "arity", "()I"); if (n <= 5) { mv.visitInsn(Opcodes.ICONST_0 + n); } else { mv.visitLdcInsn(new Integer(n)); } Label fail = new Label(); mv.visitJumpInsn(Opcodes.IF_ICMPNE, 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_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();/*from ww w. j av a 2s . c o m*/ mv.visitVarInsn(Opcodes.ALOAD, 0); 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();//from w w w .j av a 2s. c o m mv.visitVarInsn(Opcodes.ALOAD, 0); // load this mv.visitMethodInsn(Opcodes.INVOKESPECIAL, super_class_name, "<init>", "()V"); mv.visitInsn(Opcodes.RETURN); 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); {//from ww w . j a v a 2 s. c om 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(); }