package janala.interpreters; public class FloatValue extends Value { float concrete; @Override public Object getConcrete() { return concrete; } @Override public boolean equals(Object other) { if (other == this) { return true; } else if (other == null) { return false; } else if (other instanceof FloatValue) { FloatValue otherVal = (FloatValue) other; return (concrete == otherVal.concrete); } else { return false; } } public FloatValue(float concrete) { this.concrete = concrete; } public FloatValue FADD(FloatValue d) { return new FloatValue(concrete + d.concrete); } public FloatValue FSUB(FloatValue d) { return new FloatValue(concrete - d.concrete); } public FloatValue FMUL(FloatValue d) { return new FloatValue(concrete * d.concrete); } public FloatValue FDIV(FloatValue d) { return new FloatValue(concrete / d.concrete); } public FloatValue FREM(FloatValue d) { return new FloatValue(concrete % d.concrete); } public FloatValue FNEG() { return new FloatValue(-concrete); } public IntValue F2I() { return new IntValue((int) concrete); } public LongValue F2L() { return new LongValue((long) concrete); } public DoubleValue F2D() { return new DoubleValue((double) concrete); } public IntValue FCMPL(FloatValue d) { if (Float.isNaN(concrete) || Float.isNaN(d.concrete)) { return new IntValue(-1); } else { return new IntValue(-((Float)concrete).compareTo(d.concrete)); } } public IntValue FCMPG(FloatValue d) { if (Float.isNaN(concrete) || Float.isNaN(d.concrete)) { return new IntValue(1); } else { return new IntValue(((Float)concrete).compareTo(d.concrete)); } } }