Merged revisions 71873 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71873 | jeroen.ruigrok | 2009-04-25 13:15:06 +0200 (za, 25 apr 2009) | 2 lines

  Reformat prior to expanding.
........
parent f0320c7e
...@@ -9,28 +9,29 @@ There are a large number of structures which are used in the definition of ...@@ -9,28 +9,29 @@ There are a large number of structures which are used in the definition of
object types for Python. This section describes these structures and how they object types for Python. This section describes these structures and how they
are used. are used.
All Python objects ultimately share a small number of fields at the beginning of All Python objects ultimately share a small number of fields at the beginning
the object's representation in memory. These are represented by the of the object's representation in memory. These are represented by the
:ctype:`PyObject` and :ctype:`PyVarObject` types, which are defined, in turn, by :ctype:`PyObject` and :ctype:`PyVarObject` types, which are defined, in turn,
the expansions of some macros also used, whether directly or indirectly, in the by the expansions of some macros also used, whether directly or indirectly, in
definition of all other Python objects. the definition of all other Python objects.
.. ctype:: PyObject .. ctype:: PyObject
All object types are extensions of this type. This is a type which contains the All object types are extensions of this type. This is a type which
information Python needs to treat a pointer to an object as an object. In a contains the information Python needs to treat a pointer to an object as an
normal "release" build, it contains only the object's reference count and a object. In a normal "release" build, it contains only the object's
pointer to the corresponding type object. It corresponds to the fields defined reference count and a pointer to the corresponding type object. It
by the expansion of the ``PyObject_HEAD`` macro. corresponds to the fields defined by the expansion of the ``PyObject_HEAD``
macro.
.. ctype:: PyVarObject .. ctype:: PyVarObject
This is an extension of :ctype:`PyObject` that adds the :attr:`ob_size` field. This is an extension of :ctype:`PyObject` that adds the :attr:`ob_size`
This is only used for objects that have some notion of *length*. This type does field. This is only used for objects that have some notion of *length*.
not often appear in the Python/C API. It corresponds to the fields defined by This type does not often appear in the Python/C API. It corresponds to the
the expansion of the ``PyObject_VAR_HEAD`` macro. fields defined by the expansion of the ``PyObject_VAR_HEAD`` macro.
These macros are used in the definition of :ctype:`PyObject` and These macros are used in the definition of :ctype:`PyObject` and
:ctype:`PyVarObject`: :ctype:`PyVarObject`:
...@@ -41,9 +42,9 @@ These macros are used in the definition of :ctype:`PyObject` and ...@@ -41,9 +42,9 @@ These macros are used in the definition of :ctype:`PyObject` and
This is a macro which expands to the declarations of the fields of the This is a macro which expands to the declarations of the fields of the
:ctype:`PyObject` type; it is used when declaring new types which represent :ctype:`PyObject` type; it is used when declaring new types which represent
objects without a varying length. The specific fields it expands to depend on objects without a varying length. The specific fields it expands to depend
the definition of :cmacro:`Py_TRACE_REFS`. By default, that macro is not on the definition of :cmacro:`Py_TRACE_REFS`. By default, that macro is
defined, and :cmacro:`PyObject_HEAD` expands to:: not defined, and :cmacro:`PyObject_HEAD` expands to::
Py_ssize_t ob_refcnt; Py_ssize_t ob_refcnt;
PyTypeObject *ob_type; PyTypeObject *ob_type;
...@@ -58,9 +59,9 @@ These macros are used in the definition of :ctype:`PyObject` and ...@@ -58,9 +59,9 @@ These macros are used in the definition of :ctype:`PyObject` and
.. cmacro:: PyObject_VAR_HEAD .. cmacro:: PyObject_VAR_HEAD
This is a macro which expands to the declarations of the fields of the This is a macro which expands to the declarations of the fields of the
:ctype:`PyVarObject` type; it is used when declaring new types which represent :ctype:`PyVarObject` type; it is used when declaring new types which
objects with a length that varies from instance to instance. This macro always represent objects with a length that varies from instance to instance.
expands to:: This macro always expands to::
PyObject_HEAD PyObject_HEAD
Py_ssize_t ob_size; Py_ssize_t ob_size;
...@@ -73,11 +74,12 @@ These macros are used in the definition of :ctype:`PyObject` and ...@@ -73,11 +74,12 @@ These macros are used in the definition of :ctype:`PyObject` and
.. ctype:: PyCFunction .. ctype:: PyCFunction
Type of the functions used to implement most Python callables in C. Functions of Type of the functions used to implement most Python callables in C.
this type take two :ctype:`PyObject\*` parameters and return one such value. If Functions of this type take two :ctype:`PyObject\*` parameters and return
the return value is *NULL*, an exception shall have been set. If not *NULL*, one such value. If the return value is *NULL*, an exception shall have
the return value is interpreted as the return value of the function as exposed been set. If not *NULL*, the return value is interpreted as the return
in Python. The function must return a new reference. value of the function as exposed in Python. The function must return a new
reference.
.. ctype:: PyCFunctionWithKeywords .. ctype:: PyCFunctionWithKeywords
...@@ -126,20 +128,21 @@ convention flags can be combined with a binding flag. ...@@ -126,20 +128,21 @@ convention flags can be combined with a binding flag.
.. data:: METH_VARARGS .. data:: METH_VARARGS
This is the typical calling convention, where the methods have the type This is the typical calling convention, where the methods have the type
:ctype:`PyCFunction`. The function expects two :ctype:`PyObject\*` values. The :ctype:`PyCFunction`. The function expects two :ctype:`PyObject\*` values.
first one is the *self* object for methods; for module functions, it has the The first one is the *self* object for methods; for module functions, it
value given to :cfunc:`Py_InitModule4` (or *NULL* if :cfunc:`Py_InitModule` was has the value given to :cfunc:`Py_InitModule4` (or *NULL* if
used). The second parameter (often called *args*) is a tuple object :cfunc:`Py_InitModule` was used). The second parameter (often called
representing all arguments. This parameter is typically processed using *args*) is a tuple object representing all arguments. This parameter is
:cfunc:`PyArg_ParseTuple` or :cfunc:`PyArg_UnpackTuple`. typically processed using :cfunc:`PyArg_ParseTuple` or
:cfunc:`PyArg_UnpackTuple`.
.. data:: METH_KEYWORDS .. data:: METH_KEYWORDS
Methods with these flags must be of type :ctype:`PyCFunctionWithKeywords`. The Methods with these flags must be of type :ctype:`PyCFunctionWithKeywords`.
function expects three parameters: *self*, *args*, and a dictionary of all the The function expects three parameters: *self*, *args*, and a dictionary of
keyword arguments. The flag is typically combined with :const:`METH_VARARGS`, all the keyword arguments. The flag is typically combined with
and the parameters are typically processed using :const:`METH_VARARGS`, and the parameters are typically processed using
:cfunc:`PyArg_ParseTupleAndKeywords`. :cfunc:`PyArg_ParseTupleAndKeywords`.
...@@ -148,8 +151,8 @@ convention flags can be combined with a binding flag. ...@@ -148,8 +151,8 @@ convention flags can be combined with a binding flag.
Methods without parameters don't need to check whether arguments are given if Methods without parameters don't need to check whether arguments are given if
they are listed with the :const:`METH_NOARGS` flag. They need to be of type they are listed with the :const:`METH_NOARGS` flag. They need to be of type
:ctype:`PyCFunction`. When used with object methods, the first parameter is :ctype:`PyCFunction`. When used with object methods, the first parameter is
typically named ``self`` and will hold a reference to the object instance. In typically named ``self`` and will hold a reference to the object instance.
all cases the second parameter will be *NULL*. In all cases the second parameter will be *NULL*.
.. data:: METH_O .. data:: METH_O
...@@ -170,18 +173,19 @@ method. ...@@ -170,18 +173,19 @@ method.
.. index:: builtin: classmethod .. index:: builtin: classmethod
The method will be passed the type object as the first parameter rather than an The method will be passed the type object as the first parameter rather
instance of the type. This is used to create *class methods*, similar to what than an instance of the type. This is used to create *class methods*,
is created when using the :func:`classmethod` built-in function. similar to what is created when using the :func:`classmethod` built-in
function.
.. data:: METH_STATIC .. data:: METH_STATIC
.. index:: builtin: staticmethod .. index:: builtin: staticmethod
The method will be passed *NULL* as the first parameter rather than an instance The method will be passed *NULL* as the first parameter rather than an
of the type. This is used to create *static methods*, similar to what is instance of the type. This is used to create *static methods*, similar to
created when using the :func:`staticmethod` built-in function. what is created when using the :func:`staticmethod` built-in function.
One other constant controls whether a method is loaded in place of another One other constant controls whether a method is loaded in place of another
definition with the same method name. definition with the same method name.
...@@ -191,12 +195,13 @@ definition with the same method name. ...@@ -191,12 +195,13 @@ definition with the same method name.
The method will be loaded in place of existing definitions. Without The method will be loaded in place of existing definitions. Without
*METH_COEXIST*, the default is to skip repeated definitions. Since slot *METH_COEXIST*, the default is to skip repeated definitions. Since slot
wrappers are loaded before the method table, the existence of a *sq_contains* wrappers are loaded before the method table, the existence of a
slot, for example, would generate a wrapped method named :meth:`__contains__` *sq_contains* slot, for example, would generate a wrapped method named
and preclude the loading of a corresponding PyCFunction with the same name. :meth:`__contains__` and preclude the loading of a corresponding
With the flag defined, the PyCFunction will be loaded in place of the wrapper PyCFunction with the same name. With the flag defined, the PyCFunction
object and will co-exist with the slot. This is helpful because calls to will be loaded in place of the wrapper object and will co-exist with the
PyCFunctions are optimized more than wrapper object calls. slot. This is helpful because calls to PyCFunctions are optimized more
than wrapper object calls.
.. ctype:: PyMemberDef .. ctype:: PyMemberDef
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment