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: 11:46:01 AM
*/
public class StringLengthExpression extends FunctionExpression{
private PointerExpression sym;
public static StringLengthExpression getExpression(String fname, Stack syms,Stack vals){
if(fname.equals("<java.lang.String: int length()>")){
Expression e1 = (Expression)syms.elementAt(0);
if(e1!=null && vals.elementAt(0)!=null && e1 instanceof PointerExpression){
return new StringLengthExpression((PointerExpression)e1);
}
}
return null;
}
public StringLengthExpression(PointerExpression expression) {
sym = expression;
}
public void solve(double v, InputMap input) {
int len = (int)v;
if(len<0) len = 0;
System.out.println("len = " + len);
StringBuffer sb = new StringBuffer(len);
for(int i=0;i<len;i++){
sb.append('x');
}
setValue(sym,sb.toString(),input);
}
public void printExpression(PrintWriter out) {
out.print("String.length() ");
sym.printExpression(out);
}
}