package builtin.type; import builtin.BuiltinSub; import gui.Constants; import gui.MintException; import gui.Pointer; import gui.PointerTools; import gui.SmartList; /** * * @author Oliver Chu */ public class Truth extends BuiltinSub { @Override public Pointer apply(SmartList<Pointer> args) throws MintException { Pointer arg0 = args.get(0); if (arg0.type == Constants.INT_TYPE) { int i = PointerTools.dereferenceInt(arg0); if (i == 0) return new Pointer(Constants.TRUTH_TYPE, 0); else if (i == 1) return new Pointer(Constants.TRUTH_TYPE, 1); } else if (arg0.type == Constants.REAL_TYPE) { double d = PointerTools.dereferenceReal(arg0); if (d == 0.0) return new Pointer(Constants.TRUTH_TYPE, 0); else if (d == 1.0) return new Pointer(Constants.TRUTH_TYPE, 1); } else if (arg0.type == Constants.TRUTH_TYPE) { return arg0; } else if (arg0.type == Constants.STR_TYPE) { String s = PointerTools.dereferenceString(arg0); if (s.equals("true") || s.equals("1")) return new Pointer(Constants.TRUTH_TYPE, 1); else if (s.equals("false") || s.equals("0")) return new Pointer(Constants.TRUTH_TYPE, 0); } throw new MintException("Cannot convert " + arg0 + " to truth value."); } }