public Object visit(NumberLiteral node) {
            Number value = (Number)node.getValue();
            Type toType = node.getType();
            Type fromType;

            if (Number.class.isAssignableFrom(toType.getObjectClass())) {
                fromType = toType.toPrimitive();
            }
            else {
                fromType = new Type(value.getClass()).toPrimitive();
            }

            Class<?> fromClass = fromType.getObjectClass();

            if (Integer.class.isAssignableFrom(fromClass)) {
                mBuilder.loadConstant(value.intValue());
            }
            else if (Float.class.isAssignableFrom(fromClass)) {
                mBuilder.loadConstant(value.floatValue());
            }
            else if (Long.class.isAssignableFrom(fromClass)) {
                mBuilder.loadConstant(value.longValue());
            }
            else if (Double.class.isAssignableFrom(fromClass)) {
                mBuilder.loadConstant(value.doubleValue());
            }
            else if (value instanceof Long) {
                mBuilder.loadConstant(value.longValue());
            }
            else if (value instanceof Float) {
                mBuilder.loadConstant(value.floatValue());
            }
            else if (value instanceof Double) {
                mBuilder.loadConstant(value.doubleValue());
            }
            else {
                mBuilder.loadConstant(value.intValue());
            }

            return null;
        }