Example usage for org.objectweb.asm MethodVisitor visitCode

List of usage examples for org.objectweb.asm MethodVisitor visitCode

Introduction

In this page you can find the example usage for org.objectweb.asm MethodVisitor visitCode.

Prototype

public void visitCode() 

Source Link

Document

Starts the visit of the method's code, if any (i.e.

Usage

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();
}