package builtin.type;
import builtin.BuiltinSub;
import gui.Constants;
import gui.Heap;
import gui.MintException;
import gui.Pointer;
import gui.PointerTools;
import gui.SmartList;
/**
*
* @author Oliver Chu
*/
public class Real extends BuiltinSub {
@Override
public Pointer apply(SmartList<Pointer> args) throws MintException {
Pointer arg0 = args.get(0);
if (arg0.type == Constants.INT_TYPE) {
return Heap.allocateReal(PointerTools.dereferenceInt(arg0));
} else if (arg0.type == Constants.REAL_TYPE) {
return arg0;
} else if (arg0.type == Constants.TRUTH_TYPE) {
return Heap.allocateReal(arg0.value);
} else if (arg0.type == Constants.STR_TYPE) {
return Heap.allocateReal(Double.parseDouble(
PointerTools.dereferenceString(arg0)));
}
throw new MintException("Cannot convert " + arg0 + " to real.");
}
}