List of usage examples for org.objectweb.asm MethodVisitor visitLdcInsn
public void visitLdcInsn(final Object value)
From source file:dyco4j.instrumentation.LoggingHelper.java
License:BSD License
public static void emitLogMethodExit(final MethodVisitor mv, final String methodId, final ExitKind exitKind) { mv.visitLdcInsn(methodId); mv.visitLdcInsn(exitKind.getAbbreviatedName()); emitInvokeLog(mv, LOG_METHOD_EXIT);/*from ww w .j a va 2 s.c o m*/ }
From source file:dyco4j.instrumentation.LoggingHelper.java
License:BSD License
public static void emitLogString(final MethodVisitor mv, final String s) { mv.visitLdcInsn(s); emitInvokeLog(mv, LOG_STRING);//w w w . j av a 2 s .co m }
From source file:dyco4j.LoggingHelper.java
License:BSD License
public static int emitLogArgument(final MethodVisitor mv, final int index, final Type argType) { mv.visitLdcInsn(index); int _typeLength = 1; switch (argType.getSort()) { case Type.BOOLEAN: case Type.BYTE: case Type.CHAR: case Type.INT: case Type.SHORT: mv.visitVarInsn(Opcodes.ILOAD, index); break;// ww w. j av a 2 s . c om case Type.LONG: mv.visitVarInsn(Opcodes.LLOAD, index); _typeLength++; break; case Type.FLOAT: mv.visitVarInsn(Opcodes.FLOAD, index); break; case Type.DOUBLE: mv.visitVarInsn(Opcodes.DLOAD, index); _typeLength++; break; case Type.ARRAY: case Type.OBJECT: mv.visitVarInsn(Opcodes.ALOAD, index); break; } emitConvertToString(mv, argType); emitInvokeLog(mv, LOG_ARGUMENT); return _typeLength; }
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 a v a2 s .com 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:edu.ubc.mirrors.holograms.MainEntryAdaptor.java
License:Open Source License
@Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor superVisitor = super.visitMethod(access, name, desc, signature, exceptions); if (superVisitor != null && name.equals("main") && (Opcodes.ACC_STATIC & access) != 0 && desc.equals(mainDesc)) { superVisitor.visitCode();/*www .j a v a2 s .c om*/ superVisitor.visitLdcInsn(Type.getObjectType(className)); superVisitor.visitVarInsn(Opcodes.ALOAD, 0); superVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, Type.getInternalName(ObjectHologram.class), "invokeHologramMainMethod", invokeHologramMainMethodDesc); superVisitor.visitInsn(Opcodes.RETURN); superVisitor.visitMaxs(2, 1); superVisitor.visitEnd(); return null; } else { return superVisitor; } }
From source file:egovframework.rte.itl.webservice.service.impl.EgovWebServiceClassLoaderImpl.java
License:Apache License
private byte[] createServiceEndpointClass(final ServiceEndpointInfo serviceEndpointInfo) throws ClassNotFoundException { String serviceEndpointInterfaceClassName = getServiceEndpointInterfaceClassName( serviceEndpointInfo.getServiceName()); String serviceEndpointClassName = getServiceEndpointClassName(serviceEndpointInfo.getServiceName()); String asmServiceEndpointInterfaceClassName = serviceEndpointInterfaceClassName.replace('.', '/'); String asmServiceEndpointClassName = serviceEndpointClassName.replace('.', '/'); // CHECKSTYLE:ON // ClassWriter classWriter = new ClassWriter(false); ClassWriter classWriter = new ClassWriter(0); classWriter.visit(V1_5, // version ACC_PUBLIC, // access asmServiceEndpointClassName, // name null, // signature "java/lang/Object", // superName new String[] { asmServiceEndpointInterfaceClassName }); // interfaces // Create Annotation AnnotationVisitor annotationVisitor = classWriter.visitAnnotation(DESC_OF_WEB_SERVICE, true); annotationVisitor.visit("endpointInterface", serviceEndpointInterfaceClassName); annotationVisitor.visit("targetNamespace", serviceEndpointInfo.getNamespace()); // annotationVisitor.visit("name", // serviceProviderInfo.getServiceName()); annotationVisitor.visit("serviceName", serviceEndpointInfo.getServiceName()); annotationVisitor.visit("portName", serviceEndpointInfo.getPortName()); annotationVisitor.visitEnd();//from w w w .ja v a2 s.c o m // Create Attribute FieldVisitor fieldVisitor = classWriter.visitField(ACC_PUBLIC, // access FIELD_NAME_OF_SERVICE_BRIDGE, // name DESC_OF_SERVICE_BRIDGE_CLASS, // desc null, // signature null); // value fieldVisitor.visitEnd(); // Create Constructor MethodVisitor methodVisitor = classWriter.visitMethod(ACC_PUBLIC, // access "<init>", // name "()V", // desc null, // signature null); // exceptions methodVisitor.visitCode(); methodVisitor.visitVarInsn(ALOAD, 0); methodVisitor.visitMethodInsn(INVOKESPECIAL, // opcode "java/lang/Object", // owner "<init>", // name "()V"); // desc methodVisitor.visitInsn(RETURN); methodVisitor.visitMaxs(1, 1); methodVisitor.visitEnd(); // Create Method ServiceParamInfo returnInfo = serviceEndpointInfo.getReturnInfo(); Collection<ServiceParamInfo> paramInfos = serviceEndpointInfo.getParamInfos(); StringBuffer desc = new StringBuffer("("); StringBuffer signature = new StringBuffer("("); for (ServiceParamInfo info : paramInfos) { Class<?> paramClass = loadClass(info.getType()); org.objectweb.asm.Type paramType = org.objectweb.asm.Type.getType(paramClass); String paramSign = paramType.getDescriptor(); if (info.getMode().equals(OUT) || info.getMode().equals(INOUT)) { if (paramClass.isPrimitive()) { paramClass = wrapperClasses.get(paramClass); paramType = org.objectweb.asm.Type.getType(paramClass); paramSign = paramType.getDescriptor(); } paramClass = Holder.class; paramType = TYPE_OF_HOLDER; paramSign = "Ljavax/xml/ws/Holder<" + paramSign + ">;"; } desc.append(paramType.getDescriptor()); signature.append(paramSign); } desc.append(")"); signature.append(")"); // CHECKSTYLE:OFF org.objectweb.asm.Type returnType = (returnInfo == null ? returnType = org.objectweb.asm.Type.VOID_TYPE : org.objectweb.asm.Type.getType(loadClass(returnInfo.getType()))); // CHECKSTYLE:ON desc.append(returnType.getDescriptor()); signature.append(returnType.getDescriptor()); methodVisitor = classWriter.visitMethod(ACC_PUBLIC, // access serviceEndpointInfo.getOperationName(), // name desc.toString(), // desc signature.toString(), // signature null); // exceptions int mapPosition = paramInfos.size() + 1; methodVisitor.visitCode(); methodVisitor.visitTypeInsn(NEW, "java/util/HashMap"); methodVisitor.visitInsn(DUP); methodVisitor.visitMethodInsn(INVOKESPECIAL, // opcode "java/util/HashMap", // owner "<init>", // name "()V"); // desc methodVisitor.visitVarInsn(ASTORE, mapPosition); int i = 1; for (ServiceParamInfo info : paramInfos) { methodVisitor.visitVarInsn(ALOAD, mapPosition); methodVisitor.visitLdcInsn(info.getName()); methodVisitor.visitVarInsn(ALOAD, i); methodVisitor.visitMethodInsn(INVOKEINTERFACE, // opcode "java/util/Map", // owner "put", // name "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); // desc methodVisitor.visitInsn(POP); i++; } methodVisitor.visitVarInsn(ALOAD, 0); methodVisitor.visitFieldInsn(GETFIELD, // opcode asmServiceEndpointClassName, // owner FIELD_NAME_OF_SERVICE_BRIDGE, // name DESC_OF_SERVICE_BRIDGE_CLASS); // desc methodVisitor.visitVarInsn(ALOAD, mapPosition); methodVisitor.visitMethodInsn(INVOKEINTERFACE, // opcode NAME_OF_SERVICE_BRIDGE_CLASS, // owner "doService", // name "(Ljava/util/Map;)Ljava/lang/Object;"); // desc if (returnInfo != null) { methodVisitor.visitTypeInsn(CHECKCAST, // opcode returnType.getInternalName()); // type methodVisitor.visitInsn(ARETURN); } else { methodVisitor.visitInsn(POP); methodVisitor.visitInsn(RETURN); } methodVisitor.visitMaxs(paramInfos.size(), paramInfos.size() + 2); methodVisitor.visitEnd(); // Class finalize classWriter.visitEnd(); // try // { // DataOutputStream dos = new DataOutputStream( // new FileOutputStream("EgovType" + // serviceProviderInfo.getServiceName() + // "Impl.class")); // dos.write(classWriter.toByteArray()); // dos.close(); // } // catch (IOException e) // { // e.printStackTrace(); // } return classWriter.toByteArray(); }
From source file:enhancer.examples.generator.aop.internal.LoggingGenerator.java
License:Apache License
private void generateMethod(ClassWriter cw, String proxyName, String fieldDesc, Method method) { final String methName = method.getName(); final String methDescr = Type.getMethodDescriptor(method); final String[] methdExcs = getInternalNames(method.getExceptionTypes()); /* Generation start */ final MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, methName, methDescr, null, methdExcs); mv.visitCode();//ww w.j ava 2 s . c o m /* Dump "entry <methog sig>" on the screen */ mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("entry " + method); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); /* Load delegate */ mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, proxyName, DELEGATE, fieldDesc); final Class<?> clazz = method.getDeclaringClass(); final String subjectName = getInternalName(clazz); if (!clazz.isInterface()) { mv.visitTypeInsn(CHECKCAST, subjectName); } /* Load arguments */ int i = 1; for (Type type : getArgumentTypes(method)) { mv.visitVarInsn(type.getOpcode(ILOAD), i); i += type.getSize(); } /* Invoke */ if (clazz.isInterface()) { mv.visitMethodInsn(INVOKEINTERFACE, subjectName, methName, methDescr); } else { mv.visitMethodInsn(INVOKEVIRTUAL, subjectName, methName, methDescr); } /* Return */ mv.visitInsn(getReturnType(method).getOpcode(IRETURN)); /* Generation end */ mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:enhancer.examples.generator.proxy.internal.ServiceProxyGenerator.java
License:Apache License
private void generateInit(ClassWriter cw, String proxyName, String inputName) { /* Generation start */ final MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(" + BC_DESC + ")V", null, null); mv.visitCode();//from www.j a v a 2 s .c om /* Call super constructor */ mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); /* Construct a service handle and store it in a field */ mv.visitVarInsn(ALOAD, 0); mv.visitTypeInsn(NEW, HANDLE); mv.visitInsn(DUP); mv.visitLdcInsn(Type.getType("L" + inputName + ";")); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, HANDLE, "<init>", "(Ljava/lang/Class;Lorg/osgi/framework/BundleContext;)V"); mv.visitFieldInsn(PUTFIELD, proxyName, HANDLE_FIELD, HANDLE_DESC); /* Return */ mv.visitInsn(RETURN); /* Generation end */ mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:erjang.beam.CompilerVisitor.java
License:Apache License
/** * /*www . j av a 2s .co m*/ */ private void generate_classinit() { MethodVisitor mv = cv.visitMethod(ACC_STATIC | ACC_PRIVATE, "<clinit>", "()V", null, null); mv.visitCode(); for (Map.Entry<String, String> ent : funs.entrySet()) { String field = ent.getKey(); String clazz = ent.getValue(); mv.visitTypeInsn(NEW, clazz); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, clazz, "<init>", "()V"); mv.visitFieldInsn(PUTSTATIC, self_type.getInternalName(), field, "L" + funt.get(field) + ";"); } for (Map.Entry<EObject, String> ent : constants.entrySet()) { EObject term = ent.getKey(); term.emit_const(mv); mv.visitFieldInsn(Opcodes.PUTSTATIC, self_type.getInternalName(), ent.getValue(), Type.getType(term.getClass()).getDescriptor()); } cv.visitField(ACC_STATIC | ACC_PRIVATE, "attributes", ESEQ_TYPE.getDescriptor(), null, null); atts.emit_const(mv); mv.visitFieldInsn(Opcodes.PUTSTATIC, self_type.getInternalName(), "attributes", ESEQ_TYPE.getDescriptor()); if (this.module_md5 != null) { cv.visitField(ACC_STATIC, "module_md5", EBINARY_TYPE.getDescriptor(), null, null); module_md5.emit_const(mv); mv.visitFieldInsn(PUTSTATIC, self_type.getInternalName(), "module_md5", EBINARY_TYPE.getDescriptor()); } mv.visitInsn(RETURN); mv.visitMaxs(200, 10); mv.visitEnd(); // make the method module_name mv = cv.visitMethod(ACC_PROTECTED, "module_name", "()Ljava/lang/String;", null, null); mv.visitCode(); mv.visitLdcInsn(this.module_name.getName()); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); // make the method attributes mv = cv.visitMethod(ACC_PROTECTED, "attributes", "()" + ESEQ_TYPE.getDescriptor(), null, null); mv.visitCode(); mv.visitFieldInsn(Opcodes.GETSTATIC, self_type.getInternalName(), "attributes", ESEQ_TYPE.getDescriptor()); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); // make default constructor mv = cv.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, ECOMPILEDMODULE_NAME, "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); mv = cv.visitMethod(ACC_PUBLIC, "registerImportsAndExports", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, ECOMPILEDMODULE_NAME, "registerImportsAndExports", "()V"); for (Lambda l : lambdas_xx.values()) { mv.visitTypeInsn(NEW, Type.getInternalName(LocalFunID.class)); mv.visitInsn(DUP); module_name.emit_const(mv); l.fun.emit_const(mv); push_int(mv, l.arity); push_int(mv, l.old_index); push_int(mv, l.index); push_int(mv, l.old_uniq); mv.visitFieldInsn(GETSTATIC, self_type.getInternalName(), "module_md5", EBINARY_TYPE.getDescriptor()); mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(LocalFunID.class), "<init>", "(" + EATOM_DESC + EATOM_DESC + "IIII" + EBINARY_TYPE.getDescriptor() + ")V"); mv.visitInsn(DUP); cv.visitField(ACC_STATIC, anon_fun_name(l), Type.getDescriptor(LocalFunID.class), null, null) .visitEnd(); mv.visitFieldInsn(PUTSTATIC, self_type.getInternalName(), anon_fun_name(l), Type.getDescriptor(LocalFunID.class)); String mname = EUtil.getJavaName(l.fun, l.arity - l.freevars); String outer_name = self_type.getInternalName(); String inner_name = "FN_" + mname; String full_inner_name = outer_name + "$" + inner_name; mv.visitLdcInsn(full_inner_name.replace('/', '.')); mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Class.class), "forName", "(Ljava/lang/String;)Ljava/lang/Class;"); mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(EModuleManager.class), "register_lambda", "(" + Type.getDescriptor(LocalFunID.class) + Type.getDescriptor(Class.class) + ")V"); } mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:erjang.beam.CompilerVisitor.java
License:Apache License
private void push_int(MethodVisitor mv, int val) { if (val == -1) { mv.visitInsn(ICONST_M1);/*w ww . j a va 2s. c o m*/ } else if (val >= 0 && val <= 5) { mv.visitInsn(ICONST_0 + val); } else { mv.visitLdcInsn(new Integer(val)); } }