Search in sources :

Example 6 with IfICmpEq

use of net.runelite.asm.attributes.code.instructions.IfICmpEq in project runelite by runelite.

the class ExprArgOrderTest method test6.

@Test
public void test6() {
    ClassGroup group = ClassGroupFactory.generateGroup();
    Code code = group.findClass("test").findMethod("func").getCode();
    Instructions ins = code.getInstructions();
    code.setMaxStack(2);
    // vars[0] = 3
    Instruction[] prepareVariables = { new LDC(ins, 3), new IStore(ins, 0) };
    for (Instruction i : prepareVariables) {
        ins.addInstruction(i);
    }
    Label label = new Label(ins);
    /*
		iconst_0
		ldc                   8388608
		iload_3
		iadd
		ldc                   -16777216
		iand
		if_icmpeq             LABEL0x49
		 */
    Instruction[] body = { new LDC(ins, 0), new LDC(ins, 8388608), new ILoad(ins, 0), new IAdd(ins), new LDC(ins, -16777216), new IAnd(ins), // 8
    new IfICmpEq(ins, label), label, new VReturn(ins) };
    for (Instruction i : body) {
        ins.addInstruction(i);
    }
    ExprArgOrder exprArgOrder = new ExprArgOrder();
    exprArgOrder.run(group);
    List<Instruction> instructions = ins.getInstructions();
    assertEquals(ILOAD, instructions.get(2).getType());
    assertEquals(LDC, instructions.get(3).getType());
    assertEquals(IADD, instructions.get(4).getType());
    assertEquals(LDC, instructions.get(5).getType());
    assertEquals(IAND, instructions.get(6).getType());
    assertEquals(LDC, instructions.get(7).getType());
    assertEquals(IF_ICMPEQ, instructions.get(8).getType());
}
Also used : IfICmpEq(net.runelite.asm.attributes.code.instructions.IfICmpEq) IStore(net.runelite.asm.attributes.code.instructions.IStore) ILoad(net.runelite.asm.attributes.code.instructions.ILoad) Label(net.runelite.asm.attributes.code.Label) Instructions(net.runelite.asm.attributes.code.Instructions) LDC(net.runelite.asm.attributes.code.InstructionType.LDC) LDC(net.runelite.asm.attributes.code.instructions.LDC) Instruction(net.runelite.asm.attributes.code.Instruction) IAnd(net.runelite.asm.attributes.code.instructions.IAnd) Code(net.runelite.asm.attributes.Code) VReturn(net.runelite.asm.attributes.code.instructions.VReturn) ClassGroup(net.runelite.asm.ClassGroup) IAdd(net.runelite.asm.attributes.code.instructions.IAdd) Test(org.junit.Test)

Aggregations

Instruction (net.runelite.asm.attributes.code.Instruction)6 IfICmpEq (net.runelite.asm.attributes.code.instructions.IfICmpEq)6 Instructions (net.runelite.asm.attributes.code.Instructions)5 Label (net.runelite.asm.attributes.code.Label)5 ClassGroup (net.runelite.asm.ClassGroup)4 LDC (net.runelite.asm.attributes.code.instructions.LDC)4 Code (net.runelite.asm.attributes.Code)3 LVTInstruction (net.runelite.asm.attributes.code.instruction.types.LVTInstruction)3 PushConstantInstruction (net.runelite.asm.attributes.code.instruction.types.PushConstantInstruction)3 Goto (net.runelite.asm.attributes.code.instructions.Goto)3 IAdd (net.runelite.asm.attributes.code.instructions.IAdd)3 ILoad (net.runelite.asm.attributes.code.instructions.ILoad)3 IStore (net.runelite.asm.attributes.code.instructions.IStore)3 VReturn (net.runelite.asm.attributes.code.instructions.VReturn)3 Test (org.junit.Test)3 ArrayList (java.util.ArrayList)2 LDC (net.runelite.asm.attributes.code.InstructionType.LDC)2 InvokeInstruction (net.runelite.asm.attributes.code.instruction.types.InvokeInstruction)2 IMul (net.runelite.asm.attributes.code.instructions.IMul)2 If (net.runelite.asm.attributes.code.instructions.If)2