[Python-checkins] CVS: python/dist/src/Include object.h,2.79.2.8,2.79.2.9

Guido van Rossum gvanrossum@users.sourceforge.net
2001年6月05日 03:49:26 -0700


Update of /cvsroot/python/python/dist/src/Include
In directory usw-pr-cvs1:/tmp/cvs-serv20188/Include
Modified Files:
 Tag: descr-branch
	object.h 
Log Message:
Redo object creation; touching many files.
- Get rid of tp_construct, it had a bogus interface (this moves
 tp_dictoffset one slot up).
- New tp_ slots; the last two are "type methods" (their first
 argument is a type object, not an instance of that type):
 - tp_init is what tp_construct wanted to be, without the allocation;
 - tp_alloc does low-level allocation, initializing the object to its
 most basic form (up to and including registering it with the GC
 machinery);
 - tp_new does high-level object creation: it calls tp_alloc and then
 tp_init.
- New generic functions PyType_GenericAlloc() and PyType_GenericNew()
 provide default implementations for tp_alloc and tp_new that are
 usually sufficient.
- Used the above things to make standard list, dict and module objects
 subtypable as before.
- Remove tp_construct initializer spacer from funcobject.c.
- Add an __init__() override test to test_descr.py.
Index: object.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/object.h,v
retrieving revision 2.79.2.8
retrieving revision 2.79.2.9
diff -C2 -r2.79.2.8 -r2.79.2.9
*** object.h	2001年05月22日 17:21:18	2.79.2.8
--- object.h	2001年06月05日 10:49:24	2.79.2.9
***************
*** 205,208 ****
--- 205,210 ----
 typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *);
 typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
+ typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
+ typedef PyObject *(*allocfunc)(struct _typeobject *, PyObject *, PyObject *);
 
 typedef struct _typeobject {
***************
*** 266,273 ****
 	descrgetfunc tp_descr_get;
 	descrsetfunc tp_descr_set;
- 	ternaryfunc tp_construct;
 	long tp_dictoffset;
 
- 
 #ifdef COUNT_ALLOCS
 	/* these must be last and never explicitly initialized */
--- 268,276 ----
 	descrgetfunc tp_descr_get;
 	descrsetfunc tp_descr_set;
 	long tp_dictoffset;
+ 	initproc tp_init;
+ 	allocfunc tp_alloc;
+ 	allocfunc tp_new;
 
 #ifdef COUNT_ALLOCS
 	/* these must be last and never explicitly initialized */
***************
*** 290,293 ****
--- 293,300 ----
 
 extern DL_IMPORT(int) PyType_InitDict(PyTypeObject *);
+ extern DL_IMPORT(PyObject *) PyType_GenericAlloc(PyTypeObject *,
+ 						 PyObject *, PyObject *);
+ extern DL_IMPORT(PyObject *) PyType_GenericNew(PyTypeObject *,
+ 					 PyObject *, PyObject *);
 
 /* Generic operations on objects */

AltStyle によって変換されたページ (->オリジナル) /