Package org.objectweb.asm

Examples of org.objectweb.asm.MethodVisitor


    mv.visitEnd();
  }

  private static void make_blank_bridge(ClassVisitor 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();
    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();
  }
View Full Code Here


    mv.visitEnd();
  }

  private static void create_tuple_nth(int n_cells, ClassVisitor cw,
      String this_class_name) {
    MethodVisitor mv;
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "elm", "(I)"
        + ETERM_TYPE.getDescriptor(), null, null);
    mv.visitCode();

    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();
  }
View Full Code Here

    mv.visitEnd();
  }

  private static void create_tuple_set(int n_cells, ClassVisitor cw,
      String this_class_name) {
    MethodVisitor mv;
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "set", "(I"
        + ETERM_TYPE.getDescriptor() + ")V", null, null);
    mv.visitCode();

    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();
  }
View Full Code Here

  protected final EObject bad_nth(int i) {
    throw ERT.badarg(this);
  }

  private static void create_count(ClassVisitor cw, int n) {
    MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "arity", "()I",
        null, null);
    mv.visitCode();

    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();
  }
View Full Code Here

    mv.visitMaxs(1, 1);
    mv.visitEnd();
  }

  private static void create_cast(ClassVisitor 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();

    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();
  }
View Full Code Here

    mv.visitEnd();
  }


  private static void create_cast2(ClassVisitor 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);
    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();
  }
View Full Code Here

    mv.visitEnd();
  }

  private static void create_constructor(ClassVisitor 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);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
  }
View Full Code Here

          "I", null, new Integer(lambda.old_index));
      cw.visitField(ACC_STATIC | ACC_PUBLIC | ACC_FINAL, "old_uniq", "I",
          null, new Integer(lambda.old_uniq));

      /** */
      MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "encode",
          "(" + Type.getDescriptor(EOutputStream.class) + ")V", null,
          null);
      mv.visitCode();

      mv.visitVarInsn(ALOAD, 1);

      mv.visitVarInsn(ALOAD, 0);
      mv.visitFieldInsn(GETFIELD, full_inner_name, "pid",
          EPID_TYPE.getDescriptor());
      mv.visitLdcInsn(module);

      mv.visitFieldInsn(GETSTATIC, full_inner_name, "old_index", "I");
      mv.visitInsn(I2L);
      mv.visitLdcInsn(new Integer(arity));
      mv.visitFieldInsn(GETSTATIC, outer_name, "module_md5",
          EBINARY_TYPE.getDescriptor());

      mv.visitFieldInsn(GETSTATIC, full_inner_name, "index", "I");
      mv.visitInsn(I2L);
      mv.visitFieldInsn(GETSTATIC, full_inner_name, "old_uniq", "I");
      mv.visitInsn(I2L);

      mv.visitLdcInsn(new Integer(freevars));
      mv.visitTypeInsn(ANEWARRAY, EOBJECT_NAME);

      for (int i = 0; i < freevars; i++) {
        mv.visitInsn(DUP);

        if (i <= 5) {
          mv.visitInsn(ICONST_0 + i);
        } else {
          mv.visitLdcInsn(new Integer(i));
        }

        mv.visitVarInsn(ALOAD, 0); // load self
        mv.visitFieldInsn(GETFIELD, full_inner_name, "fv" + i,
            EOBJECT_DESC);

        mv.visitInsn(AASTORE);
      }

      mv.visitMethodInsn(
          INVOKEVIRTUAL,
          Type.getInternalName(EOutputStream.class),
          "write_fun",
          "(" + EPID_TYPE.getDescriptor() + "Ljava/lang/String;"
              + "JI" + EBINARY_TYPE.getDescriptor() + "JJ"
              + Type.getDescriptor(EObject[].class) + ")V");

      mv.visitInsn(RETURN);
      mv.visitMaxs(10, 3);
      mv.visitEnd();
    }

    make_constructor(cw, module, function, full_inner_name,
        outer_name,
        super_class_name, lambda, exported);
