package zinara.ast.expression;
import zinara.ast.type.CharType;
import zinara.ast.type.StringType;
import zinara.ast.type.Type;
import zinara.code_generator.*;
import zinara.exceptions.InvalidCodeException;
import java.io.IOException;
public class StringExp extends Expression {
public String value;
public StringExp(String v) { value = v; type = new StringType(); }
public Type getType() { return type; }
public String toString() { return "\"" + value + "\""; }
public void tox86(Genx86 generate)
throws IOException,InvalidCodeException {
String code = "";
String reg = generate.regName(register,new CharType());
String addrReg = generate.addrRegName(register);
char ch;
code += generate.pushChar("0");//End of string
for (int i = value.length()-2; i >= 1; --i){
ch = value.charAt(i);
code += generate.pushChar(generate.toASCII(ch));
}
code += generate.movAddr(addrReg,generate.stack_pointer());
generate.write(code);
}
public boolean isStaticallyKnown() { return true; }
public Object staticValue() { return value; };
}