2019-05-17 06:55:34 -03:00
|
|
|
.. highlight:: c
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
.. _cell-objects:
|
|
|
|
|
|
|
|
Cell Objects
|
|
|
|
------------
|
|
|
|
|
|
|
|
"Cell" objects are used to implement variables referenced by multiple scopes.
|
|
|
|
For each such variable, a cell object is created to store the value; the local
|
|
|
|
variables of each stack frame that references the value contains a reference to
|
|
|
|
the cells from outer scopes which also use that variable. When the value is
|
|
|
|
accessed, the value contained in the cell is used instead of the cell object
|
|
|
|
itself. This de-referencing of the cell object requires support from the
|
|
|
|
generated byte-code; these are not automatically de-referenced when accessed.
|
|
|
|
Cell objects are not likely to be useful elsewhere.
|
|
|
|
|
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
.. c:type:: PyCellObject
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
The C structure used for cell objects.
|
|
|
|
|
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
.. c:var:: PyTypeObject PyCell_Type
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
The type object corresponding to cell objects.
|
|
|
|
|
|
|
|
|
2023-07-26 20:41:15 -03:00
|
|
|
.. c:function:: int PyCell_Check(PyObject *ob)
|
2008-01-20 05:30:57 -04:00
|
|
|
|
2021-01-06 07:38:26 -04:00
|
|
|
Return true if *ob* is a cell object; *ob* must not be ``NULL``. This
|
|
|
|
function always succeeds.
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
.. c:function:: PyObject* PyCell_New(PyObject *ob)
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
Create and return a new cell object containing the value *ob*. The parameter may
|
2019-10-30 07:03:20 -03:00
|
|
|
be ``NULL``.
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
.. c:function:: PyObject* PyCell_Get(PyObject *cell)
|
2008-01-20 05:30:57 -04:00
|
|
|
|
2024-07-09 12:47:35 -03:00
|
|
|
Return the contents of the cell *cell*, which can be ``NULL``.
|
|
|
|
If *cell* is not a cell object, returns ``NULL`` with an exception set.
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
.. c:function:: PyObject* PyCell_GET(PyObject *cell)
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
Return the contents of the cell *cell*, but without checking that *cell* is
|
2019-10-30 07:03:20 -03:00
|
|
|
non-``NULL`` and a cell object.
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
.. c:function:: int PyCell_Set(PyObject *cell, PyObject *value)
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
Set the contents of the cell object *cell* to *value*. This releases the
|
2019-10-30 07:03:20 -03:00
|
|
|
reference to any current content of the cell. *value* may be ``NULL``. *cell*
|
2024-07-09 12:47:35 -03:00
|
|
|
must be non-``NULL``.
|
|
|
|
|
|
|
|
On success, return ``0``.
|
|
|
|
If *cell* is not a cell object, set an exception and return ``-1``.
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
.. c:function:: void PyCell_SET(PyObject *cell, PyObject *value)
|
2008-01-20 05:30:57 -04:00
|
|
|
|
|
|
|
Sets the value of the cell object *cell* to *value*. No reference counts are
|
2019-10-30 07:03:20 -03:00
|
|
|
adjusted, and no checks are made for safety; *cell* must be non-``NULL`` and must
|
2008-01-20 05:30:57 -04:00
|
|
|
be a cell object.
|