List of usage examples for org.objectweb.asm MethodVisitor visitCode
public void visitCode()
From source file:lapin.comp.asm.ASMByteCodeGenerator.java
License:Open Source License
private void generateClassInitializer(Env env) { MethodVisitor mv = _cw.visitMethod(Opcodes.ACC_STATIC, "<clinit>", "()V", null, null); // field for SELF (static field) mv.visitCode(); mv.visitInsn(Opcodes.ACONST_NULL);// ww w . j a v a 2 s .c o m mv.visitFieldInsn(Opcodes.PUTSTATIC, toInternalName(super.classInfo.classname()), "SELF", toTypeDescriptor(super.classInfo.classname())); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:lapin.comp.asm.ASMByteCodeGenerator.java
License:Open Source License
private void generateConstructor(Env env) { /*/* w w w. jav a 2s .c o m*/ * local variables (reserved) * 0: this * 1: env */ MethodVisitor mv = _cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", //"(Llapin/lang/Env;)V", Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { TYPE_ENV }), null, null); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitLdcInsn(super.classInfo.name().pname()); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "lapin/function/CompiledExpr", "<init>", //"(Ljava/lang/String;)V"); Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { TYPE_STRING })); Iterator it; // fields for constants it = constTable.keySet().iterator(); while (it.hasNext()) { Object key = it.next(); // key: object (const) String val = Data.string(constTable.get(key)); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitLdcInsn(Printer.prin1ToString(key, env)); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "lapin/function/CompiledExpr", "toSexp", Type.getMethodDescriptor(TYPE_OBJECT, new Type[] { TYPE_STRING, TYPE_ENV })); mv.visitFieldInsn(Opcodes.PUTFIELD, toInternalName(super.classInfo.classname()), val, TYPE_OBJECT.getDescriptor()); } // fields for vars it = varTable.keySet().iterator(); while (it.hasNext()) { Object key = it.next(); // key: symbol (var) String val = Data.string(varTable.get(key)); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitLdcInsn(Printer.prin1ToString(key, env)); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "lapin/function/CompiledExpr", "toSexp", Type.getMethodDescriptor(TYPE_OBJECT, new Type[] { TYPE_STRING, TYPE_ENV })); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "lapin/lang/Data", "symbol", Type.getMethodDescriptor(TYPE_SYMBOL, new Type[] { TYPE_OBJECT })); mv.visitFieldInsn(Opcodes.PUTFIELD, toInternalName(super.classInfo.classname()), val, TYPE_SYMBOL.getDescriptor()); } // fields for lambdaLists it = llTable.keySet().iterator(); while (it.hasNext()) { Object key = it.next(); // key: lambdaList String val = Data.string(llTable.get(key)); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitLdcInsn(Printer.prin1ToString(Data.lambdaList(key).params(), env)); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "lapin/function/CompiledExpr", "toLambdaList", Type.getMethodDescriptor(TYPE_LAMBDA_LIST, new Type[] { TYPE_STRING, TYPE_ENV })); mv.visitFieldInsn(Opcodes.PUTFIELD, toInternalName(super.classInfo.classname()), val, TYPE_LAMBDA_LIST.getDescriptor()); } // field for SELF (static field) mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn(Opcodes.PUTSTATIC, toInternalName(super.classInfo.classname()), "SELF", toTypeDescriptor(super.classInfo.classname())); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate constructor of the generated class * /*ww w .j a v a 2 s . c o m*/ * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class */ private void generateConstructor(ClassWriter p_ClassWriter, String p_ClassName) { MethodVisitor mv; // Generate "<init>(LdapBeanManager, LdapObjectManager, LdapObject)" mv = p_ClassWriter.visitMethod(ACC_PUBLIC, "<init>", "(Lldapbeans/bean/LdapBeanManager;" + "Lldapbeans/bean/LdapObjectManager;" + "Lldapbeans/bean/LdapObject;)V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(PUTFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapBeanManager", "Lldapbeans/bean/LdapBeanManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(PUTFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObjectManager", "Lldapbeans/bean/LdapObjectManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 3); mv.visitFieldInsn(PUTFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObject", "Lldapbeans/bean/LdapObject;"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate a method of the generated class * //from w ww.j a v a2 s .c o m * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class * @param p_Method * the method to generate * @param p_MethodDescriptor * The method descriptor */ private void generateMethodGetDn(ClassWriter p_ClassWriter, String p_ClassName, Method p_Method, String p_MethodDescriptor) { MethodVisitor mv = p_ClassWriter.visitMethod(ACC_PUBLIC, p_Method.getName(), p_MethodDescriptor, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObject", "Lldapbeans/bean/LdapObject;"); mv.visitMethodInsn(INVOKEVIRTUAL, "ldapbeans/bean/LdapObject", "getDn", "()Ljava/lang/String;"); mv.visitInsn(ARETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate a method of the generated class * /* ww w.j a v a 2 s .c om*/ * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class * @param p_Method * the method to generate * @param p_MethodDescriptor * The method descriptor */ private void generateMethodStore(ClassWriter p_ClassWriter, String p_ClassName, Method p_Method, String p_MethodDescriptor) { MethodVisitor mv = p_ClassWriter.visitMethod(ACC_PUBLIC, "store", "()V", null, new String[] { "javax/naming/NamingException" }); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObjectManager", "Lldapbeans/bean/LdapObjectManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObject", "Lldapbeans/bean/LdapObject;"); mv.visitMethodInsn(INVOKEVIRTUAL, "ldapbeans/bean/LdapObjectManager", "storeLdapObject", "(Lldapbeans/bean/LdapObject;)V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate a method of the generated class * //from www . j a v a2s .c o m * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class * @param p_Method * the method to generate * @param p_MethodDescriptor * The method descriptor */ private void generateMethodRestore(ClassWriter p_ClassWriter, String p_ClassName, Method p_Method, String p_MethodDescriptor) { MethodVisitor mv = p_ClassWriter.visitMethod(ACC_PUBLIC, "restore", "()V", null, new String[] { "javax/naming/NamingException" }); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObjectManager", "Lldapbeans/bean/LdapObjectManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObject", "Lldapbeans/bean/LdapObject;"); mv.visitMethodInsn(INVOKEVIRTUAL, "ldapbeans/bean/LdapObjectManager", "restoreLdapObject", "(Lldapbeans/bean/LdapObject;)V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate a method of the generated class * /*from w w w.ja v a2 s.c o m*/ * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class * @param p_Method * the method to generate * @param p_MethodDescriptor * The method descriptor */ private void generateMethodMove(ClassWriter p_ClassWriter, String p_ClassName, Method p_Method, String p_MethodDescriptor) { MethodVisitor mv = p_ClassWriter.visitMethod(ACC_PUBLIC, "move", "(Ljava/lang/String;)V", null, new String[] { "javax/naming/NamingException" }); mv.visitCode(); // this.m_LdapObjectManager.moveLdapObject(this.m_LdapObject, p_Dn); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObjectManager", "Lldapbeans/bean/LdapObjectManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObject", "Lldapbeans/bean/LdapObject;"); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "ldapbeans/bean/LdapObjectManager", "moveLdapObject", "(Lldapbeans/bean/LdapObject;Ljava/lang/String;)V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate a method of the generated class * /* w w w . jav a 2 s. c o m*/ * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class * @param p_Method * the method to generate * @param p_MethodDescriptor * The method descriptor */ private void generateMethodRemove(ClassWriter p_ClassWriter, String p_ClassName, Method p_Method, String p_MethodDescriptor) { MethodVisitor mv = p_ClassWriter.visitMethod(ACC_PUBLIC, "remove", "()V", null, new String[] { "javax/naming/NamingException" }); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObjectManager", "Lldapbeans/bean/LdapObjectManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObject", "Lldapbeans/bean/LdapObject;"); mv.visitMethodInsn(INVOKEVIRTUAL, "ldapbeans/bean/LdapObjectManager", "removeLdapObject", "(Lldapbeans/bean/LdapObject;)V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate a method of the generated class * /*w w w .j av a2 s .c o m*/ * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class * @param p_Method * the method to generate * @param p_MethodDescriptor * The method descriptor */ private void generateMethodToString(ClassWriter p_ClassWriter, String p_ClassName, Method p_Method, String p_MethodDescriptor) { MethodVisitor mv = p_ClassWriter.visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, INTERNAL_PACKAGE_NAME + '/' + p_ClassName, "m_LdapObject", "Lldapbeans/bean/LdapObject;"); mv.visitMethodInsn(INVOKEVIRTUAL, "ldapbeans/bean/LdapObject", "toString", "()Ljava/lang/String;"); mv.visitInsn(ARETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate a method of the generated class * /*from www. ja v a 2s . com*/ * @param p_ClassWriter * The {@link ClassWriter} of the generated class * @param p_ClassName * The name of the class * @param p_Method * the method to generate * @param p_MethodDescriptor * The method descriptor */ private void generateMethodEquals(ClassWriter p_ClassWriter, String p_ClassName, Method p_Method, String p_MethodDescriptor) { MethodVisitor mv = p_ClassWriter.visitMethod(ACC_PUBLIC, "equals", "(Ljava/lang/Object;)Z", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(INSTANCEOF, "ldapbeans/bean/LdapBean"); Label l0 = new Label(); mv.visitJumpInsn(IFEQ, l0); mv.visitVarInsn(ALOAD, 1); Label l1 = new Label(); mv.visitJumpInsn(IFNULL, l1); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEINTERFACE, "ldapbeans/bean/LdapBean", "getDN", "()Ljava/lang/String;"); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, "ldapbeans/bean/LdapBean"); mv.visitMethodInsn(INVOKEINTERFACE, "ldapbeans/bean/LdapBean", "getDN", "()Ljava/lang/String;"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z"); mv.visitJumpInsn(IFEQ, l1); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }