mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 bca1cbc6f8
			
		
	
	
		bca1cbc6f8
		
	
	
	
	
		
			
			Most of these patches are from Thomas Heller, with long lines folded by Tim. The change to test_descr.py is from Guido. See the bug report. Not a bugfix candidate -- METH_CLASS is new in 2.3.
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Descriptors */
 | |
| #ifndef Py_DESCROBJECT_H
 | |
| #define Py_DESCROBJECT_H
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| typedef PyObject *(*getter)(PyObject *, void *);
 | |
| typedef int (*setter)(PyObject *, PyObject *, void *);
 | |
| 
 | |
| typedef struct PyGetSetDef {
 | |
| 	char *name;
 | |
| 	getter get;
 | |
| 	setter set;
 | |
| 	char *doc;
 | |
| 	void *closure;
 | |
| } PyGetSetDef;
 | |
| 
 | |
| typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
 | |
| 				 void *wrapped);
 | |
| 
 | |
| typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
 | |
| 				      void *wrapped, PyObject *kwds);
 | |
| 
 | |
| struct wrapperbase {
 | |
| 	char *name;
 | |
| 	int offset;
 | |
| 	void *function;
 | |
| 	wrapperfunc wrapper;
 | |
| 	char *doc;
 | |
| 	int flags;
 | |
| 	PyObject *name_strobj;
 | |
| };
 | |
| 
 | |
| /* Flags for above struct */
 | |
| #define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
 | |
| 
 | |
| /* Various kinds of descriptor objects */
 | |
| 
 | |
| #define PyDescr_COMMON \
 | |
| 	PyObject_HEAD \
 | |
| 	PyTypeObject *d_type; \
 | |
| 	PyObject *d_name
 | |
| 
 | |
| typedef struct {
 | |
| 	PyDescr_COMMON;
 | |
| } PyDescrObject;
 | |
| 
 | |
| typedef struct {
 | |
| 	PyDescr_COMMON;
 | |
| 	PyMethodDef *d_method;
 | |
| } PyMethodDescrObject;
 | |
| 
 | |
| typedef struct {
 | |
| 	PyDescr_COMMON;
 | |
| 	struct PyMemberDef *d_member;
 | |
| } PyMemberDescrObject;
 | |
| 
 | |
| typedef struct {
 | |
| 	PyDescr_COMMON;
 | |
| 	PyGetSetDef *d_getset;
 | |
| } PyGetSetDescrObject;
 | |
| 
 | |
| typedef struct {
 | |
| 	PyDescr_COMMON;
 | |
| 	struct wrapperbase *d_base;
 | |
| 	void *d_wrapped; /* This can be any function pointer */
 | |
| } PyWrapperDescrObject;
 | |
| 
 | |
| PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type;
 | |
| 
 | |
| PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
 | |
| PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *);
 | |
| PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *,
 | |
| 					       struct PyMemberDef *);
 | |
| PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
 | |
| 					       struct PyGetSetDef *);
 | |
| PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
 | |
| 						struct wrapperbase *, void *);
 | |
| #define PyDescr_IsData(d) ((d)->ob_type->tp_descr_set != NULL)
 | |
| 
 | |
| PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *);
 | |
| PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *);
 | |
| 
 | |
| 
 | |
| PyAPI_DATA(PyTypeObject) PyProperty_Type;
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #endif /* !Py_DESCROBJECT_H */
 | |
| 
 |