Markup consistency & nits.

Fix typo in a C code example:  KeyError is spelled PyExc_KeyError in C; the
"K" is upper case!

Some index entries.

On function signatures, always use parameter names.  Make return types match
what's in the header files.  When the return type is a pointer, always omit
the space between te type name and the "*"; leaving it in results in

	type * func(..)

and having two spaces there just looks terrible.
This commit is contained in:
Fred Drake 1998-04-02 06:47:24 +00:00
parent e9625e86b8
commit c6fa34e4d0
2 changed files with 342 additions and 372 deletions

View File

@ -55,7 +55,7 @@ Python in other applications since its early existence, the process of
embedding Python is less straightforward that writing an extension.
Python 1.5 introduces a number of new API functions as well as some
changes to the build process that make embedding much simpler.
This manual describes the \version\ state of affair.
This manual describes the \version\ state of affairs.
% XXX Eventually, take the historical notes out
Many API functions are useful independent of whether you're embedding
@ -200,6 +200,7 @@ the moment; a better way to code this is shown below anyway):
\begin{verbatim}
PyObject *t;
t = PyTuple_New(3);
PyTuple_SetItem(t, 0, PyInt_FromLong(1L));
PyTuple_SetItem(t, 1, PyInt_FromLong(2L));
@ -220,6 +221,7 @@ difference between the two (the extra \cfunction{Py_DECREF()} calls):
\begin{verbatim}
PyObject *l, *x;
l = PyList_New(3);
x = PyInt_FromLong(1L);
PySequence_SetItem(l, 0, x); Py_DECREF(x);
@ -239,6 +241,7 @@ also takes care of the error checking):
\begin{verbatim}
PyObject *t, *l;
t = Py_BuildValue("(iis)", 1, 2, "three");
l = Py_BuildValue("[iis]", 1, 2, "three");
\end{verbatim}
@ -256,6 +259,7 @@ item:
int set_all(PyObject *target, PyObject *item)
{
int i, n;
n = PyObject_Length(target);
if (n < 0)
return -1;
@ -299,6 +303,7 @@ long sum_list(PyObject *list)
int i, n;
long total = 0;
PyObject *item;
n = PyList_Size(list);
if (n < 0)
return -1; /* Not a list */
@ -364,7 +369,7 @@ ambiguous return value, and require explicit testing for errors with
Exception state is maintained in per-thread storage (this is
equivalent to using global storage in an unthreaded application). A
thread can be on one of two states: an exception has occurred, or not.
thread can be in one of two states: an exception has occurred, or not.
The function \cfunction{PyErr_Occurred()} can be used to check for
this: it returns a borrowed reference to the exception type object
when an exception has occurred, and \NULL{} otherwise. There are a
@ -384,7 +389,7 @@ exception state only exists while an exception is being passed on
between \C{} functions until it reaches the Python interpreter, which
takes care of transferring it to \code{sys.exc_type} and friends.
(Note that starting with Python 1.5, the preferred, thread-safe way to
Note that starting with Python 1.5, the preferred, thread-safe way to
access the exception state from Python code is to call the function
\function{sys.exc_info()}, which returns the per-thread exception state
for Python code. Also, the semantics of both ways to access the
@ -394,7 +399,7 @@ preserve the exception state of its caller. This prevents common bugs
in exception handling code caused by an innocent-looking function
overwriting the exception being handled; it also reduces the often
unwanted lifetime extension for objects that are referenced by the
stack frames in the traceback.)
stack frames in the traceback.
As a general principle, a function that calls another function to
perform some task should check whether the called function raised an
@ -431,8 +436,8 @@ int incr_item(PyObject *dict, PyObject *key)
item = PyObject_GetItem(dict, key);
if (item == NULL) {
/* Handle keyError only: */
if (!PyErr_ExceptionMatches(PyExc_keyError)) goto error;
/* Handle KeyError only: */
if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error;
/* Clear the error and use zero: */
PyErr_Clear();
@ -489,7 +494,8 @@ This initializes the table of loaded modules, and creates the
fundamental modules \module{__builtin__}\refbimodindex{__builtin__},
\module{__main__}\refbimodindex{__main__} and
\module{sys}\refbimodindex{sys}. It also initializes the module
search path (\code{sys.path}).
search path (\code{sys.path}).%
\indexiii{module}{search}{path}
\cfunction{Py_Initialize()} does not set the ``script argument list''
(\code{sys.argv}). If this variable is needed by Python code that
@ -506,21 +512,21 @@ interpreter executable. In particular, it looks for a directory named
\file{lib/python\version} (replacing \file{\version} with the current
interpreter version) relative to the parent directory where the
executable named \file{python} is found on the shell command search
path (the environment variable \code{\$PATH}).
path (the environment variable \envvar{PATH}).
For instance, if the Python executable is found in
\file{/usr/local/bin/python}, it will assume that the libraries are in
\file{/usr/local/lib/python\version}. (In fact, this particular path
is also the ``fallback'' location, used when no executable file named
\file{python} is found along \code{\$PATH}.) The user can override
this behavior by setting the environment variable \code{\$PYTHONHOME},
\file{python} is found along \envvar{PATH}.) The user can override
this behavior by setting the environment variable \envvar{PYTHONHOME},
or insert additional directories in front of the standard path by
setting \code{\$PYTHONPATH}.
setting \envvar{PYTHONPATH}.
The embedding application can steer the search by calling
\code{Py_SetProgramName(\var{file})} \emph{before} calling
\cfunction{Py_Initialize()}. Note that \code{\$PYTHONHOME} still
overrides this and \code{\$PYTHONPATH} is still inserted in front of
\cfunction{Py_Initialize()}. Note that \envvar{PYTHONHOME} still
overrides this and \envvar{PYTHONPATH} is still inserted in front of
the standard path. An application that requires total control has to
provide its own implementation of \cfunction{Py_GetPath()},
\cfunction{Py_GetPrefix()}, \cfunction{Py_GetExecPrefix()},
@ -544,34 +550,41 @@ The functions in this chapter will let you execute Python source code
given in a file or a buffer, but they will not let you interact in a
more detailed way with the interpreter.
\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *}
\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *command}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int}
\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseString}{char *str,
int start}
\end{cfuncdesc}
\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int}
\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseFile}{FILE *fp,
char *filename, int start}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *}
\begin{cfuncdesc}{PyObject*}{PyRun_String}{char *str, int start,
PyObject *globals,
PyObject *locals}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *}
\begin{cfuncdesc}{PyObject*}{PyRun_File}{FILE *fp, char *filename,
int start, PyObject *globals,
PyObject *locals}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int}
\begin{cfuncdesc}{PyObject*}{Py_CompileString}{char *str, char *filename,
int start}
\end{cfuncdesc}
@ -582,7 +595,7 @@ The macros in this section are used for managing reference counts
of Python objects.
\begin{cfuncdesc}{void}{Py_INCREF}{PyObject *o}
Increment the reference count for object \code{o}. The object must
Increment the reference count for object \var{o}. The object must
not be \NULL{}; if you aren't sure that it isn't \NULL{}, use
\cfunction{Py_XINCREF()}.
\end{cfuncdesc}
@ -659,7 +672,7 @@ indicator. Call this function only when the error indicator is set.
(Otherwise it will cause a fatal error!)
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_Occurred}{}
\begin{cfuncdesc}{PyObject*}{PyErr_Occurred}{}
Test whether the error indicator is set. If set, return the exception
\emph{type} (the first argument to the last call to one of the
\code{PyErr_Set*()} functions or to \cfunction{PyErr_Restore()}). If
@ -749,13 +762,13 @@ This is a shorthand for \samp{PyErr_SetString(PyExc_TypeError,
was invoked with an illegal argument. It is mostly for internal use.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_NoMemory}{}
\begin{cfuncdesc}{PyObject*}{PyErr_NoMemory}{}
This is a shorthand for \samp{PyErr_SetNone(PyExc_MemoryError)}; it
returns \NULL{} so an object allocation function can write
\samp{return PyErr_NoMemory();} when it runs out of memory.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_SetFromErrno}{PyObject *type}
\begin{cfuncdesc}{PyObject*}{PyErr_SetFromErrno}{PyObject *type}
This is a convenience function to raise an exception when a \C{} library
function has returned an error and set the \C{} variable \code{errno}.
It constructs a tuple object whose first item is the integer
@ -797,8 +810,9 @@ the effect of a \constant{SIGINT} signal arriving --- the next time
\exception{KeyboadInterrupt} will be raised.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_NewException}{char *name,
PyObject *base, PyObject *dict}
\begin{cfuncdesc}{PyObject*}{PyErr_NewException}{char *name,
PyObject *base,
PyObject *dict}
This utility function creates and returns a new exception object. The
\var{name} argument must be the name of the new exception, a \C{} string
of the form \code{module.class}. The \var{base} and \var{dict}
@ -913,7 +927,7 @@ by \var{func}.
\section{Importing Modules}
\label{importing}
\begin{cfuncdesc}{PyObject *}{PyImport_ImportModule}{char *name}
\begin{cfuncdesc}{PyObject*}{PyImport_ImportModule}{char *name}
This is a simplified interface to \cfunction{PyImport_ImportModuleEx()}
below, leaving the \var{globals} and \var{locals} arguments set to
\NULL{}. When the \var{name} argument contains a dot (i.e., when
@ -925,10 +939,10 @@ effect when \var{name} in fact specifies a subpackage instead of a
submodule: the submodules specified in the package's \code{__all__}
variable are loaded.) Return a new reference to the imported module,
or \NULL{} with an exception set on failure (the module may still
be created in this case).
be created in this case --- examine \code{sys.modules} to find out).
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_ImportModuleEx}{char *name, PyObject *globals, PyObject *locals, PyObject *fromlist}
\begin{cfuncdesc}{PyObject*}{PyImport_ImportModuleEx}{char *name, PyObject *globals, PyObject *locals, PyObject *fromlist}
Import a module. This is best described by referring to the built-in
Python function \function{__import__()}\bifuncindex{__import__}, as
the standard \function{__import__()} function calls this function
@ -942,7 +956,7 @@ package was requested is normally the top-level package, unless a
non-empty \var{fromlist} was given.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_Import}{PyObject *name}
\begin{cfuncdesc}{PyObject*}{PyImport_Import}{PyObject *name}
This is a higher-level interface that calls the current ``import hook
function''. It invokes the \function{__import__()} function from the
\code{__builtins__} of the current globals. This means that the
@ -951,7 +965,7 @@ current environment, e.g. by \module{rexec}\refstmodindex{rexec} or
\module{ihooks}\refstmodindex{ihooks}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_ReloadModule}{PyObject *m}
\begin{cfuncdesc}{PyObject*}{PyImport_ReloadModule}{PyObject *m}
Reload a module. This is best described by referring to the built-in
Python function \function{reload()}\bifuncindex{reload}, as the standard
\function{reload()} function calls this function directly. Return a
@ -959,7 +973,7 @@ new reference to the reloaded module, or \NULL{} with an exception set
on failure (the module still exists in this case).
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_AddModule}{char *name}
\begin{cfuncdesc}{PyObject*}{PyImport_AddModule}{char *name}
Return the module object corresponding to a module name. The
\var{name} argument may be of the form \code{package.module}). First
check the modules dictionary if there's one there, and if not, create
@ -969,7 +983,7 @@ do not own the returned reference. Return \NULL{} with an
exception set on failure.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_ExecCodeModule}{char *name, PyObject *co}
\begin{cfuncdesc}{PyObject*}{PyImport_ExecCodeModule}{char *name, PyObject *co}
Given a module name (possibly of the form \code{package.module}) and a
code object read from a Python bytecode file or obtained from the
built-in function \function{compile()}\bifuncindex{compile}, load the
@ -985,7 +999,7 @@ and \file{.pyo} files). The magic number should be present in the
first four bytes of the bytecode file, in little-endian byte order.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_GetModuleDict}{}
\begin{cfuncdesc}{PyObject*}{PyImport_GetModuleDict}{}
Return the dictionary used for the module administration
(a.k.a. \code{sys.modules}). Note that this is a per-interpreter
variable.
@ -1003,11 +1017,11 @@ Empty the module table. For internal use only.
Finalize the import mechanism. For internal use only.
\end{cfuncdesc}
\begin{cfuncdesc}{extern PyObject *}{_PyImport_FindExtension}{char *, char *}
\begin{cfuncdesc}{PyObject*}{_PyImport_FindExtension}{char *, char *}
For internal use only.
\end{cfuncdesc}
\begin{cfuncdesc}{extern PyObject *}{_PyImport_FixupExtension}{char *, char *}
\begin{cfuncdesc}{PyObject*}{_PyImport_FixupExtension}{char *, char *}
For internal use only.
\end{cfuncdesc}
@ -1022,8 +1036,10 @@ already imported.)
\begin{ctypedesc}{struct _frozen}
This is the structure type definition for frozen module descriptors,
as generated by the \code{freeze} utility (see \file{Tools/freeze/} in
the Python source distribution). Its definition is:
as generated by the \program{freeze}\index{freeze utility} utility
(see \file{Tools/freeze/} in the Python source distribution). Its
definition is:
\begin{verbatim}
struct _frozen {
char *name;
@ -1033,11 +1049,11 @@ struct _frozen {
\end{verbatim}
\end{ctypedesc}
\begin{cvardesc}{struct _frozen *}{PyImport_FrozenModules}
\begin{cvardesc}{struct _frozen*}{PyImport_FrozenModules}
This pointer is initialized to point to an array of \code{struct
_frozen} records, terminated by one whose members are all \NULL{}
or zero. When a frozen module is imported, it is searched in this
table. Third party code could play tricks with this to provide a
table. Third-party code could play tricks with this to provide a
dynamically created collection of frozen modules.
\end{cvardesc}
@ -1708,51 +1724,45 @@ This instance of \code{PyTypeObject} represents the Python string type.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int}
\begin{cfuncdesc}{PyObject*}{PyString_FromStringAndSize}{const char *v,
int len}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_FromString}{const char *v}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyString_Size}{PyObject *string}
\end{cfuncdesc}
\begin{cfuncdesc}{char*}{PyString_AsString}{PyObject *string}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **string,
PyObject *newpart}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **string,
PyObject *newpart}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **string, int newsize}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_Format}{PyObject *format,
PyObject *args}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **string}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_InternFromString}{const char *v}
\end{cfuncdesc}
\begin{cfuncdesc}{char*}{PyString_AS_STRING}{PyObject *string}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyString_Size}{PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *}
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *}
\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyObject *string}
\end{cfuncdesc}
@ -1772,7 +1782,7 @@ This instance of \code{PyTypeObject} represents the Python tuple type.
Return true if the argument is a tuple object.
\end{cfuncdesc}
\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s}
\begin{cfuncdesc}{PyObject*}{PyTuple_New}{int s}
Return a new tuple object of size \var{s}.
\end{cfuncdesc}
@ -1781,17 +1791,17 @@ Takes a pointer to a tuple object, and returns the size
of that tuple.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos}
\begin{cfuncdesc}{PyObject*}{PyTuple_GetItem}{PyTupleObject *p, int pos}
Returns the object at position \var{pos} in the tuple pointed
to by \var{p}. If \var{pos} is out of bounds, returns \NULL{} and
raises an \exception{IndexError} exception.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
\begin{cfuncdesc}{PyObject*}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
Does the same, but does no checking of its arguments.
\end{cfuncdesc}
\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p,
\begin{cfuncdesc}{PyObject*}{PyTuple_GetSlice}{PyTupleObject *p,
int low,
int high}
Takes a slice of the tuple pointed to by \var{p} from
@ -1813,7 +1823,7 @@ Does the same, but does no error checking, and
should \emph{only} be used to fill in brand new tuples.
\end{cfuncdesc}
\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p,
\begin{cfuncdesc}{int}{_PyTuple_Resize}{PyTupleObject *p,
int new,
int last_is_sticky}
Can be used to resize a tuple. Because tuples are
@ -1841,56 +1851,48 @@ This instance of \code{PyTypeObject} represents the Python list type.
Returns true if its argument is a \code{PyListObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_New}{int size}
\begin{cfuncdesc}{PyObject*}{PyList_New}{int size}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Size}{PyObject *}
\begin{cfuncdesc}{int}{PyList_Size}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int}
\begin{cfuncdesc}{PyObject*}{PyList_GetItem}{PyObject *list, int index}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *}
\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *list, int index,
PyObject *item}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *}
\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *list, int index,
PyObject *index}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *}
\begin{cfuncdesc}{int}{PyList_Append}{PyObject *list, PyObject *item}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int}
\begin{cfuncdesc}{PyObject*}{PyList_GetSlice}{PyObject *list,
int low, int high}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *}
\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *list,
int low, int high,
PyObject *itemlist}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *}
\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *}
\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *}
\begin{cfuncdesc}{PyObject*}{PyList_AsTuple}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i}
\begin{cfuncdesc}{PyObject*}{PyList_GET_ITEM}{PyObject *list, int i}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
\end{cfuncdesc}
@ -1912,7 +1914,7 @@ This instance of \code{PyTypeObject} represents the Python dictionary type.
Returns true if its argument is a \code{PyDictObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{}
\begin{cfuncdesc}{PyObject*}{PyDict_New}{}
Returns a new empty dictionary.
\end{cfuncdesc}
@ -1946,29 +1948,29 @@ Removes the entry in dictionary \var{p} which has a key
specified by the \code{char *}\var{key}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
\begin{cfuncdesc}{PyObject*}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
Returns the object from dictionary \var{p} which has a key
\var{key}. Returns \NULL{} if the key \var{key} is not present.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key}
\begin{cfuncdesc}{PyObject*}{PyDict_GetItemString}{PyDictObject *p, char *key}
Does the same, but \var{key} is specified as a
\code{char *}, rather than a \code{PyObject *}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p}
\begin{cfuncdesc}{PyObject*}{PyDict_Items}{PyDictObject *p}
Returns a \code{PyListObject} containing all the items
from the dictionary, as in the mapping method \method{items()} (see
the \emph{Python Library Reference}).
\end{cfuncdesc}
\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p}
\begin{cfuncdesc}{PyObject*}{PyDict_Keys}{PyDictObject *p}
Returns a \code{PyListObject} containing all the keys
from the dictionary, as in the mapping method \method{keys()} (see the
\emph{Python Library Reference}).
\end{cfuncdesc}
\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p}
\begin{cfuncdesc}{PyObject*}{PyDict_Values}{PyDictObject *p}
Returns a \code{PyListObject} containing all the values
from the dictionary \var{p}, as in the mapping method
\method{values()} (see the \emph{Python Library Reference}).
@ -2005,7 +2007,7 @@ integer type.
\end{cfuncdesc}
\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival}
\begin{cfuncdesc}{PyObject*}{PyInt_FromLong}{long ival}
Creates a new integer object with a value of \var{ival}.
The current implementation keeps an array of integer objects for all
@ -2048,32 +2050,26 @@ integer type.
Returns true if its argument is a \code{PyLongObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long}
\begin{cfuncdesc}{PyObject*}{PyLong_FromLong}{long v}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long}
\begin{cfuncdesc}{PyObject*}{PyLong_FromUnsignedLong}{unsigned long v}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double}
\begin{cfuncdesc}{PyObject*}{PyLong_FromDouble}{double v}
\end{cfuncdesc}
\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *}
\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *pylong}
\end{cfuncdesc}
\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject }
\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject *pylong}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *}
\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *pylong}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int}
\begin{cfuncdesc}{PyObject*}{PyLong_FromString}{char *str, char **pend,
int base}
\end{cfuncdesc}
@ -2094,16 +2090,13 @@ point type.
Returns true if its argument is a \code{PyFloatObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double}
\begin{cfuncdesc}{PyObject*}{PyFloat_FromDouble}{double v}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *}
\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *pyfloat}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *}
\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyObject *pyfloat}
\end{cfuncdesc}
@ -2137,48 +2130,38 @@ number type.
Returns true if its argument is a \code{PyComplexObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex left, Py_complex right}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex left, Py_complex right}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex complex}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex left, Py_complex right}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex dividend,
Py_complex divisor}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex num, Py_complex exp}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex}
\begin{cfuncdesc}{PyObject*}{PyComplex_FromCComplex}{Py_complex v}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag}
\begin{cfuncdesc}{PyObject*}{PyComplex_FromDoubles}{double real, double imag}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op}
\end{cfuncdesc}
@ -2201,12 +2184,12 @@ This instance of \code{PyTypeObject} represents the Python file type.
Returns true if its argument is a \code{PyFileObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode}
\begin{cfuncdesc}{PyObject*}{PyFile_FromString}{char *name, char *mode}
Creates a new \code{PyFileObject} pointing to the file
specified in \var{name} with the mode specified in \var{mode}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp,
\begin{cfuncdesc}{PyObject*}{PyFile_FromFile}{FILE *fp,
char *name, char *mode, int (*close)}
Creates a new \code{PyFileObject} from the already-open \var{fp}.
The function \var{close} will be called when the file should be
@ -2217,11 +2200,11 @@ closed.
Returns the file object associated with \var{p} as a \code{FILE *}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n}
\begin{cfuncdesc}{PyObject*}{PyFile_GetLine}{PyObject *p, int n}
undocumented as yet
\end{cfuncdesc}
\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p}
\begin{cfuncdesc}{PyObject*}{PyFile_Name}{PyObject *p}
Returns the name of the file specified by \var{p} as a
\code{PyStringObject}.
\end{cfuncdesc}
@ -2233,17 +2216,19 @@ only be called immediately after file object creation.
\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag}
Sets the \code{softspace} attribute of \var{p} to \var{newflag}.
Returns the previosu value. This function clears any errors, and will
Returns the previous value. This function clears any errors, and will
return \code{0} as the previous value if the attribute either does not
exist or if there were errors in retrieving it. There is no way to
detect errors from this function, but doing so should not be needed.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p}
\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p,
int flags}
Writes object \var{obj} to file object \var{p}.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p}
\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p,
int flags}
Writes string \var{s} to file object \var{p}.
\end{cfuncdesc}
@ -2314,7 +2299,7 @@ calls \cfunction{Py_Initialize()} and \cfunction{Py_Finalize()} more
than once.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{Py_NewInterpreter}{}
\begin{cfuncdesc}{PyThreadState*}{Py_NewInterpreter}{}
Create a new sub-interpreter. This is an (almost) totally separate
environment for the execution of Python code. In particular, the new
interpreter has separate, independent versions of all imported
@ -2392,13 +2377,13 @@ program's execution. No code in the Python interpreter will change
the contents of this storage.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetProgramName}{}
\begin{cfuncdesc}{char*}{Py_GetProgramName}{}
Return the program name set with \cfunction{Py_SetProgramName()}, or the
default. The returned string points into static storage; the caller
should not modify its value.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetPrefix}{}
\begin{cfuncdesc}{char*}{Py_GetPrefix}{}
Return the \emph{prefix} for installed platform-independent files. This
is derived through a number of complicated rules from the program name
set with \cfunction{Py_SetProgramName()} and some environment variables;
@ -2412,7 +2397,7 @@ Python code as \code{sys.prefix}. It is only useful on \UNIX{}. See
also the next function.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetExecPrefix}{}
\begin{cfuncdesc}{char*}{Py_GetExecPrefix}{}
Return the \emph{exec-prefix} for installed platform-\emph{de}pendent
files. This is derived through a number of complicated rules from the
program name set with \cfunction{Py_SetProgramName()} and some environment
@ -2450,7 +2435,7 @@ while having \code{"/usr/local/plat"} be a different filesystem for each
platform.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetProgramFullPath}{}
\begin{cfuncdesc}{char*}{Py_GetProgramFullPath}{}
Return the full program name of the Python executable; this is
computed as a side-effect of deriving the default module search path
from the program name (set by \cfunction{Py_SetProgramName()} above). The
@ -2459,7 +2444,7 @@ modify its value. The value is available to Python code as
\code{sys.executable}.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetPath}{}
\begin{cfuncdesc}{char*}{Py_GetPath}{}
\indexiii{module}{search}{path}
Return the default module search path; this is computed from the
program name (set by \cfunction{Py_SetProgramName()} above) and some
@ -2475,7 +2460,7 @@ future search path for loaded modules.
% XXX should give the exact rules
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetVersion}{}
\begin{cfuncdesc}{const char*}{Py_GetVersion}{}
Return the version of this Python interpreter. This is a string that
looks something like
@ -2490,7 +2475,7 @@ the caller should not modify its value. The value is available to
Python code as the list \code{sys.version}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetPlatform}{}
\begin{cfuncdesc}{const char*}{Py_GetPlatform}{}
Return the platform identifier for the current platform. On \UNIX{},
this is formed from the ``official'' name of the operating system,
converted to lower case, followed by the major revision number; e.g.,
@ -2501,7 +2486,7 @@ the caller should not modify its value. The value is available to
Python code as \code{sys.platform}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetCopyright}{}
\begin{cfuncdesc}{const char*}{Py_GetCopyright}{}
Return the official copyright string for the current Python version,
for example
@ -2512,7 +2497,7 @@ modify its value. The value is available to Python code as the list
\code{sys.copyright}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetCompiler}{}
\begin{cfuncdesc}{const char*}{Py_GetCompiler}{}
Return an indication of the compiler used to build the current Python
version, in square brackets, for example:
@ -2525,7 +2510,7 @@ modify its value. The value is available to Python code as part of
the variable \code{sys.version}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetBuildInfo}{}
\begin{cfuncdesc}{const char*}{Py_GetBuildInfo}{}
Return information about the sequence number and build date and time
of the current Python interpreter instance, for example
@ -2754,7 +2739,7 @@ function is not available when thread support is disabled at compile
time.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyEval_SaveThread}{}
\begin{cfuncdesc}{PyThreadState*}{PyEval_SaveThread}{}
Release the interpreter lock (if it has been created and thread
support is enabled) and reset the thread state to \NULL{},
returning the previous thread state (which is not \NULL{}). If
@ -2809,7 +2794,7 @@ All of the following functions are only available when thread support
is enabled at compile time, and must be called only when the
interpreter lock has been created.
\begin{cfuncdesc}{PyInterpreterState *}{PyInterpreterState_New}{}
\begin{cfuncdesc}{PyInterpreterState*}{PyInterpreterState_New}{}
Create a new interpreter state object. The interpreter lock must be
held.
\end{cfuncdesc}
@ -2825,7 +2810,7 @@ held. The interpreter state must have been reset with a previous
call to \cfunction{PyInterpreterState_Clear()}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyThreadState_New}{PyInterpreterState *interp}
\begin{cfuncdesc}{PyThreadState*}{PyThreadState_New}{PyInterpreterState *interp}
Create a new thread state object belonging to the given interpreter
object. The interpreter lock must be held.
\end{cfuncdesc}
@ -2841,13 +2826,13 @@ held. The thread state must have been reset with a previous
call to \cfunction{PyThreadState_Clear()}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyThreadState_Get}{}
\begin{cfuncdesc}{PyThreadState*}{PyThreadState_Get}{}
Return the current thread state. The interpreter lock must be held.
When the current thread state is \NULL{}, this issues a fatal
error (so that the caller needn't check for \NULL{}).
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyThreadState_Swap}{PyThreadState *tstate}
\begin{cfuncdesc}{PyThreadState*}{PyThreadState_Swap}{PyThreadState *tstate}
Swap the current thread state with the thread state given by the
argument \var{tstate}, which may be \NULL{}. The interpreter lock
must be held.
@ -2857,10 +2842,10 @@ must be held.
\chapter{Defining New Object Types}
\label{newTypes}
\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type}
\begin{cfuncdesc}{PyObject*}{_PyObject_New}{PyTypeObject *type}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size}
\begin{cfuncdesc}{PyObject*}{_PyObject_NewVar}{PyTypeObject *type, int size}
\end{cfuncdesc}
\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *}

