Java Code Examples for org.objectweb.asm.Opcodes#IFNONNULL

The following examples show how to use org.objectweb.asm.Opcodes#IFNONNULL . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: RemoveConditionalMutator.java    From pitest with Apache License 2.0 6 votes vote down vote up
private boolean canMutate(final int opcode) {
  switch (opcode) {
  case Opcodes.IFLE:
  case Opcodes.IFGE:
  case Opcodes.IFGT:
  case Opcodes.IFLT:
  case Opcodes.IF_ICMPGE:
  case Opcodes.IF_ICMPGT:
  case Opcodes.IF_ICMPLE:
  case Opcodes.IF_ICMPLT:
    return (RemoveConditionalMutator.this.kind == Choice.ORDER);
  case Opcodes.IFEQ:
  case Opcodes.IFNE:
  case Opcodes.IFNONNULL:
  case Opcodes.IFNULL:
  case Opcodes.IF_ICMPNE:
  case Opcodes.IF_ICMPEQ:
  case Opcodes.IF_ACMPEQ:
  case Opcodes.IF_ACMPNE:
    return (RemoveConditionalMutator.this.kind == Choice.EQUAL);
  default:
    return false;
  }
}
 
Example 2
Source File: StackHelper.java    From zelixkiller with GNU General Public License v3.0 5 votes vote down vote up
public InsnValue checkNull(AbstractInsnNode insn, InsnValue value) {
	switch (insn.getOpcode()) {
	case Opcodes.IFNULL:
		return InsnValue.intValue(value.getValue() == null);
	case Opcodes.IFNONNULL:
		return InsnValue.intValue(value.getValue() != null);
	}

	return null;
}
 
Example 3
Source File: BytecodeTypeInference.java    From bazel with Apache License 2.0 5 votes vote down vote up
@Override
public void visitJumpInsn(int opcode, Label label) {
  switch (opcode) {
    case Opcodes.IFEQ:
    case Opcodes.IFNE:
    case Opcodes.IFLT:
    case Opcodes.IFGE:
    case Opcodes.IFGT:
    case Opcodes.IFLE:
      pop();
      break;
    case Opcodes.IF_ICMPEQ:
    case Opcodes.IF_ICMPNE:
    case Opcodes.IF_ICMPLT:
    case Opcodes.IF_ICMPGE:
    case Opcodes.IF_ICMPGT:
    case Opcodes.IF_ICMPLE:
    case Opcodes.IF_ACMPEQ:
    case Opcodes.IF_ACMPNE:
      pop(2);
      break;
    case Opcodes.GOTO:
      break;
    case Opcodes.JSR:
      throw new RuntimeException("The JSR instruction is not supported.");
    case Opcodes.IFNULL:
    case Opcodes.IFNONNULL:
      pop(1);
      break;
    default:
      throw new RuntimeException("Unhandled opcode " + opcode);
  }
  super.visitJumpInsn(opcode, label);
}
 
Example 4
Source File: BuildStackInfoAdapter.java    From copper-engine with Apache License 2.0 5 votes vote down vote up
@Override
public void visitJumpInsn(int arg0, Label arg1) {
    savePreviousFrame();
    switch (arg0) {
        case Opcodes.IF_ACMPEQ:
        case Opcodes.IF_ACMPNE:
        case Opcodes.IF_ICMPEQ:
        case Opcodes.IF_ICMPGE:
        case Opcodes.IF_ICMPGT:
        case Opcodes.IF_ICMPLE:
        case Opcodes.IF_ICMPLT:
        case Opcodes.IF_ICMPNE:
            currentFrame.popStack();
        case Opcodes.IFEQ:
        case Opcodes.IFGE:
        case Opcodes.IFGT:
        case Opcodes.IFLE:
        case Opcodes.IFLT:
        case Opcodes.IFNE:
        case Opcodes.IFNONNULL:
        case Opcodes.IFNULL:
            currentFrame.popStack();
        case Opcodes.GOTO:
            forwardFrames.put(arg1, new StackInfo(currentFrame));
            break;
        case Opcodes.JSR:
            currentFrame.pushStack(retAddressType);
            forwardFrames.put(arg1, new StackInfo(currentFrame));
            break;
        default:
            logger.debug("Unhandled: ");
    }
    if (logger.isDebugEnabled())
        logger.debug("jumpInsn " + getOpCode(arg0) + " " + arg1);
    delegate.visitJumpInsn(arg0, arg1);
}
 
