Begin converting uses of PyCallable to PythonCallable.

PyCallable is a class that exists solely within the swig wrapper
code.  PythonCallable is a more generic implementation of the same
idea that can be used by any Python-related interop code, and lives
in PythonDataObjects.h

The CL is mostly mechanical, and it doesn't cover every possible
user of PyCallable, because I want to minimize the impact of this
change (as well as making it easier to figure out what went wrong
in case this causes a failure).  I plan to finish up the rest of
the changes in a subsequent patch, culminating in the removal of
PyCallable entirely.

llvm-svn: 252906
This commit is contained in:
Zachary Turner
2015-11-12 16:23:16 +00:00
parent 183c010c9a
commit b58fb2f47a
3 changed files with 206 additions and 228 deletions

View File

@@ -904,31 +904,35 @@ PythonCallable::Reset(PyRefType type, PyObject *py_obj)
}
void
PythonCallable::GetNumArguments(size_t &num_args, bool &has_varargs, bool &has_kwargs) const
PythonCallable::ArgInfo
PythonCallable::GetNumArguments() const
{
num_args = 0;
has_varargs = false;
has_kwargs = false;
ArgInfo result = { 0, false, false };
if (!IsValid())
return;
return result;
PyObject *py_func_obj = m_py_obj;
if (PyMethod_Check(py_func_obj))
py_func_obj = PyMethod_GET_FUNCTION(py_func_obj);
if (!py_func_obj)
return;
return result;
PyCodeObject* code = (PyCodeObject*)PyFunction_GET_CODE(py_func_obj);
if (!code)
return;
return result;
num_args = code->co_argcount;
if (code->co_flags & CO_VARARGS)
has_varargs = true;
if (code->co_flags & CO_VARKEYWORDS)
has_kwargs = true;
result.count = code->co_argcount;
result.has_varargs = !!(code->co_flags & CO_VARARGS);
result.has_kwargs = !!(code->co_flags & CO_VARKEYWORDS);
return result;
}
PythonObject
PythonCallable::operator ()()
{
return PythonObject(PyRefType::Owned,
PyObject_CallObject(m_py_obj, nullptr));
}
PythonObject