package janala.interpreters;
import janala.solvers.History;
public final class LongObjectValue extends ObjectValue {
private LongValue longValue;
public Value getLongValue() { return longValue; }
public LongObjectValue() {
super(100, -1);
}
public LongObjectValue(LongValue v, int address) {
super(100, address);
longValue = v;
}
@Override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (o == this) {
return true;
}
if (o instanceof LongObjectValue) {
LongObjectValue other = (LongObjectValue) o;
return (longValue.equals(other.longValue));
} else if (o instanceof LongValue) {
LongValue otherVal = (LongValue) o;
return longValue.equals(otherVal);
} else {
return false;
}
}
@Override
public Value invokeMethod(String name, Value[] args, History history) {
if (name.equals("<init>")) {
if (args[0] instanceof LongValue) {
this.longValue = (LongValue) args[0];
} else {
this.longValue = new LongValue(Long.parseLong(((StringValue) args[0]).getConcrete()));
}
return PlaceHolder.instance;
} else if (name.equals("intValue")) {
return new IntValue((int) longValue.getConcreteLong(), longValue.getSymbolic());
} else if (name.equals("longValue")) {
return new LongValue((long) longValue.getConcreteLong(), longValue.getSymbolic());
} else if (name.equals("shortValue")) {
return new IntValue((short) longValue.getConcreteLong(), longValue.getSymbolic());
} else if (name.equals("byteValue")) {
return new IntValue((byte) longValue.getConcreteLong(), longValue.getSymbolic());
} else if (name.equals("equals")) {
if (args[0] instanceof LongObjectValue) {
LongObjectValue i2 = (LongObjectValue) args[0];
LongValue ret = longValue.LSUB(i2.longValue);
int concreteVal = ret.getConcreteLong() == 0L ? 1 : 0;
if (ret.getSymbolic() != null) {
SymbolicInt retSymbolic = ret.getSymbolic().setop(COMPARISON_OPS.EQ);
return new IntValue((int) concreteVal, retSymbolic);
} else {
return new IntValue((int) concreteVal);
}
}
} else if (name.equals("compareTo")) {
if (args[0] instanceof LongObjectValue) {
LongObjectValue i2 = (LongObjectValue) args[0];
LongValue ret = longValue.LSUB(i2.longValue);
int concreteVal = -1;
if (ret.getConcreteLong() > 0) {
concreteVal = 1;
} else if (ret.getConcreteLong() == 0) {
concreteVal = 0;
} else {
concreteVal = -1;
}
IntValue ret2 = new IntValue(concreteVal, ret.getSymbolic());
return ret2;
}
}
return PlaceHolder.instance;
}
}