Example 5
Source File: MixinEncoderHandler.java    From multiconnect with MIT License 4 votes vote down vote up
@Inject(method = "encode", at = @At(value = "JUMP", opcode = Opcodes.IFNONNULL, ordinal = 1))
private void onEncodeHead(ChannelHandlerContext context, Packet<?> packet, ByteBuf buf, CallbackInfo ci) {
    this.context.set(context);
}
 
Example 6
Source File: InstructionAdapter.java    From Concurnas with MIT License 4 votes vote down vote up
@Override
public void visitJumpInsn(final int opcode, final Label label) {
  switch (opcode) {
    case Opcodes.IFEQ:
      ifeq(label);
      break;
    case Opcodes.IFNE:
      ifne(label);
      break;
    case Opcodes.IFLT:
      iflt(label);
      break;
    case Opcodes.IFGE:
      ifge(label);
      break;
    case Opcodes.IFGT:
      ifgt(label);
      break;
    case Opcodes.IFLE:
      ifle(label);
      break;
    case Opcodes.IF_ICMPEQ:
      ificmpeq(label);
      break;
    case Opcodes.IF_ICMPNE:
      ificmpne(label);
      break;
    case Opcodes.IF_ICMPLT:
      ificmplt(label);
      break;
    case Opcodes.IF_ICMPGE:
      ificmpge(label);
      break;
    case Opcodes.IF_ICMPGT:
      ificmpgt(label);
      break;
    case Opcodes.IF_ICMPLE:
      ificmple(label);
      break;
    case Opcodes.IF_ACMPEQ:
      ifacmpeq(label);
      break;
    case Opcodes.IF_ACMPNE:
      ifacmpne(label);
      break;
    case Opcodes.GOTO:
      goTo(label);
      break;
    case Opcodes.JSR:
      jsr(label);
      break;
    case Opcodes.IFNULL:
      ifnull(label);
      break;
    case Opcodes.IFNONNULL:
      ifnonnull(label);
      break;
    default:
      throw new IllegalArgumentException();
  }
}
 
Example 7
Source File: InstructionAdapter.java    From JByteMod-Beta with GNU General Public License v2.0 4 votes vote down vote up
@Override
public void visitJumpInsn(final int opcode, final Label label) {
  switch (opcode) {
    case Opcodes.IFEQ:
      ifeq(label);
      break;
    case Opcodes.IFNE:
      ifne(label);
      break;
    case Opcodes.IFLT:
      iflt(label);
      break;
    case Opcodes.IFGE:
      ifge(label);
      break;
    case Opcodes.IFGT:
      ifgt(label);
      break;
    case Opcodes.IFLE:
      ifle(label);
      break;
    case Opcodes.IF_ICMPEQ:
      ificmpeq(label);
      break;
    case Opcodes.IF_ICMPNE:
      ificmpne(label);
      break;
    case Opcodes.IF_ICMPLT:
      ificmplt(label);
      break;
    case Opcodes.IF_ICMPGE:
      ificmpge(label);
      break;
    case Opcodes.IF_ICMPGT:
      ificmpgt(label);
      break;
    case Opcodes.IF_ICMPLE:
      ificmple(label);
      break;
    case Opcodes.IF_ACMPEQ:
      ifacmpeq(label);
      break;
    case Opcodes.IF_ACMPNE:
      ifacmpne(label);
      break;
    case Opcodes.GOTO:
      goTo(label);
      break;
    case Opcodes.JSR:
      jsr(label);
      break;
    case Opcodes.IFNULL:
      ifnull(label);
      break;
    case Opcodes.IFNONNULL:
      ifnonnull(label);
      break;
    default:
      throw new IllegalArgumentException();
  }
}
 
Example 8
Source File: JVMImpl.java    From serianalyzer with GNU General Public License v3.0 4 votes vote down vote up
/**
 * @param opcode
 * @param label
 * @param s
 * @return
 */
static boolean handleJVMJump ( int opcode, Label label, JVMStackState s ) {
    boolean tainted;
    switch ( opcode ) {
    case Opcodes.IF_ICMPEQ:
    case Opcodes.IF_ICMPNE:
    case Opcodes.IF_ICMPLT:
    case Opcodes.IF_ICMPGE:
    case Opcodes.IF_ICMPGT:
    case Opcodes.IF_ICMPLE:
    case Opcodes.IF_ACMPEQ:
    case Opcodes.IF_ACMPNE:
        BaseType o1 = s.pop();
        BaseType o2 = s.pop();
        tainted = ! ( o1 != null ) || ! ( o2 != null ) || o1.isTainted() || o2.isTainted();
        break;
    case Opcodes.IFEQ:
    case Opcodes.IFNE:
    case Opcodes.IFLT:
    case Opcodes.IFGE:
    case Opcodes.IFGT:
    case Opcodes.IFLE:
    case Opcodes.IFNULL:
    case Opcodes.IFNONNULL:
        BaseType c = s.pop();
        tainted = ( c == null || c.isTainted() );
        break;

    case Opcodes.JSR:
        s.push(new BasicConstant(Type.INT_TYPE, label));
        tainted = false;
        break;
    case Opcodes.GOTO:
        tainted = false;
        break;
    default:
        log.warn("Unsupported opcode " + opcode); //$NON-NLS-1$
        tainted = true;
    }
    return tainted;
}
 
Example 9
Source File: AllocationMethodAdapter.java    From allocation-instrumenter with Apache License 2.0 4 votes vote down vote up
void calculateArrayLengthAndDispatch(String typeName, int dimCount) {
  // Since the dimensions of the array are not known at instrumentation
  // time, we take the created multi-dimensional array and peel off nesting
  // levels from the left.  For each nesting layer we probe the array length
  // and accumulate a partial product which we can then feed the recording
  // function.

  // below we note the partial product of dimensions 1 to X-1 as productToX
  // (so productTo1 == 1 == no dimensions yet).  We denote by aref0 the
  // array reference at the current nesting level (the containing aref's [0]
  // element).  If we hit a level whose arraylength is 0 or whose
  // reference is null, there's no point continuing, so we shortcut
  // out.

  // This approach works pretty well when you create a new array with the
  // newarray bytecodes.  You can also create a new array by cloning an
  // existing array; an existing multidimensional array might have had some
  // of its [0] elements nulled out.  We currently deal with this by bailing
  // out, but arguably we should do something more principled (like calculate
  // the size of the multidimensional array from scratch if you are using
  // clone()).
  // TODO(java-platform-team): Do something about modified multidimensional
  // arrays and clone().
  Label zeroDimension = new Label();
  super.visitInsn(Opcodes.DUP); // -> stack: ... origaref aref0
  super.visitLdcInsn(1); // -> stack: ... origaref aref0 productTo1
  for (int i = 0; i < dimCount; ++i) {
    // pre: stack: ... origaref aref0 productToI
    super.visitInsn(Opcodes.SWAP); // -> stack: ... origaref productToI aref
    super.visitInsn(Opcodes.DUP);

    Label nonNullDimension = new Label();
    // -> stack: ... origaref productToI aref aref
    super.visitJumpInsn(Opcodes.IFNONNULL, nonNullDimension);
    // -> stack: ... origaref productToI aref
    super.visitInsn(Opcodes.SWAP);
    // -> stack: ... origaref aref productToI
    super.visitJumpInsn(Opcodes.GOTO, zeroDimension);
    super.visitLabel(nonNullDimension);

    // -> stack: ... origaref productToI aref
    super.visitInsn(Opcodes.DUP_X1);
    // -> stack: ... origaref aref0 productToI aref
    super.visitInsn(Opcodes.ARRAYLENGTH);
    // -> stack: ... origaref aref0 productToI dimI

    Label nonZeroDimension = new Label();
    super.visitInsn(Opcodes.DUP);
    // -> stack: ... origaref aref0 productToI dimI dimI
    super.visitJumpInsn(Opcodes.IFNE, nonZeroDimension);
    // -> stack: ... origaref aref0 productToI dimI
    super.visitInsn(Opcodes.POP);
    // -> stack: ... origaref aref0 productToI
    super.visitJumpInsn(Opcodes.GOTO, zeroDimension);
    super.visitLabel(nonZeroDimension);
    // -> stack: ... origaref aref0 productToI max(dimI,1)

    super.visitInsn(Opcodes.IMUL);
    // -> stack: ... origaref aref0 productTo{I+1}
    if (i < dimCount - 1) {
      super.visitInsn(Opcodes.SWAP);
      // -> stack: ... origaref productTo{I+1} aref0
      super.visitInsn(Opcodes.ICONST_0);
      // -> stack: ... origaref productTo{I+1} aref0 0
      super.visitInsn(Opcodes.AALOAD);
      // -> stack: ... origaref productTo{I+1} aref0'
      super.visitInsn(Opcodes.SWAP);
    }
    // post: stack: ... origaref aref0 productTo{I+1}
  }
  super.visitLabel(zeroDimension);

  super.visitInsn(Opcodes.SWAP); // -> stack: ... origaref product aref0
  super.visitInsn(Opcodes.POP); // -> stack: ... origaref product
  super.visitInsn(Opcodes.SWAP); // -> stack: ... product origaref
  invokeRecordAllocation(typeName);
}
 
Example 10
Source File: InstructionAdapter.java    From JReFrameworker with MIT License 4 votes vote down vote up
@Override
public void visitJumpInsn(final int opcode, final Label label) {
  switch (opcode) {
    case Opcodes.IFEQ:
      ifeq(label);
      break;
    case Opcodes.IFNE:
      ifne(label);
      break;
    case Opcodes.IFLT:
      iflt(label);
      break;
    case Opcodes.IFGE:
      ifge(label);
      break;
    case Opcodes.IFGT:
      ifgt(label);
      break;
    case Opcodes.IFLE:
      ifle(label);
      break;
    case Opcodes.IF_ICMPEQ:
      ificmpeq(label);
      break;
    case Opcodes.IF_ICMPNE:
      ificmpne(label);
      break;
    case Opcodes.IF_ICMPLT:
      ificmplt(label);
      break;
    case Opcodes.IF_ICMPGE:
      ificmpge(label);
      break;
    case Opcodes.IF_ICMPGT:
      ificmpgt(label);
      break;
    case Opcodes.IF_ICMPLE:
      ificmple(label);
      break;
    case Opcodes.IF_ACMPEQ:
      ifacmpeq(label);
      break;
    case Opcodes.IF_ACMPNE:
      ifacmpne(label);
      break;
    case Opcodes.GOTO:
      goTo(label);
      break;
    case Opcodes.JSR:
      jsr(label);
      break;
    case Opcodes.IFNULL:
      ifnull(label);
      break;
    case Opcodes.IFNONNULL:
      ifnonnull(label);
      break;
    default:
      throw new IllegalArgumentException();
  }
}
 
Example 11
Source File: InstructionAdapter.java    From JReFrameworker with MIT License 4 votes vote down vote up
@Override
public void visitJumpInsn(final int opcode, final Label label) {
  switch (opcode) {
    case Opcodes.IFEQ:
      ifeq(label);
      break;
    case Opcodes.IFNE:
      ifne(label);
      break;
    case Opcodes.IFLT:
      iflt(label);
      break;
    case Opcodes.IFGE:
      ifge(label);
      break;
    case Opcodes.IFGT:
      ifgt(label);
      break;
    case Opcodes.IFLE:
      ifle(label);
      break;
    case Opcodes.IF_ICMPEQ:
      ificmpeq(label);
      break;
    case Opcodes.IF_ICMPNE:
      ificmpne(label);
      break;
    case Opcodes.IF_ICMPLT:
      ificmplt(label);
      break;
    case Opcodes.IF_ICMPGE:
      ificmpge(label);
      break;
    case Opcodes.IF_ICMPGT:
      ificmpgt(label);
      break;
    case Opcodes.IF_ICMPLE:
      ificmple(label);
      break;
    case Opcodes.IF_ACMPEQ:
      ifacmpeq(label);
      break;
    case Opcodes.IF_ACMPNE:
      ifacmpne(label);
      break;
    case Opcodes.GOTO:
      goTo(label);
      break;
    case Opcodes.JSR:
      jsr(label);
      break;
    case Opcodes.IFNULL:
      ifnull(label);
      break;
    case Opcodes.IFNONNULL:
      ifnonnull(label);
      break;
    default:
      throw new IllegalArgumentException();
  }
}
 
