const value pyObjectToValue()

in modules/python/eval.hpp [601:627]


const value pyObjectToValue(PyObject* const o, PythonRuntime* const py) {
    if (o == NULL)
        return nilValue;
    if (PyString_Check(o)) {
        char* s = NULL;
        Py_ssize_t l = 0;
        PyString_AsStringAndSize(o, &s, &l);
        if (l != 0 && *s == '\'')
            return value(s + 1);
        return value(string(s, l));
    }
    if (PyBool_Check(o))
        return value(o == Py_True);
    if (PyInt_Check(o))
        return value((double)PyInt_AsLong(o));
    if (PyLong_Check(o))
        return value((double)PyLong_AsLong(o));
    if (PyFloat_Check(o))
        return value((double)PyFloat_AsDouble(o));
    if (PyTuple_Check(o))
        return pyTupleToValues(o, py);
    if (PyObject_TypeCheck(o, &pyLambda_type))
        return *(((pyLambda*)o)->func);
    if (PyCallable_Check(o))
        return lvvlambda(pyCallable(o, py));
    return nilValue;
}