Search in sources :

Example 71 with Local

use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.

the class UnSSATransformerTransformerTest method test06TwoJump.

@Test
public void test06TwoJump() {
    initMethod(true, "V");
    Local a1 = addLocal("a1");
    Local a2 = addLocal("a2");
    Local a = addLocal("a");
    Local b1 = addLocal("b1");
    Local b2 = addLocal("b2");
    Local b = addLocal("b");
    addStmt(nAssign(a1, nString("123")));
    addStmt(nAssign(b1, nString("123")));
    LabelStmt L1 = newLabel();
    addStmt(L1);
    attachPhi(L1, nAssign(a, nPhi(a1, a2)));
    attachPhi(L1, nAssign(b, nPhi(b1, b2)));
    addStmt(nAssign(a2, nString("456")));
    addStmt(nIf(niGt(nInt(100), nInt(0)), L1));
    addStmt(nAssign(b2, nString("456")));
    addStmt(nIf(niGt(nInt(100), nInt(0)), L1));
    addStmt(nReturnVoid());
    transform();
// Assert.assertTrue("must assign different index", ls1._ls_index != ls2._ls_index);
}
Also used : LabelStmt(com.googlecode.dex2jar.ir.stmt.LabelStmt) Local(com.googlecode.dex2jar.ir.expr.Local) Test(org.junit.Test)

Example 72 with Local

use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.

the class UnSSATransformerTransformerTest method test05OneInPhiLoop.

@Test
public void test05OneInPhiLoop() {
    initMethod(true, "V");
    Local a = addLocal("a");
    Local b = addLocal("b");
    Local phi = addLocal("p");
    Stmt s1 = addStmt(nAssign(a, nString("123")));
    LabelStmt L1 = newLabel();
    addStmt(L1);
    attachPhi(L1, nAssign(phi, nPhi(a)));
    addStmt(nVoidInvoke(nInvokeStatic(new Value[] { phi }, "LAAA;", "bMethod", new String[] { "Ljava/lang/String;" }, "V")));
    addStmt(nAssign(b, nString("456")));
    // phi is still live here
    Stmt s2 = addStmt(nVoidInvoke(nInvokeStatic(new Value[] { b }, "LBBB;", "cMethod", new String[] { "Ljava/lang/String;" }, "V")));
    addStmt(nIf(niGt(nInt(100), nInt(0)), L1));
    addStmt(nReturnVoid());
    transform();
    Assert.assertTrue("p=a should inserted", s1.getPre() != L1);
}
Also used : LabelStmt(com.googlecode.dex2jar.ir.stmt.LabelStmt) Local(com.googlecode.dex2jar.ir.expr.Local) LabelStmt(com.googlecode.dex2jar.ir.stmt.LabelStmt) Stmt(com.googlecode.dex2jar.ir.stmt.Stmt) Test(org.junit.Test)

Example 73 with Local

use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.

the class ConstTransformerTest method test03.

@Test
public void test03() {
    // test local loop
    IrMethod jm = new IrMethod();
    Local a = nLocal("a");
    Local b = nLocal("b");
    Local p = nLocal("p");
    jm.locals.add(a);
    jm.locals.add(b);
    jm.locals.add(p);
    jm.stmts.add(nAssign(a, nString("a String")));
    jm.stmts.add(nAssign(b, nString("b String")));
    jm.stmts.add(nAssign(p, Exprs.nPhi(a, b)));
    UnopStmt retStmt = nReturn(p);
    jm.stmts.add(retStmt);
    new ConstTransformer().transform(jm);
    Assert.assertTrue(jm.locals.size() == 3);
    Assert.assertTrue(jm.stmts.getSize() == 4);
    Assert.assertEquals(p, retStmt.op.trim());
}
Also used : ConstTransformer(com.googlecode.dex2jar.ir.ts.ConstTransformer) Exprs.nLocal(com.googlecode.dex2jar.ir.expr.Exprs.nLocal) Local(com.googlecode.dex2jar.ir.expr.Local) IrMethod(com.googlecode.dex2jar.ir.IrMethod) UnopStmt(com.googlecode.dex2jar.ir.stmt.UnopStmt) Test(org.junit.Test)

Example 74 with Local

use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.

the class RemoveConstantFromSSATest method t002.

@Test
public void t002() {
    Local a = addLocal("a");
    addStmt(nAssign(a, nInt(5)));
    addStmt(nReturn(a));
    transform();
    Assert.assertTrue("no local should kept", locals.size() == 0);
}
Also used : Local(com.googlecode.dex2jar.ir.expr.Local) Test(org.junit.Test)

Example 75 with Local

use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.

the class SSATransformerTest method test02NotInsertPhi.

@Test
public void test02NotInsertPhi() {
    Local b = addLocal("a");
    addStmt(nAssign(b, nString("123")));
    LabelStmt L1 = newLabel();
    addStmt(Stmts.nIf(Exprs.niEq(nInt(0), nInt(9)), L1));
    addStmt(Stmts.nNop());
    addStmt(L1);
    addStmt(nReturn(b));
    transform();
    Assert.assertEquals(1, method.locals.size());
}
Also used : Local(com.googlecode.dex2jar.ir.expr.Local) Test(org.junit.Test)

Aggregations

Local (com.googlecode.dex2jar.ir.expr.Local)86 Test (org.junit.Test)44 LabelStmt (com.googlecode.dex2jar.ir.stmt.LabelStmt)28 Stmt (com.googlecode.dex2jar.ir.stmt.Stmt)23 Value (com.googlecode.dex2jar.ir.expr.Value)19 AssignStmt (com.googlecode.dex2jar.ir.stmt.AssignStmt)15 ArrayList (java.util.ArrayList)8 IrMethod (com.googlecode.dex2jar.ir.IrMethod)6 Exprs.nLocal (com.googlecode.dex2jar.ir.expr.Exprs.nLocal)6 UnopStmt (com.googlecode.dex2jar.ir.stmt.UnopStmt)6 JumpStmt (com.googlecode.dex2jar.ir.stmt.JumpStmt)5 ConstTransformer (com.googlecode.dex2jar.ir.ts.ConstTransformer)5 Exprs.nString (com.googlecode.dex2jar.ir.expr.Exprs.nString)4 StmtList (com.googlecode.dex2jar.ir.stmt.StmtList)4 Trap (com.googlecode.dex2jar.ir.Trap)3 Exprs.nArrayValue (com.googlecode.dex2jar.ir.expr.Exprs.nArrayValue)3 AnalyzeValue (com.googlecode.dex2jar.ir.ts.an.AnalyzeValue)3 List (java.util.List)3 DexLabel (com.googlecode.d2j.DexLabel)2 Op (com.googlecode.d2j.reader.Op)2