package cute.concolic.symbolicstate; import cute.concolic.input.InputMap; import java.util.Stack; import java.io.PrintWriter; /** * Created by IntelliJ IDEA. * User: Koushik Sen (ksen@cs.uiuc.edu) * Date: Jul 22, 2006 * Time: 9:21:30 AM */ public class StringEqualsExpression extends FunctionExpression { private PointerExpression sym; private String val; public static StringEqualsExpression getExpression(String fname, Stack syms,Stack vals){ if(fname.equals("<java.lang.String: boolean equals(java.lang.Object)>")){ Expression e1 = (Expression)syms.elementAt(0); Expression e2 = (Expression)syms.elementAt(1); if(e1!=null && vals.elementAt(0)!=null && e1 instanceof PointerExpression){ return new StringEqualsExpression((PointerExpression)e1,vals.elementAt(1).toString()); } else if(vals.elementAt(1)!=null && e2 instanceof PointerExpression){ return new StringEqualsExpression((PointerExpression)e2,(String)vals.elementAt(0)); } } return null; } public StringEqualsExpression(PointerExpression expression, String s) { sym = expression; val = s; } public void solve(double v, InputMap input) { boolean result = (v>0.5); if(!result){ if(val.equals("")) val = "x"; else val = ""; } setValue(sym,val,input); } public void printExpression(PrintWriter out) { out.print("String.equals()"+val+","); sym.printExpression(out); } }