• Armin Rigo's avatar
    Wrote down the invariants of some common objects whose structure is · 89a39461
    Armin Rigo yazdı
    exposed in header files.  Fixed a few comments in these headers.
    
    As we might have expected, writing down invariants systematically exposed a
    (minor) bug.  In this case, function objects have a writeable func_code
    attribute, which could be set to code objects with the wrong number of
    free variables.  Calling the resulting function segfaulted the interpreter.
    Added a corresponding test.
    89a39461
cellobject.h 653 Bytes
/* Cell object interface */

#ifndef Py_CELLOBJECT_H
#define Py_CELLOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
	PyObject_HEAD
	PyObject *ob_ref;	/* Content of the cell or NULL when empty */
} PyCellObject;

PyAPI_DATA(PyTypeObject) PyCell_Type;

#define PyCell_Check(op) ((op)->ob_type == &PyCell_Type)

PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);

#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
#define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v)

#ifdef __cplusplus
}
#endif
#endif /* !Py_TUPLEOBJECT_H */