@Override
  public boolean perform() {
    madeChanges = false;

    TIntList addresses = getValidAddresses();
    addresses.sort();
    addresses.reverse();
    for (int address : addresses.toArray()) {
      madeChanges = true;
      BuilderInstruction original = manipulator.getInstruction(address);
      BuilderInstruction constInstruction = ConstantBuilder.buildConstant(address, manipulator);
      boolean isReturn = original.getOpcode().name().startsWith("RETURN");
      if (isReturn) {
        manipulator.addInstruction(address, constInstruction);
      } else {
        manipulator.replaceInstruction(address, constInstruction);
      }
      constantCount++;
    }

    return madeChanges;
  }
Example #2
0
    private void doTest(
        Object value1, Object value2, Opcode opcode, String inputType, int cmpValue) {
      when(itemB.getValue()).thenReturn(value1);
      when(itemC.getValue()).thenReturn(value2);
      when(itemB.getType()).thenReturn(inputType);
      when(itemC.getType()).thenReturn(inputType);
      when(instruction.getOpcode()).thenReturn(opcode);

      op = (CmpOp) opFactory.create(instruction, ADDRESS);
      op.execute(node, mState);

      verify(mState, times(1)).assignRegister(eq(REGISTER_A), setItem.capture());
      assertEquals(cmpValue, setItem.getValue().getValue());
      assertEquals(CMP_TYPE, setItem.getValue().getType());
    }
Example #3
0
    @Test
    public void testArg2IsUnknownReturnsUnknown() {
      long value1 = 1149239296L;
      Object value2 = new UnknownValue();
      when(itemC.isUnknown()).thenReturn(true);
      when(itemB.getValue()).thenReturn(value1);
      when(itemC.getValue()).thenReturn(value2);
      when(itemB.getType()).thenReturn("J");
      when(itemC.getType()).thenReturn("J");
      when(instruction.getOpcode()).thenReturn(Opcode.CMP_LONG);

      op = (CmpOp) opFactory.create(instruction, ADDRESS);
      op.execute(node, mState);

      Object cmpValue = new UnknownValue();
      verify(mState, times(1)).assignRegister(eq(REGISTER_A), setItem.capture());
      assertEquals(cmpValue.getClass(), setItem.getValue().getValue().getClass());
      assertEquals(CMP_TYPE, setItem.getValue().getType());
    }