private AviatorObject getAviatorObjectFromToken(Token<?> lookhead) { AviatorObject result = null; switch (lookhead.getType()) { case Number: // load numbers NumberToken numberToken = (NumberToken) lookhead; if (numberToken.getNumber() instanceof Double) { result = AviatorDouble.valueOf(numberToken.getNumber()); } else { result = AviatorLong.valueOf(numberToken.getNumber()); } break; case String: // load string result = new AviatorString((String) lookhead.getValue(null)); break; case Pattern: // load pattern result = new AviatorPattern((String) lookhead.getValue(null)); break; case Variable: if (lookhead == Variable.TRUE) { result = AviatorBoolean.TRUE; } else if (lookhead == Variable.FALSE) { result = AviatorBoolean.FALSE; } else if (lookhead == Variable.NIL) { result = AviatorNil.NIL; } break; case Char: result = new AviatorString(String.valueOf(lookhead.getValue(null))); break; } return result; }
@Override public AviatorObject call(Map<String, Object> env, AviatorObject arg1) { switch (arg1.getAviatorType()) { case Boolean: return AviatorLong.valueOf(arg1.booleanValue(env) ? 1 : 0); case JavaType: Object obj = arg1.getValue(env); if (obj instanceof Number) { return AviatorLong.valueOf(((Number) obj).longValue()); } else if (obj instanceof String) { return AviatorLong.valueOf(Long.valueOf((String) obj)); } else if (obj instanceof Character) { return AviatorLong.valueOf(Long.valueOf(String.valueOf(obj))); } else { throw new ClassCastException("Could not cast " + obj.getClass().getName() + " to long"); } case String: return AviatorLong.valueOf(Long.valueOf((String) arg1.getValue(env))); case Long: case Double: return AviatorLong.valueOf(((Number) arg1.getValue(env)).longValue()); default: throw new ClassCastException("Could not cast " + arg1 + " to long"); } }