Package nginx.clojure.asm

Examples of nginx.clojure.asm.MethodVisitor


//        ClassVisitor cv = db.isVerbose() ?  new TraceClassVisitor(cw, new PrintWriter(System.out)) : cw;
        ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) {
          @Override
          public MethodVisitor visitMethod(int access, String name,
              String desc, String signature, String[] exceptions) {
            MethodVisitor mv = super.visitMethod(access, name,
                desc, signature, exceptions);
            if ( (Opcodes.ACC_NATIVE & access) != 0
                ||  (Opcodes.ACC_ABSTRACT & access) != 0
//                || name.startsWith("<cinit>")
                ) {
View Full Code Here


            if(methods == null) {
                methods = new ArrayList<MethodNode>();
            }
           
            MethodNode mn = null;
            MethodVisitor mv = null;
            if (name.charAt(0) == '<') {
              mv = mn = new MethodNode(access, name, desc, signature, exceptions);
            }else {
              if (db.meetTraceTargetClassMethod(className, method)) {
                Printer tp = new Textifier();
View Full Code Here

                if(!alreadyInstrumented) {
                    super.visitAnnotation(ALREADY_INSTRUMENTED_NAME, true);
                }
               
                for(MethodNode mn : methods) {
                    MethodVisitor outMV = makeOutMV(mn);
                   
                    try {
                      if (db.meetTraceTargetClassMethod(className, ClassEntry.key(mn.name, mn.desc))) {
                          db.info("On waving: meet traced method %s.%s%s", className, mn.name, mn.desc);
                        }
View Full Code Here

    }

    protected MethodVisitor makeOutMV(MethodNode mn) {
      String[] exps = MethodDatabase.toStringArray(mn.exceptions);
      String mk = ClassEntry.key(mn.name, mn.desc);
      MethodVisitor mv = super.visitMethod(mn.access, mn.name, mn.desc, mn.signature, exps);
      if (db.meetTraceTargetClassMethod(className, mk)) {
        Printer tp = new Textifier();
        TracableMethodVisitor tmv = new TracableMethodVisitor("Waved: " + className + "." + mk,  mv, mn.access, mn.name, mn.desc, mn.signature, exps, tp, new PrintWriter(System.out));
        mv = new TraceMethodVisitor(tmv, tp);
      }
View Full Code Here

    @Override
    public MethodVisitor visitMethod(final int access, final String name,
            final String desc, final String signature, final String[] exceptions) {
        Printer p = this.p.visitMethod(access, name, desc, signature,
                exceptions);
        MethodVisitor mv = cv == null ? null : cv.visitMethod(access, name,
                desc, signature, exceptions);
        return new TraceMethodVisitor(mv, p);
    }
View Full Code Here

  public void emitShrinkedInitMethod(InstrumentClass cv, int splitPos, Frame f, FrameInfo fi, MethodInsnNode invokedInitInsn)
      throws InternalError {
    String desc = buildShrinkedInitMethodDesc(mn.desc);
    String[] exps = MethodDatabase.toStringArray(mn.exceptions);
    MethodVisitor cmv = cv.makeOutMV(mn.access, "<init>", desc, null, exps);
    cmv.visitCode();
    for (int i = 0; i < splitPos -1; i++) {
      mn.instructions.get(i).accept(cmv);
    }
   
    if (invokedInitInsn != null) {
      if (db.checkMethodSuspendType(invokedInitInsn.owner, ClassEntry.key(invokedInitInsn.name, invokedInitInsn.desc), false, false) == MethodDatabase.SUSPEND_NORMAL) {
        Type[] tps = Type.getArgumentTypes(invokedInitInsn.desc);
        Type[] ntps = new Type[tps.length + 1];
        System.arraycopy(tps, 0, ntps, 0, tps.length);
        ntps[tps.length] = Type.getType(CheckInstrumentationVisitor.EXCEPTION_DESC);
        cmv.visitInsn(Opcodes.ACONST_NULL);
        cmv.visitMethodInsn(invokedInitInsn.getOpcode(), invokedInitInsn.owner,invokedInitInsn.name, Type.getMethodDescriptor(Type.VOID_TYPE, ntps));
      }else {
        invokedInitInsn.accept(cmv);
      }
    }
   
    cmv.visitMethodInsn(Opcodes.INVOKESTATIC, CSTACK_NAME, "getStack", "()L"+CSTACK_NAME+";");
    cmv.visitVarInsn(Opcodes.ASTORE, lvarCStack);
    cmv.visitVarInsn(Opcodes.ALOAD,lvarCStack);
    emitConst(cmv, fi.numSlots);
    cmv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, CSTACK_NAME, "incRefsAndReserveSpace", "(I)V");
           
    for (int i = f.getStackSize(); i-->0 ;) {
        BasicValue v = (BasicValue) f.getStack(i);
        if(!isOmitted(v)) {
            if(!isNullType(v)) {
                int slotIdx = fi.stackSlotIndices[i];
                assert slotIdx >= 0 && slotIdx < fi.numSlots;
                emitStoreValue(cmv, v, lvarCStack, slotIdx);
            } else {
                db.trace("NULL stack entry: type=%s size=%d", v.getType(), v.getSize());
                cmv.visitInsn(Opcodes.POP);
            }
        }
    }
   
    for(int i=firstLocal; i < f.getLocals() ; i++) {
        BasicValue v = (BasicValue) f.getLocal(i);
        if(!isNullType(v)) {
            cmv.visitVarInsn(v.getType().getOpcode(Opcodes.ILOAD), i);
            int slotIdx = fi.localSlotIndices[i];
            assert slotIdx >= 0 && slotIdx < fi.numSlots;
            emitStoreValue(cmv, v, lvarCStack, slotIdx);
        }
    }
        if(mn.localVariables != null) {
            for(LocalVariableNode var : mn.localVariables) {
              if (invokedInitInsn != null) {
                if (mn.instructions.indexOf(var.start) <= splitPos) {
                  var.accept(cmv);
                }
              }else if (var.start.getPrevious() == null) {
                var.accept(cmv);
              }
            }
        }
    cmv.visitInsn(Opcodes.RETURN);
    cmv.visitMaxs(mn.maxStack+3, mn.maxLocals+3);
    cmv.visitEnd();
  }
View Full Code Here

    }

    @Override
    public MethodVisitor visitMethod(final int access, final String name,
            final String desc, final String signature, final String[] exceptions) {
        MethodVisitor mv;
        if ("<clinit>".equals(name)) {
            int a = Opcodes.ACC_PRIVATE + Opcodes.ACC_STATIC;
            String n = prefix + counter++;
            mv = cv.visitMethod(a, n, desc, signature, exceptions);
View Full Code Here

    @Override
    public MethodVisitor visitMethod(int access, String name, String desc,
            String signature, String[] exceptions) {
        String newDesc = remapper.mapMethodDesc(desc);
        MethodVisitor mv = super.visitMethod(access, remapper.mapMethodName(
                className, name, desc), newDesc, remapper.mapSignature(
                signature, false),
                exceptions == null ? null : remapper.mapTypes(exceptions));
        return mv == null ? null : createRemappingMethodAdapter(access,
                newDesc, mv);
View Full Code Here

     *            a class visitor.
     */
    public void accept(final ClassVisitor cv) {
        String[] exceptions = new String[this.exceptions.size()];
        this.exceptions.toArray(exceptions);
        MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
                exceptions);
        if (mv != null) {
            accept(mv);
        }
    }
View Full Code Here

TOP

Related Classes of nginx.clojure.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.