Example 12
Source File: Jump.java    From CodenameOne with GNU General Public License v2.0 4 votes vote down vote up
@Override
public void appendInstruction(StringBuilder b, List<Instruction> instructions) {
    b.append("    ");
    
    switch(opcode) {
        case Opcodes.IFEQ:
            b.append("if(POP_INT() == 0) /* IFEQ */ ");
            break;
        case Opcodes.IFNE:
            b.append("if(POP_INT() != 0) /* IFNE */ ");
            break;
        case Opcodes.IFLT:
            b.append("if(POP_INT() < 0) /* IFLT */ ");
            break;
        case Opcodes.IFGE:
            b.append("if(POP_INT() >= 0) /* IFGE */ ");
            break;
        case Opcodes.IFGT:
            b.append("if(POP_INT() > 0) /* IFGT */ ");
            break;
        case Opcodes.IFLE:
            b.append("if(POP_INT() <= 0) /* IFLE */ ");
            break;
        case Opcodes.IF_ICMPEQ:
            b.append("SP-=2; if((*SP).data.i == SP[1].data.i) /* IF_ICMPEQ */ ");
            break;
        case Opcodes.IF_ICMPNE:
            b.append("SP-=2; if((*SP).data.i != SP[1].data.i) /* IF_ICMPNE */ ");
            break;
        case Opcodes.IF_ICMPLT:
            b.append("SP-=2; if((*SP).data.i < SP[1].data.i) /* IF_ICMPLT */ ");
            break;
        case Opcodes.IF_ICMPGE:
            b.append("SP-=2; if((*SP).data.i >= SP[1].data.i) /* IF_ICMPGE */ ");
            break;
        case Opcodes.IF_ICMPGT:
            b.append("SP-=2; if((*SP).data.i > SP[1].data.i) /* IF_ICMPGT */ ");
            break;
        case Opcodes.IF_ICMPLE:
            b.append("SP-=2; if((*SP).data.i <= SP[1].data.i) /* IF_ICMPLE */ ");
            break;
        case Opcodes.IF_ACMPEQ:
            b.append("SP-=2; if((*SP).data.o == SP[1].data.o) /* IF_ACMPEQ */ ");
            break;
        case Opcodes.IF_ACMPNE:
            b.append("SP-=2; if((*SP).data.o != SP[1].data.o) /* IF_ACMPNE */ ");
            break;
        case Opcodes.GOTO:
            // this space intentionally left blank
            break;
        case Opcodes.JSR:
            b.append("/* JSR TODO */");
            /*b.append("PUSH_")
            b.append("goto label_");
            b.append(label.toString());
            b.append(";\n");
            b.append("JSR_RETURN_LABEL_");
            b.append(jsrCounter);
            b.append(":");
            jsrCounter++;*/
            return;
        case Opcodes.IFNULL:
            b.append("if(POP_OBJ() == JAVA_NULL) /* IFNULL */ ");
            break;
        case Opcodes.IFNONNULL:
            b.append("if(POP_OBJ() != JAVA_NULL) /* IFNONNULL */ ");
            break;
    }
   
    if(TryCatch.isTryCatchInMethod()) {
        b.append("JUMP_TO(label_");
        b.append(label.toString());
        b.append(", ");
        b.append(LabelInstruction.getLabelCatchDepth(label, instructions));
        b.append(");\n");
    } else {
        b.append("goto label_");
        b.append(label.toString());
        b.append(";\n");
    }
}
 
Example 13
Source File: CheckMethodAdapter.java    From Concurnas with MIT License 2 votes vote down vote up
/**
 * Checks that the method to visit the given opcode is equal to the given method.
 *
 * @param opcode the opcode to be checked.
 * @param method the expected visit method.
 */
private static void checkOpcodeMethod(final int opcode, final Method method) {
  if (opcode < Opcodes.NOP || opcode > Opcodes.IFNONNULL || OPCODE_METHODS[opcode] != method) {
    throw new IllegalArgumentException("Invalid opcode: " + opcode);
  }
}
 
Example 14
Source File: CheckMethodAdapter.java    From JReFrameworker with MIT License 2 votes vote down vote up
/**
 * Checks that the method to visit the given opcode is equal to the given method.
 *
 * @param opcode the opcode to be checked.
 * @param method the expected visit method.
 */
private static void checkOpcodeMethod(final int opcode, final Method method) {
  if (opcode < Opcodes.NOP || opcode > Opcodes.IFNONNULL || OPCODE_METHODS[opcode] != method) {
    throw new IllegalArgumentException("Invalid opcode: " + opcode);
  }
}
 
Example 15
Source File: CheckMethodAdapter.java    From JReFrameworker with MIT License 2 votes vote down vote up
/**
 * Checks that the method to visit the given opcode is equal to the given method.
 *
 * @param opcode the opcode to be checked.
 * @param method the expected visit method.
 */
private static void checkOpcodeMethod(final int opcode, final Method method) {
  if (opcode < Opcodes.NOP || opcode > Opcodes.IFNONNULL || OPCODE_METHODS[opcode] != method) {
    throw new IllegalArgumentException("Invalid opcode: " + opcode);
  }
}
 
Example 16
Source File: EqualsMethod.java    From byte-buddy with Apache License 2.0 2 votes vote down vote up
/**
 * Returns a conditional return that returns on a reference value of {@code null}.
 *
 * @return A conditional return that returns on a reference value of {@code null}.
 */
protected static ConditionalReturn onNullValue() {
    return new ConditionalReturn(Opcodes.IFNONNULL);
}