Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package com.googlecode.dex2jar.ir.stmt;
import com.googlecode.dex2jar.ir.ET;
import com.googlecode.dex2jar.ir.LabelAndLocalMapper;
import com.googlecode.dex2jar.ir.expr.Value;
import java.util.Set;
/**
* Represent a statement
*
* @author Panxiaobo
* @version $Rev$
* @see ST
* @see ET
*/
public abstract class Stmt {
/**
* Represent a statement with no argument
*
* @see ET#E0
*/
public abstract static class E0Stmt extends Stmt {
public E0Stmt(ST type) {
super(type, ET.E0);
}
}
/**
* Represent a statement with 1 argument
*
* @see ET#E1
*/
public abstract static class E1Stmt extends Stmt {
public Value op;
public E1Stmt(ST type, Value op) {
super(type, ET.E1);
this.op = op;
}
@Override
public Value getOp() {
return op;
}
public void setOp(Value op) {
this.op = op;
}
}
/**
* Represent a statement with 2 arguments
*
* @see ET#E2
*/
public abstract static class E2Stmt extends Stmt {
public Value op1;
public Value op2;
public E2Stmt(ST type, Value op1, Value op2) {
super(type, ET.E2);
this.op1 = op1;
this.op2 = op2;
}
@Override
public Value getOp1() {
return op1;
}
@Override
public Value getOp2() {
return op2;
}
public void setOp1(Value op1) {
this.op1 = op1;
}
public void setOp2(Value op2) {
this.op2 = op2;
}
}
public static final int CAN_CONTINUE = 1;
public static final int CAN_BRNANCH = 1 << 1;
public static final int CAN_SWITCH = 1 << 2;
public static final int CAN_THROW = 1 << 3;
public static final int MAY_THROW = 1 << 4;
/**
* Statement Type
*/
public enum ST {
LOCAL_START(CAN_CONTINUE), // same as ASSIGN but left must keep and must be local
LOCAL_END(CAN_CONTINUE), // must keep and op must be local
ASSIGN(CAN_CONTINUE | MAY_THROW), IDENTITY(CAN_CONTINUE), LABEL(CAN_CONTINUE), LOCK(CAN_CONTINUE | CAN_THROW),
NOP(CAN_CONTINUE), UNLOCK(CAN_CONTINUE | CAN_THROW), VOID_INVOKE(CAN_CONTINUE | CAN_THROW),
FILL_ARRAY_DATA(CAN_CONTINUE | CAN_THROW), //
RETURN(MAY_THROW), RETURN_VOID(0), THROW(CAN_THROW), //
GOTO(CAN_BRNANCH), IF(CAN_CONTINUE | CAN_BRNANCH | MAY_THROW), //
LOOKUP_SWITCH(CAN_SWITCH | MAY_THROW), TABLE_SWITCH(CAN_SWITCH | MAY_THROW);
private final int config;
ST(int config) {
this.config = config;
}
public boolean canBranch() {
return 0 != (CAN_BRNANCH & config);
}
public boolean canContinue() {
return 0 != (CAN_CONTINUE & config);
}
public boolean canSwitch() {
return 0 != (CAN_SWITCH & config);
}
public boolean mayThrow() {
return 0 != (MAY_THROW & config);
}
public boolean canThrow() {
return 0 != (CAN_THROW & config);
}
}
/**
* Used in construct of a method CFG, Previous {@link Stmt} nodes
*/
public Set cfgFroms;
/**
* Used in construct of a method CFG, After {@link Stmt} nodes
*/
public Set exceptionHandlers;
/**
* Used in visit the method CFG
*/
public boolean visited;
/**
* Used in Local Split, forward frame of the {@link Stmt}
*/
public Object frame;
public Stmt tsDefaultNext;
/**
* The number of argument
*/
public final ET et;
/**
* Used in ordering statements in a {@link java.util.TreeSet}, id of the {@link Stmt} in its {@link StmtList}
*/
public int id;
/**
* Owner of the statement
*/
/* default */
StmtList list;
/**
* Next statement in {@link StmtList}
*/
/* default */
Stmt next;
/**
* Previous statement in {@link StmtList}
*/
/* default */
Stmt pre;
/**
* Statement Type
*/
public final ST st;
/**
* @param st Statement Type
* @param et The number of argument
*/
protected Stmt(ST st, ET et) {
this.st = st;
this.et = et;
}
public abstract Stmt clone(LabelAndLocalMapper mapper);
/**
* @return Next statement in {@link StmtList}, null if it is the last statement in {@link StmtList}
*/
public final Stmt getNext() {
return next;
}
public Value getOp() {
return null;
}
public Value getOp1() {
return null;
}
public Value getOp2() {
return null;
}
public Value[] getOps() {
return null;
}
/**
* @return Previous statement in {@link StmtList}, null if it is the first statement in {@link StmtList}
*/
public final Stmt getPre() {
return pre;
}
public void setOp(Value op) {
}
public void setOp1(Value op) {
}
public void setOp2(Value op) {
}
public void setOps(Value[] op) {
}
}