/**
*
*/
package soottocfg.soot.memory_model;
import java.util.List;
import soot.Local;
import soot.SootMethod;
import soot.Unit;
import soot.Value;
import soot.jimple.ArrayRef;
import soot.jimple.ClassConstant;
import soot.jimple.DoubleConstant;
import soot.jimple.FieldRef;
import soot.jimple.FloatConstant;
import soot.jimple.NewArrayExpr;
import soot.jimple.NewMultiArrayExpr;
import soot.jimple.StringConstant;
import soottocfg.cfg.expression.Expression;
import soottocfg.cfg.type.Type;
import soottocfg.cfg.variable.ClassVariable;
import soottocfg.soot.visitors.SootStmtSwitch;
import soottocfg.soot.visitors.SootValueSwitch;
/**
* @author schaef
*
*/
public abstract class MemoryModel {
protected SootStmtSwitch statementSwitch;
protected SootValueSwitch valueSwitch;
public MemoryModel() {
}
public void setStmtSwitch(SootStmtSwitch ss) {
this.statementSwitch = ss;
}
public void setValueSwitch(SootValueSwitch vs) {
this.valueSwitch = vs;
}
public abstract void mkHeapWriteStatement(Unit u, FieldRef field, Value rhs);
public abstract void mkHeapReadStatement(Unit u, FieldRef field, Value lhs);
public abstract void mkArrayWriteStatement(Unit u, ArrayRef arrayRef, Value rhs);
public abstract void mkArrayReadStatement(Unit u, ArrayRef arrayRef, Value lhs);
public void mkCopy(Local lhs, Local rhs) { }
public abstract Expression mkNewArrayExpr(NewArrayExpr arg0);
public abstract Expression mkNewMultiArrayExpr(NewMultiArrayExpr arg0);
public abstract Expression mkStringLengthExpr(Value arg0);
public abstract Expression mkNullConstant();
public abstract Expression mkStringConstant(StringConstant arg0);
public abstract Expression mkDoubleConstant(DoubleConstant arg0);
public abstract Expression mkFloatConstant(FloatConstant arg0);
public abstract void mkConstructorCall(Unit u, SootMethod constructor, List<Expression> args);
public abstract ClassVariable lookupClassVariable(ClassConstant t);
public abstract Type lookupType(soot.Type t);
public boolean isNullReference(Expression e) {
return false;
}
}