View File

@ -55,7 +55,7 @@ Python in other applications since its early existence, the process of
embedding Python is less straightforward that writing an extension.
Python 1.5 introduces a number of new API functions as well as some
changes to the build process that make embedding much simpler.
This manual describes the \version\ state of affair.
This manual describes the \version\ state of affairs.
% XXX Eventually, take the historical notes out
Many API functions are useful independent of whether you're embedding
@ -200,6 +200,7 @@ the moment; a better way to code this is shown below anyway):
\begin{verbatim}
PyObject *t;
t = PyTuple_New(3);
PyTuple_SetItem(t, 0, PyInt_FromLong(1L));
PyTuple_SetItem(t, 1, PyInt_FromLong(2L));
@ -220,6 +221,7 @@ difference between the two (the extra \cfunction{Py_DECREF()} calls):
\begin{verbatim}
PyObject *l, *x;
l = PyList_New(3);
x = PyInt_FromLong(1L);
PySequence_SetItem(l, 0, x); Py_DECREF(x);
@ -239,6 +241,7 @@ also takes care of the error checking):
\begin{verbatim}
PyObject *t, *l;
t = Py_BuildValue("(iis)", 1, 2, "three");
l = Py_BuildValue("[iis]", 1, 2, "three");
\end{verbatim}
@ -256,6 +259,7 @@ item:
int set_all(PyObject *target, PyObject *item)
{
int i, n;
n = PyObject_Length(target);
if (n < 0)
return -1;
@ -299,6 +303,7 @@ long sum_list(PyObject *list)
int i, n;
long total = 0;
PyObject *item;
n = PyList_Size(list);
if (n < 0)
return -1; /* Not a list */
@ -364,7 +369,7 @@ ambiguous return value, and require explicit testing for errors with
Exception state is maintained in per-thread storage (this is
equivalent to using global storage in an unthreaded application). A
thread can be on one of two states: an exception has occurred, or not.
thread can be in one of two states: an exception has occurred, or not.
The function \cfunction{PyErr_Occurred()} can be used to check for
this: it returns a borrowed reference to the exception type object
when an exception has occurred, and \NULL{} otherwise. There are a
@ -384,7 +389,7 @@ exception state only exists while an exception is being passed on
between \C{} functions until it reaches the Python interpreter, which
takes care of transferring it to \code{sys.exc_type} and friends.
(Note that starting with Python 1.5, the preferred, thread-safe way to
Note that starting with Python 1.5, the preferred, thread-safe way to
access the exception state from Python code is to call the function
\function{sys.exc_info()}, which returns the per-thread exception state
for Python code. Also, the semantics of both ways to access the
@ -394,7 +399,7 @@ preserve the exception state of its caller. This prevents common bugs
in exception handling code caused by an innocent-looking function
overwriting the exception being handled; it also reduces the often
unwanted lifetime extension for objects that are referenced by the
stack frames in the traceback.)
stack frames in the traceback.
As a general principle, a function that calls another function to
perform some task should check whether the called function raised an
@ -431,8 +436,8 @@ int incr_item(PyObject *dict, PyObject *key)
item = PyObject_GetItem(dict, key);
if (item == NULL) {
/* Handle keyError only: */
if (!PyErr_ExceptionMatches(PyExc_keyError)) goto error;
/* Handle KeyError only: */
if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error;
/* Clear the error and use zero: */
PyErr_Clear();
@ -489,7 +494,8 @@ This initializes the table of loaded modules, and creates the
fundamental modules \module{__builtin__}\refbimodindex{__builtin__},
\module{__main__}\refbimodindex{__main__} and
\module{sys}\refbimodindex{sys}. It also initializes the module
search path (\code{sys.path}).
search path (\code{sys.path}).%
\indexiii{module}{search}{path}
\cfunction{Py_Initialize()} does not set the ``script argument list''
(\code{sys.argv}). If this variable is needed by Python code that
@ -506,21 +512,21 @@ interpreter executable. In particular, it looks for a directory named
\file{lib/python\version} (replacing \file{\version} with the current
interpreter version) relative to the parent directory where the
executable named \file{python} is found on the shell command search
path (the environment variable \code{\$PATH}).
path (the environment variable \envvar{PATH}).
For instance, if the Python executable is found in
\file{/usr/local/bin/python}, it will assume that the libraries are in
\file{/usr/local/lib/python\version}. (In fact, this particular path
is also the ``fallback'' location, used when no executable file named
\file{python} is found along \code{\$PATH}.) The user can override
this behavior by setting the environment variable \code{\$PYTHONHOME},
\file{python} is found along \envvar{PATH}.) The user can override
this behavior by setting the environment variable \envvar{PYTHONHOME},
or insert additional directories in front of the standard path by
setting \code{\$PYTHONPATH}.
setting \envvar{PYTHONPATH}.
The embedding application can steer the search by calling
\code{Py_SetProgramName(\var{file})} \emph{before} calling
\cfunction{Py_Initialize()}. Note that \code{\$PYTHONHOME} still
overrides this and \code{\$PYTHONPATH} is still inserted in front of
\cfunction{Py_Initialize()}. Note that \envvar{PYTHONHOME} still
overrides this and \envvar{PYTHONPATH} is still inserted in front of
the standard path. An application that requires total control has to
provide its own implementation of \cfunction{Py_GetPath()},
\cfunction{Py_GetPrefix()}, \cfunction{Py_GetExecPrefix()},
@ -544,34 +550,41 @@ The functions in this chapter will let you execute Python source code
given in a file or a buffer, but they will not let you interact in a
more detailed way with the interpreter.
\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *}
\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *command}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *}
\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *fp, char *filename}
\end{cfuncdesc}
\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int}
\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseString}{char *str,
int start}
\end{cfuncdesc}
\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int}
\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseFile}{FILE *fp,
char *filename, int start}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *}
\begin{cfuncdesc}{PyObject*}{PyRun_String}{char *str, int start,
PyObject *globals,
PyObject *locals}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *}
\begin{cfuncdesc}{PyObject*}{PyRun_File}{FILE *fp, char *filename,
int start, PyObject *globals,
PyObject *locals}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int}
\begin{cfuncdesc}{PyObject*}{Py_CompileString}{char *str, char *filename,
int start}
\end{cfuncdesc}
@ -582,7 +595,7 @@ The macros in this section are used for managing reference counts
of Python objects.
\begin{cfuncdesc}{void}{Py_INCREF}{PyObject *o}
Increment the reference count for object \code{o}. The object must
Increment the reference count for object \var{o}. The object must
not be \NULL{}; if you aren't sure that it isn't \NULL{}, use
\cfunction{Py_XINCREF()}.
\end{cfuncdesc}
@ -659,7 +672,7 @@ indicator. Call this function only when the error indicator is set.
(Otherwise it will cause a fatal error!)
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_Occurred}{}
\begin{cfuncdesc}{PyObject*}{PyErr_Occurred}{}
Test whether the error indicator is set. If set, return the exception
\emph{type} (the first argument to the last call to one of the
\code{PyErr_Set*()} functions or to \cfunction{PyErr_Restore()}). If
@ -749,13 +762,13 @@ This is a shorthand for \samp{PyErr_SetString(PyExc_TypeError,
was invoked with an illegal argument. It is mostly for internal use.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_NoMemory}{}
\begin{cfuncdesc}{PyObject*}{PyErr_NoMemory}{}
This is a shorthand for \samp{PyErr_SetNone(PyExc_MemoryError)}; it
returns \NULL{} so an object allocation function can write
\samp{return PyErr_NoMemory();} when it runs out of memory.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_SetFromErrno}{PyObject *type}
\begin{cfuncdesc}{PyObject*}{PyErr_SetFromErrno}{PyObject *type}
This is a convenience function to raise an exception when a \C{} library
function has returned an error and set the \C{} variable \code{errno}.
It constructs a tuple object whose first item is the integer
@ -797,8 +810,9 @@ the effect of a \constant{SIGINT} signal arriving --- the next time
\exception{KeyboadInterrupt} will be raised.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyErr_NewException}{char *name,
PyObject *base, PyObject *dict}
\begin{cfuncdesc}{PyObject*}{PyErr_NewException}{char *name,
PyObject *base,
PyObject *dict}
This utility function creates and returns a new exception object. The
\var{name} argument must be the name of the new exception, a \C{} string
of the form \code{module.class}. The \var{base} and \var{dict}
@ -913,7 +927,7 @@ by \var{func}.
\section{Importing Modules}
\label{importing}
\begin{cfuncdesc}{PyObject *}{PyImport_ImportModule}{char *name}
\begin{cfuncdesc}{PyObject*}{PyImport_ImportModule}{char *name}
This is a simplified interface to \cfunction{PyImport_ImportModuleEx()}
below, leaving the \var{globals} and \var{locals} arguments set to
\NULL{}. When the \var{name} argument contains a dot (i.e., when
@ -925,10 +939,10 @@ effect when \var{name} in fact specifies a subpackage instead of a
submodule: the submodules specified in the package's \code{__all__}
variable are loaded.) Return a new reference to the imported module,
or \NULL{} with an exception set on failure (the module may still
be created in this case).
be created in this case --- examine \code{sys.modules} to find out).
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_ImportModuleEx}{char *name, PyObject *globals, PyObject *locals, PyObject *fromlist}
\begin{cfuncdesc}{PyObject*}{PyImport_ImportModuleEx}{char *name, PyObject *globals, PyObject *locals, PyObject *fromlist}
Import a module. This is best described by referring to the built-in
Python function \function{__import__()}\bifuncindex{__import__}, as
the standard \function{__import__()} function calls this function
@ -942,7 +956,7 @@ package was requested is normally the top-level package, unless a
non-empty \var{fromlist} was given.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_Import}{PyObject *name}
\begin{cfuncdesc}{PyObject*}{PyImport_Import}{PyObject *name}
This is a higher-level interface that calls the current ``import hook
function''. It invokes the \function{__import__()} function from the
\code{__builtins__} of the current globals. This means that the
@ -951,7 +965,7 @@ current environment, e.g. by \module{rexec}\refstmodindex{rexec} or
\module{ihooks}\refstmodindex{ihooks}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_ReloadModule}{PyObject *m}
\begin{cfuncdesc}{PyObject*}{PyImport_ReloadModule}{PyObject *m}
Reload a module. This is best described by referring to the built-in
Python function \function{reload()}\bifuncindex{reload}, as the standard
\function{reload()} function calls this function directly. Return a
@ -959,7 +973,7 @@ new reference to the reloaded module, or \NULL{} with an exception set
on failure (the module still exists in this case).
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_AddModule}{char *name}
\begin{cfuncdesc}{PyObject*}{PyImport_AddModule}{char *name}
Return the module object corresponding to a module name. The
\var{name} argument may be of the form \code{package.module}). First
check the modules dictionary if there's one there, and if not, create
@ -969,7 +983,7 @@ do not own the returned reference. Return \NULL{} with an
exception set on failure.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_ExecCodeModule}{char *name, PyObject *co}
\begin{cfuncdesc}{PyObject*}{PyImport_ExecCodeModule}{char *name, PyObject *co}
Given a module name (possibly of the form \code{package.module}) and a
code object read from a Python bytecode file or obtained from the
built-in function \function{compile()}\bifuncindex{compile}, load the
@ -985,7 +999,7 @@ and \file{.pyo} files). The magic number should be present in the
first four bytes of the bytecode file, in little-endian byte order.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyImport_GetModuleDict}{}
\begin{cfuncdesc}{PyObject*}{PyImport_GetModuleDict}{}
Return the dictionary used for the module administration
(a.k.a. \code{sys.modules}). Note that this is a per-interpreter
variable.
@ -1003,11 +1017,11 @@ Empty the module table. For internal use only.
Finalize the import mechanism. For internal use only.
\end{cfuncdesc}
\begin{cfuncdesc}{extern PyObject *}{_PyImport_FindExtension}{char *, char *}
\begin{cfuncdesc}{PyObject*}{_PyImport_FindExtension}{char *, char *}
For internal use only.
\end{cfuncdesc}
\begin{cfuncdesc}{extern PyObject *}{_PyImport_FixupExtension}{char *, char *}
\begin{cfuncdesc}{PyObject*}{_PyImport_FixupExtension}{char *, char *}
For internal use only.
\end{cfuncdesc}
@ -1022,8 +1036,10 @@ already imported.)
\begin{ctypedesc}{struct _frozen}
This is the structure type definition for frozen module descriptors,
as generated by the \code{freeze} utility (see \file{Tools/freeze/} in
the Python source distribution). Its definition is:
as generated by the \program{freeze}\index{freeze utility} utility
(see \file{Tools/freeze/} in the Python source distribution). Its
definition is:
\begin{verbatim}
struct _frozen {
char *name;
@ -1033,11 +1049,11 @@ struct _frozen {
\end{verbatim}
\end{ctypedesc}
\begin{cvardesc}{struct _frozen *}{PyImport_FrozenModules}
\begin{cvardesc}{struct _frozen*}{PyImport_FrozenModules}
This pointer is initialized to point to an array of \code{struct
_frozen} records, terminated by one whose members are all \NULL{}
or zero. When a frozen module is imported, it is searched in this
table. Third party code could play tricks with this to provide a
table. Third-party code could play tricks with this to provide a
dynamically created collection of frozen modules.
\end{cvardesc}
@ -1708,51 +1724,45 @@ This instance of \code{PyTypeObject} represents the Python string type.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int}
\begin{cfuncdesc}{PyObject*}{PyString_FromStringAndSize}{const char *v,
int len}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_FromString}{const char *v}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyString_Size}{PyObject *string}
\end{cfuncdesc}
\begin{cfuncdesc}{char*}{PyString_AsString}{PyObject *string}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **string,
PyObject *newpart}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **string,
PyObject *newpart}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **string, int newsize}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_Format}{PyObject *format,
PyObject *args}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **string}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_InternFromString}{const char *v}
\end{cfuncdesc}
\begin{cfuncdesc}{char*}{PyString_AS_STRING}{PyObject *string}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyString_Size}{PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *}
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *}
\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyObject *string}
\end{cfuncdesc}
@ -1772,7 +1782,7 @@ This instance of \code{PyTypeObject} represents the Python tuple type.
Return true if the argument is a tuple object.
\end{cfuncdesc}
\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s}
\begin{cfuncdesc}{PyObject*}{PyTuple_New}{int s}
Return a new tuple object of size \var{s}.
\end{cfuncdesc}
@ -1781,17 +1791,17 @@ Takes a pointer to a tuple object, and returns the size
of that tuple.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos}
\begin{cfuncdesc}{PyObject*}{PyTuple_GetItem}{PyTupleObject *p, int pos}
Returns the object at position \var{pos} in the tuple pointed
to by \var{p}. If \var{pos} is out of bounds, returns \NULL{} and
raises an \exception{IndexError} exception.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
\begin{cfuncdesc}{PyObject*}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
Does the same, but does no checking of its arguments.
\end{cfuncdesc}
\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p,
\begin{cfuncdesc}{PyObject*}{PyTuple_GetSlice}{PyTupleObject *p,
int low,
int high}
Takes a slice of the tuple pointed to by \var{p} from
@ -1813,7 +1823,7 @@ Does the same, but does no error checking, and
should \emph{only} be used to fill in brand new tuples.
\end{cfuncdesc}
\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p,
\begin{cfuncdesc}{int}{_PyTuple_Resize}{PyTupleObject *p,
int new,
int last_is_sticky}
Can be used to resize a tuple. Because tuples are
@ -1841,56 +1851,48 @@ This instance of \code{PyTypeObject} represents the Python list type.
Returns true if its argument is a \code{PyListObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_New}{int size}
\begin{cfuncdesc}{PyObject*}{PyList_New}{int size}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Size}{PyObject *}
\begin{cfuncdesc}{int}{PyList_Size}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int}
\begin{cfuncdesc}{PyObject*}{PyList_GetItem}{PyObject *list, int index}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *}
\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *list, int index,
PyObject *item}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *}
\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *list, int index,
PyObject *index}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *}
\begin{cfuncdesc}{int}{PyList_Append}{PyObject *list, PyObject *item}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int}
\begin{cfuncdesc}{PyObject*}{PyList_GetSlice}{PyObject *list,
int low, int high}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *}
\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *list,
int low, int high,
PyObject *itemlist}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *}
\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *}
\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *}
\begin{cfuncdesc}{PyObject*}{PyList_AsTuple}{PyObject *list}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i}
\begin{cfuncdesc}{PyObject*}{PyList_GET_ITEM}{PyObject *list, int i}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
\end{cfuncdesc}
@ -1912,7 +1914,7 @@ This instance of \code{PyTypeObject} represents the Python dictionary type.
Returns true if its argument is a \code{PyDictObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{}
\begin{cfuncdesc}{PyObject*}{PyDict_New}{}
Returns a new empty dictionary.
\end{cfuncdesc}
@ -1946,29 +1948,29 @@ Removes the entry in dictionary \var{p} which has a key
specified by the \code{char *}\var{key}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
\begin{cfuncdesc}{PyObject*}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
Returns the object from dictionary \var{p} which has a key
\var{key}. Returns \NULL{} if the key \var{key} is not present.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key}
\begin{cfuncdesc}{PyObject*}{PyDict_GetItemString}{PyDictObject *p, char *key}
Does the same, but \var{key} is specified as a
\code{char *}, rather than a \code{PyObject *}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p}
\begin{cfuncdesc}{PyObject*}{PyDict_Items}{PyDictObject *p}
Returns a \code{PyListObject} containing all the items
from the dictionary, as in the mapping method \method{items()} (see
the \emph{Python Library Reference}).
\end{cfuncdesc}
\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p}
\begin{cfuncdesc}{PyObject*}{PyDict_Keys}{PyDictObject *p}
Returns a \code{PyListObject} containing all the keys
from the dictionary, as in the mapping method \method{keys()} (see the
\emph{Python Library Reference}).
\end{cfuncdesc}
\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p}
\begin{cfuncdesc}{PyObject*}{PyDict_Values}{PyDictObject *p}
Returns a \code{PyListObject} containing all the values
from the dictionary \var{p}, as in the mapping method
\method{values()} (see the \emph{Python Library Reference}).
@ -2005,7 +2007,7 @@ integer type.
\end{cfuncdesc}
\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival}
\begin{cfuncdesc}{PyObject*}{PyInt_FromLong}{long ival}
Creates a new integer object with a value of \var{ival}.
The current implementation keeps an array of integer objects for all
@ -2048,32 +2050,26 @@ integer type.
Returns true if its argument is a \code{PyLongObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long}
\begin{cfuncdesc}{PyObject*}{PyLong_FromLong}{long v}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long}
\begin{cfuncdesc}{PyObject*}{PyLong_FromUnsignedLong}{unsigned long v}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double}
\begin{cfuncdesc}{PyObject*}{PyLong_FromDouble}{double v}
\end{cfuncdesc}
\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *}
\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *pylong}
\end{cfuncdesc}
\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject }
\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject *pylong}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *}
\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *pylong}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int}
\begin{cfuncdesc}{PyObject*}{PyLong_FromString}{char *str, char **pend,
int base}
\end{cfuncdesc}
@ -2094,16 +2090,13 @@ point type.
Returns true if its argument is a \code{PyFloatObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double}
\begin{cfuncdesc}{PyObject*}{PyFloat_FromDouble}{double v}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *}
\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *pyfloat}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *}
\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyObject *pyfloat}
\end{cfuncdesc}
@ -2137,48 +2130,38 @@ number type.
Returns true if its argument is a \code{PyComplexObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex left, Py_complex right}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex left, Py_complex right}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex complex}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex left, Py_complex right}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex dividend,
Py_complex divisor}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex}
\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex num, Py_complex exp}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex}
\begin{cfuncdesc}{PyObject*}{PyComplex_FromCComplex}{Py_complex v}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag}
\begin{cfuncdesc}{PyObject*}{PyComplex_FromDoubles}{double real, double imag}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op}
\end{cfuncdesc}
\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op}
\end{cfuncdesc}
@ -2201,12 +2184,12 @@ This instance of \code{PyTypeObject} represents the Python file type.
Returns true if its argument is a \code{PyFileObject}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode}
\begin{cfuncdesc}{PyObject*}{PyFile_FromString}{char *name, char *mode}
Creates a new \code{PyFileObject} pointing to the file
specified in \var{name} with the mode specified in \var{mode}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp,
\begin{cfuncdesc}{PyObject*}{PyFile_FromFile}{FILE *fp,
char *name, char *mode, int (*close)}
Creates a new \code{PyFileObject} from the already-open \var{fp}.
The function \var{close} will be called when the file should be
@ -2217,11 +2200,11 @@ closed.
Returns the file object associated with \var{p} as a \code{FILE *}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n}
\begin{cfuncdesc}{PyObject*}{PyFile_GetLine}{PyObject *p, int n}
undocumented as yet
\end{cfuncdesc}
\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p}
\begin{cfuncdesc}{PyObject*}{PyFile_Name}{PyObject *p}
Returns the name of the file specified by \var{p} as a
\code{PyStringObject}.
\end{cfuncdesc}
@ -2233,17 +2216,19 @@ only be called immediately after file object creation.
\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag}
Sets the \code{softspace} attribute of \var{p} to \var{newflag}.
Returns the previosu value. This function clears any errors, and will
Returns the previous value. This function clears any errors, and will
return \code{0} as the previous value if the attribute either does not
exist or if there were errors in retrieving it. There is no way to
detect errors from this function, but doing so should not be needed.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p}
\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p,
int flags}
Writes object \var{obj} to file object \var{p}.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p}
\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p,
int flags}
Writes string \var{s} to file object \var{p}.
\end{cfuncdesc}
@ -2314,7 +2299,7 @@ calls \cfunction{Py_Initialize()} and \cfunction{Py_Finalize()} more
than once.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{Py_NewInterpreter}{}
\begin{cfuncdesc}{PyThreadState*}{Py_NewInterpreter}{}
Create a new sub-interpreter. This is an (almost) totally separate
environment for the execution of Python code. In particular, the new
interpreter has separate, independent versions of all imported
@ -2392,13 +2377,13 @@ program's execution. No code in the Python interpreter will change
the contents of this storage.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetProgramName}{}
\begin{cfuncdesc}{char*}{Py_GetProgramName}{}
Return the program name set with \cfunction{Py_SetProgramName()}, or the
default. The returned string points into static storage; the caller
should not modify its value.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetPrefix}{}
\begin{cfuncdesc}{char*}{Py_GetPrefix}{}
Return the \emph{prefix} for installed platform-independent files. This
is derived through a number of complicated rules from the program name
set with \cfunction{Py_SetProgramName()} and some environment variables;
@ -2412,7 +2397,7 @@ Python code as \code{sys.prefix}. It is only useful on \UNIX{}. See
also the next function.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetExecPrefix}{}
\begin{cfuncdesc}{char*}{Py_GetExecPrefix}{}
Return the \emph{exec-prefix} for installed platform-\emph{de}pendent
files. This is derived through a number of complicated rules from the
program name set with \cfunction{Py_SetProgramName()} and some environment
@ -2450,7 +2435,7 @@ while having \code{"/usr/local/plat"} be a different filesystem for each
platform.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetProgramFullPath}{}
\begin{cfuncdesc}{char*}{Py_GetProgramFullPath}{}
Return the full program name of the Python executable; this is
computed as a side-effect of deriving the default module search path
from the program name (set by \cfunction{Py_SetProgramName()} above). The
@ -2459,7 +2444,7 @@ modify its value. The value is available to Python code as
\code{sys.executable}.
\end{cfuncdesc}
\begin{cfuncdesc}{char *}{Py_GetPath}{}
\begin{cfuncdesc}{char*}{Py_GetPath}{}
\indexiii{module}{search}{path}
Return the default module search path; this is computed from the
program name (set by \cfunction{Py_SetProgramName()} above) and some
@ -2475,7 +2460,7 @@ future search path for loaded modules.
% XXX should give the exact rules
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetVersion}{}
\begin{cfuncdesc}{const char*}{Py_GetVersion}{}
Return the version of this Python interpreter. This is a string that
looks something like
@ -2490,7 +2475,7 @@ the caller should not modify its value. The value is available to
Python code as the list \code{sys.version}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetPlatform}{}
\begin{cfuncdesc}{const char*}{Py_GetPlatform}{}
Return the platform identifier for the current platform. On \UNIX{},
this is formed from the ``official'' name of the operating system,
converted to lower case, followed by the major revision number; e.g.,
@ -2501,7 +2486,7 @@ the caller should not modify its value. The value is available to
Python code as \code{sys.platform}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetCopyright}{}
\begin{cfuncdesc}{const char*}{Py_GetCopyright}{}
Return the official copyright string for the current Python version,
for example
@ -2512,7 +2497,7 @@ modify its value. The value is available to Python code as the list
\code{sys.copyright}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetCompiler}{}
\begin{cfuncdesc}{const char*}{Py_GetCompiler}{}
Return an indication of the compiler used to build the current Python
version, in square brackets, for example:
@ -2525,7 +2510,7 @@ modify its value. The value is available to Python code as part of
the variable \code{sys.version}.
\end{cfuncdesc}
\begin{cfuncdesc}{const char *}{Py_GetBuildInfo}{}
\begin{cfuncdesc}{const char*}{Py_GetBuildInfo}{}
Return information about the sequence number and build date and time
of the current Python interpreter instance, for example
@ -2754,7 +2739,7 @@ function is not available when thread support is disabled at compile
time.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyEval_SaveThread}{}
\begin{cfuncdesc}{PyThreadState*}{PyEval_SaveThread}{}
Release the interpreter lock (if it has been created and thread
support is enabled) and reset the thread state to \NULL{},
returning the previous thread state (which is not \NULL{}). If
@ -2809,7 +2794,7 @@ All of the following functions are only available when thread support
is enabled at compile time, and must be called only when the
interpreter lock has been created.
\begin{cfuncdesc}{PyInterpreterState *}{PyInterpreterState_New}{}
\begin{cfuncdesc}{PyInterpreterState*}{PyInterpreterState_New}{}
Create a new interpreter state object. The interpreter lock must be
held.
\end{cfuncdesc}
@ -2825,7 +2810,7 @@ held. The interpreter state must have been reset with a previous
call to \cfunction{PyInterpreterState_Clear()}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyThreadState_New}{PyInterpreterState *interp}
\begin{cfuncdesc}{PyThreadState*}{PyThreadState_New}{PyInterpreterState *interp}
Create a new thread state object belonging to the given interpreter
object. The interpreter lock must be held.
\end{cfuncdesc}
@ -2841,13 +2826,13 @@ held. The thread state must have been reset with a previous
call to \cfunction{PyThreadState_Clear()}.
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyThreadState_Get}{}
\begin{cfuncdesc}{PyThreadState*}{PyThreadState_Get}{}
Return the current thread state. The interpreter lock must be held.
When the current thread state is \NULL{}, this issues a fatal
error (so that the caller needn't check for \NULL{}).
\end{cfuncdesc}
\begin{cfuncdesc}{PyThreadState *}{PyThreadState_Swap}{PyThreadState *tstate}
\begin{cfuncdesc}{PyThreadState*}{PyThreadState_Swap}{PyThreadState *tstate}
Swap the current thread state with the thread state given by the
argument \var{tstate}, which may be \NULL{}. The interpreter lock
must be held.
@ -2857,10 +2842,10 @@ must be held.
\chapter{Defining New Object Types}
\label{newTypes}
\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type}
\begin{cfuncdesc}{PyObject*}{_PyObject_New}{PyTypeObject *type}
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size}
\begin{cfuncdesc}{PyObject*}{_PyObject_NewVar}{PyTypeObject *type, int size}
\end{cfuncdesc}
\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *}