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;
}