use of soot.grimp.internal.ExprBox in project soot by Sable.
the class Grimp method newExpr.
/**
* Carries out the mapping from other Value's to Grimp Value's
*/
public Value newExpr(Value value) {
if (value instanceof Expr) {
final ExprBox returnedExpr = new ExprBox(IntConstant.v(0));
((Expr) value).apply(new AbstractExprSwitch() {
public void caseAddExpr(AddExpr v) {
returnedExpr.setValue(newAddExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseAndExpr(AndExpr v) {
returnedExpr.setValue(newAndExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseCmpExpr(CmpExpr v) {
returnedExpr.setValue(newCmpExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseCmpgExpr(CmpgExpr v) {
returnedExpr.setValue(newCmpgExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseCmplExpr(CmplExpr v) {
returnedExpr.setValue(newCmplExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseDivExpr(DivExpr v) {
returnedExpr.setValue(newDivExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseEqExpr(EqExpr v) {
returnedExpr.setValue(newEqExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseNeExpr(NeExpr v) {
returnedExpr.setValue(newNeExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseGeExpr(GeExpr v) {
returnedExpr.setValue(newGeExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseGtExpr(GtExpr v) {
returnedExpr.setValue(newGtExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseLeExpr(LeExpr v) {
returnedExpr.setValue(newLeExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseLtExpr(LtExpr v) {
returnedExpr.setValue(newLtExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseMulExpr(MulExpr v) {
returnedExpr.setValue(newMulExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseOrExpr(OrExpr v) {
returnedExpr.setValue(newOrExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseRemExpr(RemExpr v) {
returnedExpr.setValue(newRemExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseShlExpr(ShlExpr v) {
returnedExpr.setValue(newShlExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseShrExpr(ShrExpr v) {
returnedExpr.setValue(newShrExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseUshrExpr(UshrExpr v) {
returnedExpr.setValue(newUshrExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseSubExpr(SubExpr v) {
returnedExpr.setValue(newSubExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseXorExpr(XorExpr v) {
returnedExpr.setValue(newXorExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseInterfaceInvokeExpr(InterfaceInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newInterfaceInvokeExpr((Local) (v.getBase()), v.getMethodRef(), newArgList));
}
public void caseSpecialInvokeExpr(SpecialInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newSpecialInvokeExpr((Local) (v.getBase()), v.getMethodRef(), newArgList));
}
public void caseStaticInvokeExpr(StaticInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newStaticInvokeExpr(v.getMethodRef(), newArgList));
}
public void caseVirtualInvokeExpr(VirtualInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newVirtualInvokeExpr((Local) (v.getBase()), v.getMethodRef(), newArgList));
}
public void caseDynamicInvokeExpr(DynamicInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newDynamicInvokeExpr(v.getBootstrapMethodRef(), v.getBootstrapArgs(), v.getMethodRef(), v.getHandleTag(), newArgList));
}
public void caseCastExpr(CastExpr v) {
returnedExpr.setValue(newCastExpr(newExpr(v.getOp()), v.getType()));
}
public void caseInstanceOfExpr(InstanceOfExpr v) {
returnedExpr.setValue(newInstanceOfExpr(newExpr(v.getOp()), v.getCheckType()));
}
public void caseNewArrayExpr(NewArrayExpr v) {
returnedExpr.setValue(newNewArrayExpr(v.getBaseType(), v.getSize()));
}
public void caseNewMultiArrayExpr(NewMultiArrayExpr v) {
returnedExpr.setValue(newNewMultiArrayExpr(v.getBaseType(), v.getSizes()));
}
public void caseNewExpr(NewExpr v) {
returnedExpr.setValue(newNewExpr(v.getBaseType()));
}
public void caseLengthExpr(LengthExpr v) {
returnedExpr.setValue(newLengthExpr(newExpr(v.getOp())));
}
public void caseNegExpr(NegExpr v) {
returnedExpr.setValue(newNegExpr(newExpr(v.getOp())));
}
public void defaultCase(Object v) {
returnedExpr.setValue((Expr) v);
}
});
return returnedExpr.getValue();
} else {
if (value instanceof ArrayRef) {
return newArrayRef(((ArrayRef) value).getBase(), newExpr(((ArrayRef) value).getIndex()));
}
if (value instanceof InstanceFieldRef) {
return newInstanceFieldRef(newExpr((((InstanceFieldRef) value).getBase())), ((InstanceFieldRef) value).getFieldRef());
}
/* have Ref/Value, which is fine -- not Jimple-specific. */
return value;
}
}
use of soot.grimp.internal.ExprBox in project soot by soot-oss.
the class Grimp method newExpr.
/**
* Carries out the mapping from other Value's to Grimp Value's
*/
public Value newExpr(Value value) {
if (value instanceof Expr) {
final ExprBox returnedExpr = new ExprBox(IntConstant.v(0));
((Expr) value).apply(new AbstractExprSwitch() {
public void caseAddExpr(AddExpr v) {
returnedExpr.setValue(newAddExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseAndExpr(AndExpr v) {
returnedExpr.setValue(newAndExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseCmpExpr(CmpExpr v) {
returnedExpr.setValue(newCmpExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseCmpgExpr(CmpgExpr v) {
returnedExpr.setValue(newCmpgExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseCmplExpr(CmplExpr v) {
returnedExpr.setValue(newCmplExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseDivExpr(DivExpr v) {
returnedExpr.setValue(newDivExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseEqExpr(EqExpr v) {
returnedExpr.setValue(newEqExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseNeExpr(NeExpr v) {
returnedExpr.setValue(newNeExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseGeExpr(GeExpr v) {
returnedExpr.setValue(newGeExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseGtExpr(GtExpr v) {
returnedExpr.setValue(newGtExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseLeExpr(LeExpr v) {
returnedExpr.setValue(newLeExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseLtExpr(LtExpr v) {
returnedExpr.setValue(newLtExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseMulExpr(MulExpr v) {
returnedExpr.setValue(newMulExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseOrExpr(OrExpr v) {
returnedExpr.setValue(newOrExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseRemExpr(RemExpr v) {
returnedExpr.setValue(newRemExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseShlExpr(ShlExpr v) {
returnedExpr.setValue(newShlExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseShrExpr(ShrExpr v) {
returnedExpr.setValue(newShrExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseUshrExpr(UshrExpr v) {
returnedExpr.setValue(newUshrExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseSubExpr(SubExpr v) {
returnedExpr.setValue(newSubExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseXorExpr(XorExpr v) {
returnedExpr.setValue(newXorExpr(newExpr(v.getOp1()), newExpr(v.getOp2())));
}
public void caseInterfaceInvokeExpr(InterfaceInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newInterfaceInvokeExpr((Local) (v.getBase()), v.getMethodRef(), newArgList));
}
public void caseSpecialInvokeExpr(SpecialInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newSpecialInvokeExpr((Local) (v.getBase()), v.getMethodRef(), newArgList));
}
public void caseStaticInvokeExpr(StaticInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newStaticInvokeExpr(v.getMethodRef(), newArgList));
}
public void caseVirtualInvokeExpr(VirtualInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newVirtualInvokeExpr((Local) (v.getBase()), v.getMethodRef(), newArgList));
}
public void caseDynamicInvokeExpr(DynamicInvokeExpr v) {
ArrayList newArgList = new ArrayList();
for (int i = 0; i < v.getArgCount(); i++) {
newArgList.add(newExpr(v.getArg(i)));
}
returnedExpr.setValue(newDynamicInvokeExpr(v.getBootstrapMethodRef(), v.getBootstrapArgs(), v.getMethodRef(), v.getHandleTag(), newArgList));
}
public void caseCastExpr(CastExpr v) {
returnedExpr.setValue(newCastExpr(newExpr(v.getOp()), v.getType()));
}
public void caseInstanceOfExpr(InstanceOfExpr v) {
returnedExpr.setValue(newInstanceOfExpr(newExpr(v.getOp()), v.getCheckType()));
}
public void caseNewArrayExpr(NewArrayExpr v) {
returnedExpr.setValue(newNewArrayExpr(v.getBaseType(), v.getSize()));
}
public void caseNewMultiArrayExpr(NewMultiArrayExpr v) {
returnedExpr.setValue(newNewMultiArrayExpr(v.getBaseType(), v.getSizes()));
}
public void caseNewExpr(NewExpr v) {
returnedExpr.setValue(newNewExpr(v.getBaseType()));
}
public void caseLengthExpr(LengthExpr v) {
returnedExpr.setValue(newLengthExpr(newExpr(v.getOp())));
}
public void caseNegExpr(NegExpr v) {
returnedExpr.setValue(newNegExpr(newExpr(v.getOp())));
}
public void defaultCase(Object v) {
returnedExpr.setValue((Expr) v);
}
});
return returnedExpr.getValue();
} else {
if (value instanceof ArrayRef) {
return newArrayRef(((ArrayRef) value).getBase(), newExpr(((ArrayRef) value).getIndex()));
}
if (value instanceof InstanceFieldRef) {
return newInstanceFieldRef(newExpr((((InstanceFieldRef) value).getBase())), ((InstanceFieldRef) value).getFieldRef());
}
/* have Ref/Value, which is fine -- not Jimple-specific. */
return value;
}
}
Aggregations