#5417: replace references to undocumented functions by ones to documented functions.

This commit is contained in:
Georg Brandl 2009-03-31 16:50:25 +00:00
parent b945bbf33e
commit c2784229b8
1 changed files with 13 additions and 12 deletions

View File

@ -465,10 +465,10 @@ reference count of an object and are safe in the presence of *NULL* pointers
(but note that *temp* will not be *NULL* in this context). More info on them (but note that *temp* will not be *NULL* in this context). More info on them
in section :ref:`refcounts`. in section :ref:`refcounts`.
.. index:: single: PyEval_CallObject() .. index:: single: PyObject_CallObject()
Later, when it is time to call the function, you call the C function Later, when it is time to call the function, you call the C function
:cfunc:`PyEval_CallObject`. This function has two arguments, both pointers to :cfunc:`PyObject_CallObject`. This function has two arguments, both pointers to
arbitrary Python objects: the Python function, and the argument list. The arbitrary Python objects: the Python function, and the argument list. The
argument list must always be a tuple object, whose length is the number of argument list must always be a tuple object, whose length is the number of
arguments. To call the Python function with no arguments, pass in NULL, or arguments. To call the Python function with no arguments, pass in NULL, or
@ -484,16 +484,16 @@ or more format codes between parentheses. For example::
... ...
/* Time to call the callback */ /* Time to call the callback */
arglist = Py_BuildValue("(i)", arg); arglist = Py_BuildValue("(i)", arg);
result = PyEval_CallObject(my_callback, arglist); result = PyObject_CallObject(my_callback, arglist);
Py_DECREF(arglist); Py_DECREF(arglist);
:cfunc:`PyEval_CallObject` returns a Python object pointer: this is the return :cfunc:`PyObject_CallObject` returns a Python object pointer: this is the return
value of the Python function. :cfunc:`PyEval_CallObject` is value of the Python function. :cfunc:`PyObject_CallObject` is
"reference-count-neutral" with respect to its arguments. In the example a new "reference-count-neutral" with respect to its arguments. In the example a new
tuple was created to serve as the argument list, which is :cfunc:`Py_DECREF`\ tuple was created to serve as the argument list, which is :cfunc:`Py_DECREF`\
-ed immediately after the call. -ed immediately after the call.
The return value of :cfunc:`PyEval_CallObject` is "new": either it is a brand The return value of :cfunc:`PyObject_CallObject` is "new": either it is a brand
new object, or it is an existing object whose reference count has been new object, or it is an existing object whose reference count has been
incremented. So, unless you want to save it in a global variable, you should incremented. So, unless you want to save it in a global variable, you should
somehow :cfunc:`Py_DECREF` the result, even (especially!) if you are not somehow :cfunc:`Py_DECREF` the result, even (especially!) if you are not
@ -501,7 +501,7 @@ interested in its value.
Before you do this, however, it is important to check that the return value Before you do this, however, it is important to check that the return value
isn't *NULL*. If it is, the Python function terminated by raising an exception. isn't *NULL*. If it is, the Python function terminated by raising an exception.
If the C code that called :cfunc:`PyEval_CallObject` is called from Python, it If the C code that called :cfunc:`PyObject_CallObject` is called from Python, it
should now return an error indication to its Python caller, so the interpreter should now return an error indication to its Python caller, so the interpreter
can print a stack trace, or the calling Python code can handle the exception. can print a stack trace, or the calling Python code can handle the exception.
If this is not possible or desirable, the exception should be cleared by calling If this is not possible or desirable, the exception should be cleared by calling
@ -513,7 +513,7 @@ If this is not possible or desirable, the exception should be cleared by calling
Py_DECREF(result); Py_DECREF(result);
Depending on the desired interface to the Python callback function, you may also Depending on the desired interface to the Python callback function, you may also
have to provide an argument list to :cfunc:`PyEval_CallObject`. In some cases have to provide an argument list to :cfunc:`PyObject_CallObject`. In some cases
the argument list is also provided by the Python program, through the same the argument list is also provided by the Python program, through the same
interface that specified the callback function. It can then be saved and used interface that specified the callback function. It can then be saved and used
in the same manner as the function object. In other cases, you may have to in the same manner as the function object. In other cases, you may have to
@ -524,7 +524,7 @@ event code, you might use the following code::
PyObject *arglist; PyObject *arglist;
... ...
arglist = Py_BuildValue("(l)", eventcode); arglist = Py_BuildValue("(l)", eventcode);
result = PyEval_CallObject(my_callback, arglist); result = PyObject_CallObject(my_callback, arglist);
Py_DECREF(arglist); Py_DECREF(arglist);
if (result == NULL) if (result == NULL)
return NULL; /* Pass error back */ return NULL; /* Pass error back */
@ -536,19 +536,20 @@ the error check! Also note that strictly speaking this code is not complete:
:cfunc:`Py_BuildValue` may run out of memory, and this should be checked. :cfunc:`Py_BuildValue` may run out of memory, and this should be checked.
You may also call a function with keyword arguments by using You may also call a function with keyword arguments by using
:cfunc:`PyEval_CallObjectWithKeywords`. As in the above example, we use :cfunc:`PyObject_Call`, which supports arguments and keyword arguments. As in
:cfunc:`Py_BuildValue` to construct the dictionary. :: the above example, we use :cfunc:`Py_BuildValue` to construct the dictionary. ::
PyObject *dict; PyObject *dict;
... ...
dict = Py_BuildValue("{s:i}", "name", val); dict = Py_BuildValue("{s:i}", "name", val);
result = PyEval_CallObjectWithKeywords(my_callback, NULL, dict); result = PyObject_Call(my_callback, NULL, dict);
Py_DECREF(dict); Py_DECREF(dict);
if (result == NULL) if (result == NULL)
return NULL; /* Pass error back */ return NULL; /* Pass error back */
/* Here maybe use the result */ /* Here maybe use the result */
Py_DECREF(result); Py_DECREF(result);
.. _parsetuple: .. _parsetuple:
Extracting Parameters in Extension Functions Extracting Parameters in Extension Functions