| 
									
										
										
										
											2019-05-17 11:55:34 +02:00
										 |  |  | .. highlight:: c
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00: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 10:11:56 +00:00
										 |  |  | .. c:type:: PyCellObject
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    The C structure used for cell objects.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:var:: PyTypeObject PyCell_Type
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    The type object corresponding to cell objects.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-27 01:41:15 +02:00
										 |  |  | .. c:function:: int PyCell_Check(PyObject *ob)
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-06 12:38:26 +01:00
										 |  |  |    Return true if *ob* is a cell object; *ob* must not be ``NULL``.  This
 | 
					
						
							|  |  |  |    function always succeeds.
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyCell_New(PyObject *ob)
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Create and return a new cell object containing the value *ob*. The parameter may
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    be ``NULL``.
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyCell_Get(PyObject *cell)
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return the contents of the cell *cell*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: PyObject* PyCell_GET(PyObject *cell)
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return the contents of the cell *cell*, but without checking that *cell* is
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    non-``NULL`` and a cell object.
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: int PyCell_Set(PyObject *cell, PyObject *value)
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Set the contents of the cell object *cell* to *value*.  This releases the
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    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
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  |    success, ``0`` will be returned.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void PyCell_SET(PyObject *cell, PyObject *value)
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Sets the value of the cell object *cell* to *value*.  No reference counts are
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    adjusted, and no checks are made for safety; *cell* must be non-``NULL`` and must
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  |    be a cell object.
 |