[Python-checkins] CVS: python/dist/src/Include iterobject.h,NONE,1.1.2.1 Python.h,2.31,2.31.2.1 abstract.h,2.28,2.28.2.1 object.h,2.77,2.77.2.1 opcode.h,2.34,2.34.2.1

Guido van Rossum gvanrossum@usw-pr-cvs1.sourceforge.net
2001年3月13日 02:07:44 -0800


Update of /cvsroot/python/python/dist/src/Include
In directory usw-pr-cvs1:/tmp/cvs-serv16532/Include
Modified Files:
 Tag: iter-branch
	Python.h abstract.h object.h opcode.h 
Added Files:
 Tag: iter-branch
	iterobject.h 
Log Message:
This is the first iteration of my iterator patches. Don't worry, this
is on a branch (iter-branch), and it may still change.
Caveats:
- It's incomplete: class instances don't support __iter__ yet.
- It's currently using call notation to get the next item from the
 iterator; there have been arguments for making this use the next()
 method.
- The iter() built-in function is overloaded: iter(x) returns the
 iterator from x, iter(func, value) returns an iterator that calls a
 function until it returns or raises value. Note: the 'raises' part
 is experimental.
- There is no test suite or documentation yet.
Enjoy!
--- NEW FILE: iterobject.h ---
/* Iterators (the basic kind, over a sequence) */
extern DL_IMPORT(PyTypeObject) PyIter_Type;
#define PyIter_Check(op) ((op)->ob_type == &PyIter_Type)
extern DL_IMPORT(PyObject *) PyIter_New(PyObject *);
extern DL_IMPORT(PyTypeObject) PyCallIter_Type;
#define PyCallIter_Check(op) ((op)->ob_type == &PyCallIter_Type)
extern DL_IMPORT(PyObject *) PyCallIter_New(PyObject *, PyObject *);
Index: Python.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/Python.h,v
retrieving revision 2.31
retrieving revision 2.31.2.1
diff -C2 -r2.31 -r2.31.2.1
*** Python.h	2001年01月25日 20:04:14	2.31
--- Python.h	2001年03月13日 10:07:41	2.31.2.1
***************
*** 83,86 ****
--- 83,87 ----
 #include "sliceobject.h"
 #include "cellobject.h"
+ #include "iterobject.h"
 
 #include "codecs.h"
Index: abstract.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/abstract.h,v
retrieving revision 2.28
retrieving revision 2.28.2.1
diff -C2 -r2.28 -r2.28.2.1
*** abstract.h	2001年01月17日 17:09:53	2.28
--- abstract.h	2001年03月13日 10:07:41	2.28.2.1
***************
*** 471,474 ****
--- 471,479 ----
 */
 
+ DL_IMPORT(PyObject *) PyObject_GetIter(PyObject *);
+ /* Takes an object and returns an iterator for it.
+ This is typically a new iterator but of the argument
+ 	is an iterator, this returns itself. */
+ 
 /* Number Protocol:*/
 
Index: object.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/object.h,v
retrieving revision 2.77
retrieving revision 2.77.2.1
diff -C2 -r2.77 -r2.77.2.1
*** object.h	2001年02月26日 18:56:37	2.77
--- object.h	2001年03月13日 10:07:41	2.77.2.1
***************
*** 201,204 ****
--- 201,205 ----
 typedef long (*hashfunc)(PyObject *);
 typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int);
+ typedef PyObject *(*getiterfunc) (PyObject *);
 
 typedef struct _typeobject {
***************
*** 250,255 ****
 	long tp_weaklistoffset;
 
 #ifdef COUNT_ALLOCS
! 	/* these must be last */
 	int tp_alloc;
 	int tp_free;
--- 251,259 ----
 	long tp_weaklistoffset;
 
+ 	/* Iterators */
+ 	getiterfunc tp_iter;
+ 
 #ifdef COUNT_ALLOCS
! 	/* these must be last and never explicitly initialized */
 	int tp_alloc;
 	int tp_free;
***************
*** 343,354 ****
 #define Py_TPFLAGS_CHECKTYPES (1L<<4)
 
 #define Py_TPFLAGS_HAVE_RICHCOMPARE (1L<<5)
 
 /* Objects which are weakly referencable if their tp_weaklistoffset is >0 */
- /* XXX Should this have the same value as Py_TPFLAGS_HAVE_RICHCOMPARE?
- * These both indicate a feature that appeared in the same alpha release.
- */
 #define Py_TPFLAGS_HAVE_WEAKREFS (1L<<6)
 
 #define Py_TPFLAGS_DEFAULT ( \
 Py_TPFLAGS_HAVE_GETCHARBUFFER | \
--- 347,359 ----
 #define Py_TPFLAGS_CHECKTYPES (1L<<4)
 
+ /* tp_richcompare is defined */
 #define Py_TPFLAGS_HAVE_RICHCOMPARE (1L<<5)
 
 /* Objects which are weakly referencable if their tp_weaklistoffset is >0 */
 #define Py_TPFLAGS_HAVE_WEAKREFS (1L<<6)
 
+ /* tp_iter is defined */
+ #define Py_TPFLAGS_HAVE_ITER (1L<<7)
+ 
 #define Py_TPFLAGS_DEFAULT ( \
 Py_TPFLAGS_HAVE_GETCHARBUFFER | \
***************
*** 357,360 ****
--- 362,366 ----
 Py_TPFLAGS_HAVE_RICHCOMPARE | \
 Py_TPFLAGS_HAVE_WEAKREFS | \
+ Py_TPFLAGS_HAVE_ITER | \
 0)
 
Index: opcode.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v
retrieving revision 2.34
retrieving revision 2.34.2.1
diff -C2 -r2.34 -r2.34.2.1
*** opcode.h	2001年02月01日 22:48:12	2.34
--- opcode.h	2001年03月13日 10:07:41	2.34.2.1
***************
*** 54,57 ****
--- 54,58 ----
 #define BINARY_OR	66
 #define INPLACE_POWER	67
+ #define GET_ITER	68
 
 #define PRINT_EXPR	70
***************
*** 81,84 ****
--- 82,86 ----
 #define DELETE_NAME	91	/* "" */
 #define UNPACK_SEQUENCE	92	/* Number of sequence items */
+ #define FOR_ITER	93
 
 #define STORE_ATTR	95	/* Index in name list */

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