View Full Code Here

          null);
      sb.append(EOBJECT_DESC);
    }
    sb.append(")V");

    MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", sb.toString(),
        null, null);
    mv.visitCode();

    mv.visitVarInsn(ALOAD, 0);
    if (exported) {
      mv.visitLdcInsn(module_name);
      mv.visitLdcInsn(function_name);
      mv.visitMethodInsn(INVOKESPECIAL, super_class_name, "<init>",
          "(Ljava/lang/String;Ljava/lang/String;)V");
    } else {
      mv.visitMethodInsn(INVOKESPECIAL, super_class_name, "<init>", "()V");
    }

    if (lambda != null) {
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitFieldInsn(PUTFIELD, full_inner_name, "pid",
          EPID_TYPE.getDescriptor());

    }

    for (int i = 0; i < freevars; i++) {
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, i + 2);
      mv.visitFieldInsn(PUTFIELD, full_inner_name, "fv" + i, EOBJECT_DESC);
    }

    mv.visitInsn(RETURN);
    mv.visitMaxs(3, 3);
    mv.visitEnd();

    if (lambda != null) {
      mv = cw.visitMethod(ACC_PROTECTED, "get_env", "()" + ESEQ_DESC,
          null, null);
      mv.visitCode();
      mv.visitFieldInsn(GETSTATIC, ERT_NAME, "NIL",
          ENIL_TYPE.getDescriptor());
      for (int i = freevars - 1; i >= 0; i--) {
        mv.visitVarInsn(ALOAD, 0);
        mv.visitFieldInsn(GETFIELD, full_inner_name, "fv" + i,
            EOBJECT_DESC);
        mv.visitMethodInsn(INVOKEVIRTUAL, ESEQ_NAME, "cons", "("
            + EOBJECT_DESC + ")" + ESEQ_DESC);
      }
      mv.visitInsn(ARETURN);
      mv.visitMaxs(3, 3);
      mv.visitEnd();

      mv = cw.visitMethod(ACC_PROTECTED, "get_pid", "()" + EOBJECT_DESC,
          null, null);
      mv.visitCode();
      mv.visitVarInsn(ALOAD, 0);
      mv.visitFieldInsn(GETFIELD, full_inner_name, "pid",
          EPID_TYPE.getDescriptor());
      mv.visitInsn(ARETURN);
      mv.visitMaxs(3, 3);
      mv.visitEnd();

      mv = cw.visitMethod(ACC_PROTECTED, "get_id",
          "()" + Type.getDescriptor(FunID.class), null, null);
      mv.visitCode();
      mv.visitFieldInsn(GETSTATIC,
          outer_name,
          anon_fun_name(lambda), Type.getDescriptor(LocalFunID.class));
      mv.visitInsn(ARETURN);
      mv.visitMaxs(3, 3);
      mv.visitEnd();

    }
  }
View Full Code Here

    }
  }

    public static void make_invoketail_method(ClassWriter cw,
      String full_inner, int arity, int freevars) {
    MethodVisitor mv;
    mv = cw.visitMethod(ACC_PUBLIC | ACC_FINAL, "invoke_tail",
        EUtil.getSignature(arity - freevars, true), null, null);
    mv.visitCode();
    for (int i = 0; i < arity - freevars; i++) {
      mv.visitVarInsn(ALOAD, 1);
      mv.visitVarInsn(ALOAD, i + 2);
      mv.visitFieldInsn(PUTFIELD, EPROC_NAME, "arg" + i, EOBJECT_DESC);
    }

    mv.visitVarInsn(ALOAD, 1);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(PUTFIELD, EPROC_NAME, "tail", EFUN_DESCRIPTOR);
    if (EProc.TAIL_MARKER == null) {
      mv.visitInsn(ACONST_NULL);
    } else {
      mv.visitFieldInsn(GETSTATIC, EPROC_NAME, "TAIL_MARKER",
          EOBJECT_DESC);
    }
    mv.visitInsn(ARETURN);
    mv.visitMaxs(arity + 2, arity + 2);
    mv.visitEnd();
  }
View Full Code Here

TOP

Related Classes of org.objectweb.asm.MethodVisitor

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.