| .. highlightlang:: c | |
| .. _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. | |
| .. c:type:: PyCellObject | |
| The C structure used for cell objects. | |
| .. c:var:: PyTypeObject PyCell_Type | |
| The type object corresponding to cell objects. | |
| .. c:function:: int PyCell_Check(ob) | |
| Return true if *ob* is a cell object; *ob* must not be *NULL*. | |
| .. c:function:: PyObject* PyCell_New(PyObject *ob) | |
| Create and return a new cell object containing the value *ob*. The parameter may | |
| be *NULL*. | |
| .. c:function:: PyObject* PyCell_Get(PyObject *cell) | |
| Return the contents of the cell *cell*. | |
| .. c:function:: PyObject* PyCell_GET(PyObject *cell) | |
| Return the contents of the cell *cell*, but without checking that *cell* is | |
| non-*NULL* and a cell object. | |
| .. c:function:: int PyCell_Set(PyObject *cell, PyObject *value) | |
| Set the contents of the cell object *cell* to *value*. This releases the | |
| reference to any current content of the cell. *value* may be *NULL*. *cell* | |
| must be non-*NULL*; if it is not a cell object, ``-1`` will be returned. On | |
| success, ``0`` will be returned. | |
| .. c:function:: void PyCell_SET(PyObject *cell, PyObject *value) | |
| Sets the value of the cell object *cell* to *value*. No reference counts are | |
| adjusted, and no checks are made for safety; *cell* must be non-*NULL* and must | |
| be a cell object. |